[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);
}