[Feature][ZXW-33]merge ZXW 0428 version

Change-Id: I11f167edfea428d9fab198ff00ff1364932d1b0b
diff --git a/ap/app/zte_comm/nvserver/nvserver_rpc.c b/ap/app/zte_comm/nvserver/nvserver_rpc.c
index 1ac51e6..f165cdc 100755
--- a/ap/app/zte_comm/nvserver/nvserver_rpc.c
+++ b/ap/app/zte_comm/nvserver/nvserver_rpc.c
@@ -77,24 +77,32 @@
 * ·µ »Ø Öµ:     0±íʾ³É¹¦
 * ÆäËü˵Ã÷:     void
 *******************************************************************************/
-static void analyMsg(T_NV_MSG_INFO *msgrecv, T_NV_MSG_RESULT *msgsnd)
+static void analyMsg(T_NV_MSG_INFO *msgrecv, T_NV_MSG_RESULT *msgsnd, T_sc_rpc_header *rpc_data, T_sc_rpc_header *rpc_data2)
 {
-    T_sc_rpc_header rpc_data = {0};
+    unsigned int timeout = 10;
+    int try_cnt = 0;
 
-    rpc_data.msg_type = RPC_MSG_TYPE_REQUEST;
-    rpc_data.func_id = RPC_FUNC_ID_NV;
-    rpc_data.data_len = sizeof(T_NV_MSG_INFO);
-    memcpy(rpc_data.data, msgrecv, sizeof(T_NV_MSG_INFO));
+    memset(rpc_data, 0, sizeof(T_sc_rpc_header));
+    memset(rpc_data2, 0, sizeof(T_sc_rpc_header));
 
-    sc_rpc_send(g_rpc_fd, &rpc_data, 0);
+    rpc_data->msg_type = RPC_MSG_TYPE_REQUEST;
+    rpc_data->func_id = RPC_FUNC_ID_NV;
+    rpc_data->data_len = sizeof(T_NV_MSG_INFO);
+    memcpy(rpc_data->data, msgrecv, sizeof(T_NV_MSG_INFO));
 
-    while (0 != sc_rpc_recv(g_rpc_fd, &rpc_data, 0)) // µÈ´ýCAPºË´´½¨Í¨µÀ
+    do
     {
-        sleep(1);
-        continue;
-    }
+        if (try_cnt > 0)
+        {
+            sc_rpc_clear(g_rpc_fd);
+        }
+        sc_rpc_send(g_rpc_fd, rpc_data, 0);
+        try_cnt++;
+        //sleep(1);
+        //continue;
+    } while (0 != sc_rpc_recv(g_rpc_fd, rpc_data2, timeout)); // µÈ´ýCAPºË´´½¨Í¨µÀ
 
-    memcpy(msgsnd, rpc_data.data, sizeof(T_NV_MSG_RESULT));
+    memcpy(msgsnd, rpc_data2->data, sizeof(T_NV_MSG_RESULT));
 }
 
 /*******************************************************************************
@@ -115,6 +123,8 @@
     T_NV_MSG_INFO rcvBuf;
     T_NV_MSG_RESULT sndBuf;
     struct msqid_ds msgInfo;
+    T_sc_rpc_header *rpc_data;
+    T_sc_rpc_header *rpc_data2;
 
     prctl(PR_SET_NAME, "nvserver", 0, 0, 0);
 
@@ -138,6 +148,20 @@
         }
     }
 
+    rpc_data = malloc(sizeof(T_sc_rpc_header));
+    if (rpc_data == NULL)
+    {
+        perror("[error]nvrpc malloc error\n");
+        return -2;
+    }
+    rpc_data2 = malloc(sizeof(T_sc_rpc_header));
+    if (rpc_data2 == NULL)
+    {
+        perror("[error]nvrpc malloc2 error\n");
+        free(rpc_data);
+        return -3;
+    }
+
     // ÏûÏ¢½»»¥
     while (1)
     {
@@ -149,7 +173,7 @@
             continue;
         }
 
-        analyMsg(&rcvBuf, &sndBuf);
+        analyMsg(&rcvBuf, &sndBuf, rpc_data, rpc_data2);
 
         if (-1 == msgsnd(msgId, &sndBuf, sizeof(T_NV_MSG_RESULT) - sizeof(long), 0))
         {
@@ -158,6 +182,8 @@
         }
     }
 
+    free(rpc_data);
+    free(rpc_data2);
     return (0);
 }