[Feature][ZXW-65]merged P49 base code
Change-Id: I3e09c0c3d47483bc645f02310380ecb7fc6f4041
diff --git a/ap/app/zte_comm/nvserver/nvserver_rpc.c b/ap/app/zte_comm/nvserver/nvserver_rpc.c
index eb1efee..c5e6c5e 100755
--- a/ap/app/zte_comm/nvserver/nvserver_rpc.c
+++ b/ap/app/zte_comm/nvserver/nvserver_rpc.c
@@ -82,59 +82,74 @@
* ·µ »Ø Öµ: 0±íʾ³É¹¦
* ÆäËü˵Ã÷: void
*******************************************************************************/
-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)
+static void analyMsg(T_NV_MSG_INFO *msgrecv, T_NV_MSG_RESULT *msgsnd, T_sc_rpc_msg *rpc_data, T_sc_rpc_msg *rpc_data2)
{
unsigned int timeout = 10;
- int try_cnt = 0;
+ int send_once_flag = 0;
+ int ret;
- memset(rpc_data, 0, sizeof(T_sc_rpc_header));
- memset(rpc_data2, 0, sizeof(T_sc_rpc_header));
-
- 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));
+ rpc_data->header.msg_type = RPC_MSG_TYPE_REQUEST;
+ rpc_data->header.func_id = RPC_FUNC_ID_NV;
+ rpc_data->header.data_len = sizeof(T_NV_MSG_INFO) - NV_MAX_FILE_LEN - NV_MAX_KEY_LEN - NV_MAX_VAL_LEN;
+ rpc_data->header.file_len = strlen(msgrecv->file) + 1;
+ rpc_data->header.data_len += rpc_data->header.file_len;
+ memcpy(rpc_data->data, msgrecv, rpc_data->header.data_len);
+ rpc_data->header.key_len = strlen(msgrecv->key) + 1;
+ memcpy(rpc_data->data+rpc_data->header.data_len, msgrecv->key, rpc_data->header.key_len);
+ rpc_data->header.data_len += rpc_data->header.key_len;
+ rpc_data->header.value_len = strlen(msgrecv->value);
+ if (rpc_data->header.value_len > 0)
+ {
+ rpc_data->header.value_len += 1;
+ memcpy(rpc_data->data+rpc_data->header.data_len, msgrecv->value, rpc_data->header.value_len);
+ rpc_data->header.data_len += rpc_data->header.value_len;
+ }
do
{
- if (try_cnt > 0)
+ if (send_once_flag == 0)
{
- sc_rpc_clear(g_rpc_fd);
+ ret = sc_rpc_send(g_rpc_fd, rpc_data, 0);
+ if (ret == 0)
+ {
+ send_once_flag = 1; // send success
+ }
+ else
+ {
+ assert(0); // send fail
+ }
}
- 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)); //µÈ´ýÍê³É
- if (rpc_data2->msg_type != RPC_MSG_TYPE_REPLY)
+
+ ret = sc_rpc_recv(g_rpc_fd, rpc_data2, timeout);
+ if (ret == 0)
+ {
+ break; // recv success and break
+ }
+
+ } while (1); //µÈ´ýÍê³É
+
+ if (rpc_data2->header.msg_type != RPC_MSG_TYPE_REPLY)
assert(0);
- memcpy(msgsnd, rpc_data2->data, sizeof(T_NV_MSG_RESULT));
+ memcpy(msgsnd, rpc_data2->data, rpc_data2->header.data_len);
}
static int nv_rpc_wait_ready(int fd)
{
T_sc_rpc_header *rpc_data;
- unsigned int timeout = 200; // ms
- int write_flag = 1;
+ unsigned int timeout = 100; // ms
rpc_data = malloc(sizeof(T_sc_rpc_header));
if (rpc_data == NULL)
return -1;
+
while(1)
{
rpc_data->msg_type = RPC_MSG_TYPE_READY;
- if (write_flag)
- {
- if (write(fd, rpc_data, sizeof(T_sc_rpc_header)) != 0)
- write_flag = 0; // write ok and write sonly once
- }
- if (read(fd, rpc_data, sizeof(T_sc_rpc_header)) == 0)
- {
+ if (write(fd, rpc_data, sizeof(T_sc_rpc_header)) == sizeof(T_sc_rpc_header))
+ break;
+ else
usleep(timeout * 1000);
- continue;
- }
- break; /* read some data mean channel ok */
}
free(rpc_data);
@@ -159,11 +174,11 @@
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;
+ T_sc_rpc_msg *rpc_data;
+ T_sc_rpc_msg *rpc_data2;
long pid_backup; /* app-libnvram pid backup */
- prctl(PR_SET_NAME, "nvserver", 0, 0, 0);
+ prctl(PR_SET_NAME, "nvserver_rpc", 0, 0, 0);
memset(&msgInfo, 0, sizeof(msgInfo));
@@ -185,13 +200,13 @@
}
}
- rpc_data = malloc(sizeof(T_sc_rpc_header));
+ rpc_data = malloc(sizeof(T_sc_rpc_msg));
if (rpc_data == NULL)
{
perror("[error]nvrpc malloc error\n");
return -2;
}
- rpc_data2 = malloc(sizeof(T_sc_rpc_header));
+ rpc_data2 = malloc(sizeof(T_sc_rpc_msg));
if (rpc_data2 == NULL)
{
perror("[error]nvrpc malloc2 error\n");
@@ -201,7 +216,7 @@
if (nv_rpc_wait_ready(g_rpc_fd) < 0)
{
- assert(0);
+ assert(0);
}
sc_rpc_clear(g_rpc_fd);
printf("apnv and nv-rpc-daemon are ready both.");