[Bugfix][API-597][call] lib call\network wait service response Architecture Refactoring

Change-Id: I0ab6f59d468f3ec4ffebe01944fea3548977fc96
diff --git a/src/lynq/lib/liblynq-network/include/lynq_network/lynq_network.h b/src/lynq/lib/liblynq-network/include/lynq_network/lynq_network.h
index 8c40b68..5b2ce3c 100755
--- a/src/lynq/lib/liblynq-network/include/lynq_network/lynq_network.h
+++ b/src/lynq/lib/liblynq-network/include/lynq_network/lynq_network.h
@@ -72,6 +72,7 @@
 int lynq_set_ims(const int ims_mode);

 int lynq_wait_signalchanges(int *handle);

 int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id);

+

 typedef enum {

     NETWORK_STATE_BUFFER_TYPE_VOICE_REG,

     NETWORK_STATE_BUFFER_TYPE_DATA_REG,

@@ -115,6 +116,7 @@
 */

 int lynq_oos_deep_sleep_recover_timer_interval(int recovery_threshold,int fullband_timer,int sniffer_timer,int inactive_mode);

 #endif

+void lynq_set_test_mode(const int test_mode);

 #ifdef __cplusplus

 }

 #endif

diff --git a/src/lynq/lib/liblynq-network/lynq_module_common.h b/src/lynq/lib/liblynq-network/lynq_module_common.h
new file mode 100755
index 0000000..a582538
--- /dev/null
+++ b/src/lynq/lib/liblynq-network/lynq_module_common.h
@@ -0,0 +1,63 @@
+#ifndef LYNQ_MODULE_COMMON_H

+#define LYNQ_MODULE_COMMON_H 

+

+#define RESULT_OK (0)

+#define RESULT_ERROR (-1)

+

+/*the same with lynq_interface.h begin*/

+#define LYNQ_REQUEST_VENDOR_BASE 8000
+#define LYNQ_URC_VENDOR_BASE 9000
+#define LYNQ_AT_SNED (LYNQ_REQUEST_VENDOR_BASE +1)
+#define LYNQ_URC_CALL_STATUS_IND (LYNQ_URC_VENDOR_BASE+1)
+#define LYNQ_URC_DATA_STATUS_IND (LYNQ_URC_VENDOR_BASE+2)
+#define LYNQ_URC_DATA_CALL_STATUS_IND (LYNQ_URC_VENDOR_BASE+3)
+#define LYNQ_AUTO_ANSWER_CALL (LYNQ_REQUEST_VENDOR_BASE +2)
+#define LYNQ_REQUEST_SET_DTMF_VOLUME (LYNQ_REQUEST_VENDOR_BASE +3)
+#define LYNQ_URC_MODIFY_APNDB (LYNQ_URC_VENDOR_BASE+4)
+#define LYNQ_URC_RESET_APNDB (LYNQ_URC_VENDOR_BASE+5)
+
+
+#define LYNQ_REQUEST_WRITE_SMS_TO_MEMORY (LYNQ_REQUEST_VENDOR_BASE +4)
+#define LYNQ_REQUEST_READ_SMS_FROM_MEMORY (LYNQ_REQUEST_VENDOR_BASE + 5)
+#define LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY (LYNQ_REQUEST_VENDOR_BASE + 6)
+#define LYNQ_REQUEST_LIST_SMS_FROM_MEMORY (LYNQ_REQUEST_VENDOR_BASE + 7)
+#define LYNQ_REQUEST_SET_DEFAULT_SIM_ALL (LYNQ_REQUEST_VENDOR_BASE + 8)
+
+#define LYNQ_REQUEST_SET_SPEECH_VOLUME (LYNQ_REQUEST_VENDOR_BASE +9)
+#define LYNQ_REQUEST_GET_SPEECH_VOLUME (LYNQ_REQUEST_VENDOR_BASE +10)
+#define LYNQ_REQUEST_RECORD  (LYNQ_REQUEST_VENDOR_BASE +11)
+#define LYNQ_REQUEST_OOS_RECOVER_TIMER_INTERVAL (LYNQ_REQUEST_VENDOR_BASE +12)
+#define LYNQ_REQUEST_OOS_DEEP_SLEEP_RECOVER_TIMER_INTERVAL (LYNQ_REQUEST_VENDOR_BASE +13)

+/*the same with lynq_interface.h end*/

+

+typedef enum{

+    /*base abnormal*/

+    LYNQ_E_PARAMETER_ANONALY=7000,

+    LYNQ_E_SEND_REQUEST_FAIL=7001,

+    LYNQ_E_GET_HEAD_ERROR=7002,

+    LYNQ_E_INNER_ERROR=7100,

+    LYNQ_E_MALLOC_ERROR=7101,

+    /**/

+    LYNQ_E_CARDSTATE_ERROR=8000,

+    /* The voice service state is out of service*/

+    LYNQ_E_STATE_OUT_OF_SERVICE=8001,

+    /* The voice service state is EMERGENCY_ONLY*/

+    LYNQ_E_STATE_EMERGENCY_ONLY=8002,

+    /* The radio power is power off*/

+    LYNQ_E_STATE_POWER_OFF=8003,

+    LYNQ_E_TIME_OUT=8004,

+    /*create or open sms DB fail */

+    LYNQ_E_SMS_DB_FAIL=8005,

+    /*Failed to execute sql statement*/

+    LYNQ_E_SMS_SQL_FAIL = 8006,

+    LYNQ_E_SMS_NOT_FIND = 8007,

+    /* The logic conflict*/

+    LYNQ_E_CONFLICT=9000,

+    /*Null anomaly*/

+    LYNQ_E_NULL_ANONALY=9001,   

+}LYNQ_E;

+

+#define MODULE_CLOSED (0)

+#define MODULE_SWITCHING  (1)

+#define MODULE_RUNNING (2)

+#endif

diff --git a/src/lynq/lib/liblynq-network/lynq_module_socket.cpp b/src/lynq/lib/liblynq-network/lynq_module_socket.cpp
new file mode 100755
index 0000000..fa71d82
--- /dev/null
+++ b/src/lynq/lib/liblynq-network/lynq_module_socket.cpp
@@ -0,0 +1,547 @@
+#include <stdio.h>

+#include <sys/types.h>

+#include <sys/socket.h>

+#include <arpa/inet.h>

+#include <string.h>

+#include <unistd.h>

+#include <binder/Parcel.h>

+#include <log/log.h>

+#include <cutils/jstring.h>

+#include <pthread.h>

+#include <list>

+#include <vendor-ril/telephony/ril.h>

+#include <vendor-ril/telephony/mtk_ril_sp.h>

+#include "lynq_network.h"

+#include "lynq_module_common.h"

+#include "lynq_module_socket.h"

+#include "liblog/lynq_deflog.h"

+

+#define LYNQ_SERVICE_PORT 8088

+#define LYNQ_ADDRESS "127.0.0.1"

+#define LYNQ_URC_SERVICE_PORT 8086

+#define LYNQ_URC_ADDRESS "0.0.0.0"

+#define LYNQ_REQUEST_PARAM_BUF 8192

+#define LYNQ_REC_BUF 8192

+

+#define USER_LOG_TAG "LYNQ_NETWORK"

+

+typedef struct{

+    int uToken;

+    int request;

+    int paramLen;

+    char param[LYNQ_REQUEST_PARAM_BUF];

+}lynq_client_t;

+

+typedef struct{

+    int resp_type;

+    int token;

+    int request;

+    int slot_id;

+    int error;

+}lynq_resp_t;

+

+lynq_client_t client_t;

+lynq_resp_t response;

+

+int module_len_rc_addr_serv;

+int module_len_urc_addr_serv;

+struct sockaddr_in module_rc_addr_serv;

+struct sockaddr_in module_urc_addr_serv;

+static int module_rc_sock_fd = -1;

+static int module_urc_sock_fd = -1;

+int module_urc_status = 1;

+int module_rc_status = 1;

+pthread_t module_urc_tid = -1;

+pthread_t module_rc_tid = -1;

+static pthread_mutex_t s_urc_mutex = PTHREAD_MUTEX_INITIALIZER;

+

+/*hq add for set waiting time 2022/09/13 begin*/

+static pthread_mutex_t s_sendto_mutex = PTHREAD_MUTEX_INITIALIZER;

+static pthread_mutex_t s_RecvMsgBlockMutex = PTHREAD_MUTEX_INITIALIZER;

+static pthread_cond_t s_WaitRecvMsgCond = PTHREAD_COND_INITIALIZER;

+#define BLOCK_RECV_MSG_LOCK() pthread_mutex_lock(&s_RecvMsgBlockMutex)

+#define BLOCK_RECV_MSG_UNLOCK() pthread_mutex_unlock(&s_RecvMsgBlockMutex)

+#define BLOCK_WAIT_RECV_MSG_TIME_OUT(a) pthread_cond_timedwait(&s_WaitRecvMsgCond, &s_RecvMsgBlockMutex,(a))

+#define BLOCK_WAKEUP_RECV_MSG() pthread_cond_broadcast(&s_WaitRecvMsgCond)

+static std::list<Parcel*> s_recv_parcel_list;

+const int waitResponse(int token,int time_out);

+/*hq add for set waiting time 2022/09/13 end*/

+

+int g_module_Global_uToken = 0;

+int g_wait_time=5;

+

+/*inner test*/

+static int s_inner_test=0;

+

+/**@brief just for inner test

+* @param test_mode [IN]: test mode

+*  0:success

+*  other:failure

+*/

+void lynq_set_test_mode(const int test_mode)

+{

+    if(test_mode<0)

+    {

+        g_wait_time = -test_mode;          

+    }

+    else if(test_mode==9999)

+    {

+        LYERRLOG("%s inner test para %d %d",__func__,s_inner_test,g_wait_time);         

+    }    

+    else 

+    {

+        s_inner_test = test_mode;    

+    }

+}

+

+void cleanup_RecvMsgBlock_mutex(void *arg)

+{

+    BLOCK_RECV_MSG_UNLOCK(); 

+}

+

+/**@brief wait response with expected token and write msg to parcel in some time

+* @param p [IN]: pointer the parcel

+* @param token [IN]: the expected token for the response msg

+* @param time_out [IN]: timeout.

+* @return

+*  0:success

+*  other:failure

+*/

+const int waitResponse(Parcel*& p, int token,int time_out)

+{
+    int waitToken = token;

+    int wakeup_token=-1;

+    int resp_type;

+    struct timeval now;
+    struct timespec timeout;  

+    int ret;

+    std::list<Parcel*>::iterator iter;

+    int cnt=0;

+    

+	gettimeofday(&now,NULL);

+    timeout.tv_sec = now.tv_sec+time_out; //timeout is 1min

+    timeout.tv_nsec = now.tv_usec*1000;
+
+    LYINFLOG("%s wait token is %d, wait time is %d",__func__,waitToken,time_out);

+    

+    BLOCK_RECV_MSG_LOCK();

+    pthread_cleanup_push(cleanup_RecvMsgBlock_mutex, NULL); // thread cleanup handler

+    while(module_rc_status) { 

+        cnt++;

+        for(iter=s_recv_parcel_list.begin();iter!=s_recv_parcel_list.end();++iter)

+        {

+            (*iter)->setDataPosition(0);

+            (*iter)->readInt32(&resp_type);

+            (*iter)->readInt32(&wakeup_token);

+            if(wakeup_token==waitToken)

+            {

+                LYINFLOG("%s get waitToken",__func__);

+                p=(*iter);

+                p->setDataPosition(0);

+                s_recv_parcel_list.erase(iter);

+                goto waitResponse_end;

+            }

+        }

+        LYINFLOG("%s no wait Token in msg list, list size is %d",__func__,s_recv_parcel_list.size());

+        ret=BLOCK_WAIT_RECV_MSG_TIME_OUT(&timeout);

+        if(ret!=0)

+        {

+            LYERRLOG("%s no expected token %d after %d second",__func__,waitToken,time_out);

+            break;

+        }        

+    }

+waitResponse_end:

+    LYINFLOG("%s wait token is %d wakeup_token is %d, cnt is %d",__func__,waitToken,wakeup_token,cnt);

+    pthread_cleanup_pop(0);

+    BLOCK_RECV_MSG_UNLOCK(); 

+    return wakeup_token==waitToken ? 0:LYNQ_E_TIME_OUT;

+}

+

+/**@brief print solicied response msg's head information

+* @param head [IN]: head information

+* @return none

+*/

+void PrintHeader(lynq_resp_t& head)

+{

+    LYINFLOG("resp_type=%d,token=%d,request=%d,slot_id=%d,error_code=%d",head.resp_type,head.token,head.request,head.slot_id,head.error);

+}

+

+/**@brief get solicied response msg's head

+* @param head [OUT]: head information

+* @return

+*  0:success

+*  other:failure

+*/

+int GetHeader(Parcel* &p, lynq_resp_t& head)

+{

+    LYINFLOG("get header");

+    if(p->dataAvail() > 0)

+    {

+        p->readInt32(&(head.resp_type));

+        p->readInt32(&(head.token));

+        p->readInt32(&(head.request));

+        p->readInt32(&(head.slot_id));

+        p->readInt32(&(head.error));

+        PrintHeader(head);

+        return RESULT_OK;  

+    }

+    else

+    {

+        return RESULT_ERROR;  

+    }

+}

+

+/**@brief send msg to service and get response from service

+* @param request_id [IN]: request id

+* @param time_out [IN]: wait time uplimit

+* @param p [IN]: point to response msg's parcel

+* @param argc [IN]: how many parameters in parameter string

+* @param format [IN]: parameter string's format

+* @param ... [IN]: the specific parameter

+* @return

+*  0:success

+*  other:failure

+*/

+int lynq_send_common_request(Parcel*& p, int time_out, int request_id, int argc, const char* format,...)

+{

+    lynq_client_t client;

+    int ret;

+    int send_num;

+    

+    client.uToken = g_module_Global_uToken;

+    g_module_Global_uToken=(g_module_Global_uToken+1)%10000;/*0-10000*/

+    client.request = request_id;

+    client.paramLen = argc;

+    bzero(client.param,LYNQ_REQUEST_PARAM_BUF);

+    if(argc!=0)

+    {

+        va_list args;

+        va_start(args, format);

+        vsnprintf(client.param, LYNQ_REQUEST_PARAM_BUF, format, args);

+        va_end(args);    

+    }

+    LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);

+    pthread_mutex_lock(&s_sendto_mutex);

+     if(s_inner_test==1)

+    {

+        send_num = 1;          

+    }

+    else

+    {

+        send_num = sendto(module_rc_sock_fd,&client,sizeof(client),0,(struct sockaddr *)&module_rc_addr_serv,module_len_rc_addr_serv); 

+    }

+    if(s_inner_test>=1000)

+    {

+        time_out = s_inner_test-1000;

+    }        

+    pthread_mutex_unlock(&s_sendto_mutex);

+

+    if(send_num <= 0)       

+    {

+        LYERRLOG("send request fail, send num is %d", send_num);

+        return LYNQ_E_SEND_REQUEST_FAIL;

+    }

+    ret = waitResponse(p, client.uToken,time_out);

+

+    if(ret==0)

+    {

+        lynq_resp_t head; 

+        ret=GetHeader(p,head);

+        if(ret!=0)

+        {

+            LYERRLOG("%s %d get head error %d",__func__,client.uToken,ret);

+            delete p;

+            return LYNQ_E_GET_HEAD_ERROR;

+        }

+        if(head.error!=0)

+        {

+            LYERRLOG("%s %d mdm return head error %d",__func__,client.uToken,head.error);

+            delete p;

+            return head.error;

+        }

+        LYERRLOG("%s %d suc",__func__,client.uToken);

+        return RESULT_OK;  

+    }

+

+    LYERRLOG("%s %d fail, ret is %d",__func__,client.uToken,ret);

+   

+    return ret;    

+}

+

+/**@ a thread just for recv\buffer solicited msg's response and notice waiting thread

+* @param p [IN]: no meaning

+* @return

+* always null

+*/

+void *thread_rc_recv(void *p)

+{

+    Parcel* rc_p;

+    std::list<Parcel*>::iterator iter;

+    int resp_type = -1;   

+    char rc_data[LYNQ_REC_BUF];

+    int rc_len;

+    int null_cnt=0;

+    int wakeup_token; 

+ 

+    LYINFLOG("rc thread is running");

+    while(module_rc_status)

+    {

+        bzero(rc_data,LYNQ_REC_BUF);

+        while(true)

+        {

+            rc_len = recvfrom(module_rc_sock_fd,rc_data,sizeof(rc_data),0,(struct sockaddr *)&module_rc_addr_serv,(socklen_t *)&module_len_rc_addr_serv);

+            if(rc_len<sizeof(int32_t)*2)

+            {

+                 LYERRLOG("%s recv len %d less %d",__func__, rc_len,sizeof(int)*2);

+                 continue;

+            } 

+            rc_p= new Parcel;

+            if(rc_p==NULL)

+            {

+                null_cnt++;

+                LYERRLOG("%s rc_p is NULL, cnt is %d",__func__, null_cnt);

+                if(null_cnt>20)

+                {

+                    goto rc_recv_end;

+                }

+                continue;

+            }

+            else 

+            {

+                null_cnt=0;

+            }

+                

+            rc_p->setData((uint8_t *)rc_data,rc_len); // p.setData((uint8_t *) buffer, buflen);

+            rc_p->setDataPosition(0);

+            if(rc_p->dataAvail()>0)

+            {

+                rc_p->readInt32(&resp_type); 

+                rc_p->readInt32(&wakeup_token); 

+                BLOCK_RECV_MSG_LOCK();

+                s_recv_parcel_list.push_back(rc_p);                

+                LYINFLOG("%s wakeup token is %d, list size is %d!",__func__,wakeup_token,s_recv_parcel_list.size());

+                if(s_recv_parcel_list.size()>20) //max 20

+                {

+                    iter=s_recv_parcel_list.begin();

+                    (*iter)->setDataPosition(0);

+                    (*iter)->readInt32(&resp_type); 

+                    (*iter)->readInt32(&wakeup_token); 

+                    delete (*(s_recv_parcel_list.begin()));

+                    LYERRLOG("%s wakeup token %d is deleted!",__func__,wakeup_token);

+                    s_recv_parcel_list.erase(iter);

+                }                   

+                BLOCK_WAKEUP_RECV_MSG();

+                BLOCK_RECV_MSG_UNLOCK();

+                break;

+            }

+            else

+            {

+                LYERRLOG("%s rc_p data Avail %d not greater than 0",__func__, rc_p->dataAvail());

+                delete rc_p;

+            }

+        }

+    }                 

+

+rc_recv_end:    

+    LYINFLOG("rc thread ended");

+    return NULL;

+}

+

+void *thread_urc_recv(void *p)

+{

+    Parcel *urc_p =NULL;

+    char urc_data[LYNQ_REC_BUF];    

+    int res = 0;

+   

+    LYINFLOG("urc thread is running");

+    while(module_urc_status)

+    {

+        bzero(urc_data,LYNQ_REC_BUF);

+        res = recvfrom(module_urc_sock_fd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&module_urc_addr_serv,(socklen_t*)&module_len_urc_addr_serv);

+        if(res<=0)

+        {

+            LYERRLOG("thread_urc_recv step2 fail:");

+            break;

+        }

+        urc_p = new Parcel();

+        if(urc_p == NULL)

+        {

+            LYERRLOG("new parcel failure!!!");

+            break;

+        }

+        urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);

+        urc_p->setDataPosition(0);

+        if(urc_p->dataAvail()>0)

+        {

+            pthread_mutex_lock(&s_urc_mutex);

+            urc_msg_process(urc_p);            

+            pthread_mutex_unlock(&s_urc_mutex);

+        }

+        delete urc_p;

+        urc_p = NULL;

+    }

+    LYINFLOG("urc thread ended");

+    return NULL;

+}

+

+int lynq_server_socket_start()

+{

+    module_rc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);

+    if(module_rc_sock_fd < 0)

+    {

+        LYERRLOG("socket open error");

+        return -1;

+    }

+

+    LYINFLOG("module_rc_sock_fd = %d",module_rc_sock_fd);

+

+    memset(&module_rc_addr_serv, 0, sizeof(module_rc_addr_serv));

+    module_rc_addr_serv.sin_family = AF_INET;

+    module_rc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_ADDRESS);

+    module_rc_addr_serv.sin_port = htons(LYNQ_SERVICE_PORT);

+    module_len_rc_addr_serv = sizeof(module_rc_addr_serv);

+

+    BLOCK_RECV_MSG_LOCK(); 

+    std::list<Parcel*>::iterator iter;

+    for(iter=s_recv_parcel_list.begin();iter!=s_recv_parcel_list.end();++iter)

+    {

+        delete (*iter);        

+    }

+    s_recv_parcel_list.clear();  

+    BLOCK_RECV_MSG_UNLOCK(); 

+

+//    pthread_attr_t attr;

+    int ret;

+

+    pthread_mutex_init(&s_sendto_mutex, NULL);   

+    pthread_mutex_init(&s_RecvMsgBlockMutex, NULL);   

+

+    module_rc_status = 1;

+//    pthread_attr_init(&attr);

+//    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

+    ret = pthread_create(&module_rc_tid,/*&attr*/NULL,thread_rc_recv,NULL);

+    if(ret <0)

+    {

+        LYERRLOG("rc pthread create error");

+        module_rc_status =0;

+        close(module_rc_sock_fd);

+        module_rc_sock_fd =-1;        

+        return ret;

+    }   

+    

+    LYINFLOG("rc start success");

+

+    return RESULT_OK;  

+}

+

+int lynq_urc_socket_start()

+{

+//    pthread_t tid;

+//    pthread_attr_t attr;

+    int on = 1;

+    int ret = 0;

+    module_len_urc_addr_serv = sizeof(sockaddr_in);

+    module_urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);

+    if (module_urc_sock_fd <0){

+        LYERRLOG("urc socket error");

+        return RESULT_ERROR;  

+    }

+    module_urc_addr_serv.sin_family = AF_INET;

+    module_urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);

+    module_urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);

+    /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/

+    ret = setsockopt(module_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);

+    if(ret <0)

+    {

+        LYERRLOG("urc socket set error");

+        close(module_urc_sock_fd);

+        module_urc_sock_fd =-1;

+        return RESULT_ERROR;  

+    }

+    ret = bind(module_urc_sock_fd ,(struct sockaddr*)&module_urc_addr_serv, sizeof(module_urc_addr_serv));

+    if(ret <0)

+    {

+        LYERRLOG("urc socket bind error");

+        close(module_urc_sock_fd);

+        module_urc_sock_fd =-1;

+        return RESULT_ERROR;  

+    }

+

+    module_urc_status = 1;

+  //  pthread_attr_init(&attr);

+  //  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

+    ret = pthread_create(&module_urc_tid,/*&attr*/NULL,thread_urc_recv,NULL);

+    if(ret <0)

+    {

+        LYERRLOG("urc pthread create error");

+        module_urc_status = 0;

+        close(module_urc_sock_fd);

+        module_urc_sock_fd =-1;

+        return RESULT_ERROR;  

+    }

+    LYINFLOG("urc start success");

+    

+    return RESULT_OK;  

+}

+

+void lynq_close_urc_thread()

+{

+    int ret;

+

+    pthread_mutex_lock(&s_urc_mutex); //just cancel urc tid when recvfrom avoid mutual lock for tid may call pthread_cond_wait

+    module_urc_status = 0;    

+    if(module_urc_tid!=-1)

+    {

+        ret = pthread_cancel(module_urc_tid);

+        LYINFLOG("pthread cancel urc ret = %d",ret);            

+    }

+    pthread_mutex_unlock(&s_urc_mutex);

+     if(module_urc_tid != -1)

+    {

+        ret = pthread_join(module_urc_tid,NULL);

+        LYINFLOG("pthread join urc tid ret = %d",ret);

+        module_urc_tid =-1;

+    }

+    if (module_urc_sock_fd > 0)

+    {

+        close(module_urc_sock_fd);

+        module_urc_sock_fd =-1;

+    }  

+}

+

+void lynq_close_rc_thread()

+{

+    int ret;

+    BLOCK_RECV_MSG_LOCK(); 

+    module_rc_status = 0;    

+    BLOCK_WAKEUP_RECV_MSG(); 

+    if(module_rc_tid != -1)

+    {

+        ret = pthread_cancel(module_rc_tid);

+        LYINFLOG("pthread cancel rc ret = %d",ret);     

+    }    

+    BLOCK_RECV_MSG_UNLOCK();     

+    if(module_rc_tid != -1)

+    {

+        ret = pthread_join(module_rc_tid,NULL);

+        module_rc_tid =-1;

+        LYINFLOG("pthread join rc tid ret = %d",ret);

+        

+    }    

+

+    if (module_rc_sock_fd > 0)

+    {

+        close(module_rc_sock_fd);

+        module_rc_sock_fd =-1;

+    }

+    

+    BLOCK_RECV_MSG_LOCK();    

+    std::list<Parcel*>::iterator iter;

+    for(iter=s_recv_parcel_list.begin();iter!=s_recv_parcel_list.end();++iter)

+    {

+        delete (*iter);        

+    }

+    s_recv_parcel_list.clear(); 

+    BLOCK_RECV_MSG_UNLOCK(); 

+}

+

diff --git a/src/lynq/lib/liblynq-network/lynq_module_socket.h b/src/lynq/lib/liblynq-network/lynq_module_socket.h
new file mode 100755
index 0000000..fb1785a
--- /dev/null
+++ b/src/lynq/lib/liblynq-network/lynq_module_socket.h
@@ -0,0 +1,18 @@
+#ifndef LYNQ_MODULE_SOCKET_H

+#define LYNQ_MODULE_SOCKET_H 

+

+using ::android::Parcel;

+

+int lynq_set_test_network(const int test_mode);

+int lynq_send_common_request(Parcel*& p, int time_out, int request_id,  int argc, const char* format,...);

+int lynq_server_socket_start();

+int lynq_urc_socket_start();

+void lynq_close_urc_thread();

+void lynq_close_rc_thread();

+

+extern int g_module_Global_uToken;

+extern int g_wait_time;

+

+void urc_msg_process(Parcel *p);

+

+#endif

diff --git a/src/lynq/lib/liblynq-network/lynq_network_state_buffer.cpp b/src/lynq/lib/liblynq-network/lynq_module_state_buffer.cpp
similarity index 99%
rename from src/lynq/lib/liblynq-network/lynq_network_state_buffer.cpp
rename to src/lynq/lib/liblynq-network/lynq_module_state_buffer.cpp
index 7b41533..d7c9111 100755
--- a/src/lynq/lib/liblynq-network/lynq_network_state_buffer.cpp
+++ b/src/lynq/lib/liblynq-network/lynq_module_state_buffer.cpp
@@ -11,7 +11,8 @@
 #include <climits>

 #include "liblog/lynq_deflog.h"

 #include "lynq_network.h"

-#include "lynq_network_state_buffer.h"

+#include "lynq_module_common.h"

+#include "lynq_module_state_buffer.h"

 

 #define USER_LOG_TAG "LYNQ_NETWORK"

 

@@ -86,38 +87,38 @@
 

 void start_network_timer(timer_t timer, int signal_value, int milliseconds) {

     LYINFLOG("start_network_timer(), timer_id=%ld, signal_value=%d, time=%d",(long)timer, signal_value, milliseconds);

-

-    struct itimerspec expire;

-    expire.it_interval.tv_sec = 0;

-    expire.it_interval.tv_nsec = 0;

-    expire.it_value.tv_sec = milliseconds/1000;

-    expire.it_value.tv_nsec = (milliseconds%1000)*1000000;

-    if (timer_settime(timer, 0, &expire, NULL) == -1) {

+
+    struct itimerspec expire;
+    expire.it_interval.tv_sec = 0;
+    expire.it_interval.tv_nsec = 0;
+    expire.it_value.tv_sec = milliseconds/1000;
+    expire.it_value.tv_nsec = (milliseconds%1000)*1000000;
+    if (timer_settime(timer, 0, &expire, NULL) == -1) {
         LYERRLOG("timer_settime  failed reason=[%s]", strerror(errno));

-    }

-}

-

+    }
+}
+
 void stop_network_timer(timer_t timer, int signal_value) {

     LYINFLOG("stop_network_timer(), timer_id=%ld, signal_value=%d", (long)timer, signal_value);

-    struct itimerspec timespec;

-    if(timer_gettime(timer, &timespec) == -1) {

+    struct itimerspec timespec;
+    if(timer_gettime(timer, &timespec) == -1) {
         LYERRLOG("stop_network_timer(), get time fail(%s)", strerror(errno));

-        return;

-    }

+        return;
+    }
     LYINFLOG("stop_network_timer(), tv_sec=%ld, tv_nsec=%ld",timespec.it_value.tv_sec, timespec.it_value.tv_nsec);

-    if((timespec.it_value.tv_sec == 0)  && (timespec.it_value.tv_nsec == 0) ) {

+    if((timespec.it_value.tv_sec == 0)  && (timespec.it_value.tv_nsec == 0) ) {
         LYINFLOG("stop_network_timer(), timer_id(%ld) had stopped, just return", (long)timer);

-        return;

-    } else {

+        return;
+    } else {
         start_network_timer(timer, signal_value, 0);

-    }

+    }
 }

 

 void network_timer_handler(sigval_t sig) {    

     LYINFLOG("network_timer_handler, sig_value: %d", sig.sival_int);

     int s;   

-    s = pthread_mutex_lock(&mtx);

-    if(s != 0) {

+    s = pthread_mutex_lock(&mtx);
+    if(s != 0) {
         LYERRLOG("network_timer_handler, pthead_mutex_lock fail");

     }   

     for(int i=0;i<NETWORK_STATE_BUFFER_TYPE_MAX;i++)

@@ -128,8 +129,8 @@
             break;

         }        

     }    

-    s = pthread_mutex_unlock(&mtx);

-    if(s != 0) {

+    s = pthread_mutex_unlock(&mtx);
+    if(s != 0) {
         LYERRLOG("network_timer_handler, pthread_mutex_unlock fail");

     }

 }

@@ -137,17 +138,17 @@
 void init_network_timer(timer_t* timer, int signal_value) 

 {

     struct sigevent sevp;

-    memset(&sevp, 0, sizeof(sevp));

-    sevp.sigev_value.sival_int = signal_value;

-    sevp.sigev_notify = SIGEV_THREAD;

+    memset(&sevp, 0, sizeof(sevp));
+    sevp.sigev_value.sival_int = signal_value;
+    sevp.sigev_notify = SIGEV_THREAD;
     sevp.sigev_notify_function = network_timer_handler;

-

-    if(timer_create(CLOCK_MONOTONIC, &sevp, timer) == -1) {

+
+    if(timer_create(CLOCK_MONOTONIC, &sevp, timer) == -1) {
         LYERRLOG("init_network_timer()  failed reason=[%s]", strerror(errno));

-    }

+    }
     LYINFLOG("init_network_timer(), timer_Id = %ld, signal_value=%d", (long)(*timer), signal_value);

-}

-

+}
+
 void init_network_timer_all() {

 

     for(int i=0;i<NETWORK_STATE_BUFFER_TYPE_MAX;i++){

diff --git a/src/lynq/lib/liblynq-network/lynq_network_state_buffer.h b/src/lynq/lib/liblynq-network/lynq_module_state_buffer.h
similarity index 82%
rename from src/lynq/lib/liblynq-network/lynq_network_state_buffer.h
rename to src/lynq/lib/liblynq-network/lynq_module_state_buffer.h
index b451c65..35357a3 100755
--- a/src/lynq/lib/liblynq-network/lynq_network_state_buffer.h
+++ b/src/lynq/lib/liblynq-network/lynq_module_state_buffer.h
@@ -1,13 +1,15 @@
-#ifndef LYNQ_NETWORK_STATE_BUFFER_H

-#define LYNQ_NETWORK_STATE_BUFFER_H 

+#ifndef LYNQ_MODULE_STATE_BUFFER_H

+#define LYNQ_MODULE_STATE_BUFFER_H 

 #ifdef __cplusplus

 extern "C" {

 #endif

+

 void set_state_buffer_valid(lynq_network_state_buffer_type type,int valid);

 void set_state_to_buf(lynq_network_state_buffer_type type,...);

 int get_state_from_buf(lynq_network_state_buffer_type type,...);

 void init_network_timer_all();

 void deinit_network_timer_all();

+

 #ifdef __cplusplus

 }

 #endif

diff --git a/src/lynq/lib/liblynq-network/lynq_network.cpp b/src/lynq/lib/liblynq-network/lynq_network.cpp
index 2fc1480..6040dbf 100755
--- a/src/lynq/lib/liblynq-network/lynq_network.cpp
+++ b/src/lynq/lib/liblynq-network/lynq_network.cpp
@@ -8,688 +8,89 @@
 #include <log/log.h>

 #include <cutils/jstring.h>

 #include <pthread.h>

-#include <list>

 #include <vendor-ril/telephony/ril.h>

 #include <vendor-ril/telephony/mtk_ril_sp.h>

-

-#include "lynq_network.h"

 #include "liblog/lynq_deflog.h"

-#include "lynq_network_state_buffer.h"

-#define LYNQ_SERVICE_PORT 8088

-#define LYNQ_URC_SERVICE_PORT 8086

-#define LYNQ_URC_ADDRESS "0.0.0.0"

-#define LYNQ_ADDRESS "127.0.0.1"

-#define LYNQ_REQUEST_PARAM_BUF 8192

-#define LYNQ_REC_BUF 8192

-#define LYNQ_RESP_BUF 128

+#include "lynq_network.h"

+#include "lynq_module_common.h"

+#include "lynq_module_socket.h"

+#include "lynq_module_state_buffer.h"

+

+#define LYNQ_RESP_STRING_MAX_NUM 128

 #define LYNQ_TYPE_BUF 10

 #define USER_LOG_TAG "LYNQ_NETWORK"

 

-

 using ::android::Parcel;

 

+static int s_module_wait_urc_id;

+static int s_module_urc_slot_id;

+static signalStrength_t s_network_urc_solSigStren;

 

-typedef struct{

-    int uToken;

-    int request;

-    int paramLen;

-    char param[LYNQ_REQUEST_PARAM_BUF];

-}lynq_client_t;

-

-typedef struct{

-    int resp_type;

-    int token;

-    int request;

-    int slot_id;

-    int error;

-}lynq_resp_t;

-

-lynq_client_t client_t;

-lynq_resp_t response;

-

-int network_len_addr_serv;

-int network_len_urc_addr_serv;

-struct sockaddr_in network_addr_serv;

-struct sockaddr_in network_urc_addr_serv;

-static int network_sock_fd = 0;

-int network_urc_sock_fd = 0;

-int network_Global_uToken = 0;

-int network_slot_id = -1;

-int network_urc_slot_id = -1;

-int network_urc_status = 1;

-int network_wait_urc_id = 0;

-signalStrength_t network_urc_solSigStren;

-/**g_lynq_network_init_flag

+/**g_module_init_flag

 * @brief mark network initialization state

 * 0:deinit status

 * 1:init state

 */

-static int g_lynq_network_init_flag = 0;

-

-static pthread_mutex_t signal_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;

-static pthread_cond_t signal_state_change_cond = PTHREAD_COND_INITIALIZER;

-

-/**g_lynq_network_sendto_mutex

-* @brief mark network send request mutex

-*/

-static pthread_mutex_t g_lynq_network_sendto_mutex;

-

-

-/*hq add for set waiting time 2022/09/13 begin*/

-int network_rc_status = 1;

-static pthread_mutex_t s_RecvMsgBlockMutex = PTHREAD_MUTEX_INITIALIZER;

-static pthread_cond_t s_WaitRecvMsgCond = PTHREAD_COND_INITIALIZER;

-#define BLOCK_RC_MSG_LOCK() pthread_mutex_lock(&s_RecvMsgBlockMutex)

-#define BLOCK_RC_MSG_UNLOCK() pthread_mutex_unlock(&s_RecvMsgBlockMutex)

-#define BLOCK_WAIT_RECV_MSG_TIME_OUT(a) pthread_cond_timedwait(&s_WaitRecvMsgCond, &s_RecvMsgBlockMutex,(a))

-#define BLOCK_WAKEUP_RECV_MSG() pthread_cond_broadcast(&s_WaitRecvMsgCond)

-std::list<Parcel*> g_recv_parcel_list;

-const int waitResponse(int token,int time_out);

-int g_inner_test=0;

-/*hq add for set waiting time 2022/09/13 end*/

-

-

-//static pthread_mutex_t g_lynq_network_recv_mutex;

-

-typedef enum{

-    LYNQ_E_CARDSTATE_ERROR=8000,

-    /* The voice service state is out of service*/

-    LYNQ_E_STATE_OUT_OF_SERVICE=8001,

-    /* The voice service state is EMERGENCY_ONLY*/

-    LYNQ_E_STATE_EMERGENCY_ONLY=8002,

-    /* The radio power is power off*/

-    LYNQ_E_STATE_POWER_OFF=8003,

-    LYNQ_E_TIME_OUT=8004,

-    /*create or open sms DB fail */

-    LYNQ_E_SMS_DB_FAIL=8005,

-    /*Failed to execute sql statement*/

-    LYNQ_E_SMS_SQL_FAIL = 8006,

-    LYNQ_E_SMS_NOT_FIND = 8007,

-    /* The logic conflict*/

-    LYNQ_E_CONFLICT=9000,

-    /*Null anomaly*/

-    LYNQ_E_NULL_ANONALY=9001

-}LYNQ_E;

-

-

-/**@brief get response and write msg to parcel

-* @param p [IN] <p>: the parcel

-*

-* @param time_out [IN] <time_out>: timeout.

-*  < 0:use defult timeout(5s)

-*  >=0:use this timeout

-* @return

-*  0:success

-*  other:failure

-*/

-int get_response(Parcel &p,int time_out)

-{

-    int len = 0;

-    char recvline[LYNQ_REC_BUF];

-    bzero(recvline,LYNQ_REC_BUF);

-    LYINFLOG("get response");

-    /* receive data from server */

-    struct timeval timeOut;

-    timeOut.tv_sec = 30;    //defualt 5s

-    timeOut.tv_usec = 0;

-    if(time_out >= 0)

-    {

-        LYINFLOG("use time out %d",time_out);

-        timeOut.tv_sec = time_out;    //just set second

-    }

-    if(setsockopt(network_sock_fd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0)

-    {

-        LYERRLOG("time out setting failed");

-        return -1;

-    }

-    len = recvfrom(network_sock_fd,recvline,sizeof(recvline),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);

-    if(len == -1 && errno == EAGAIN)

-    {

-        LYERRLOG("read error,maybe timeout: %s",strerror(errno));

-        return LYNQ_E_TIME_OUT;

-    }

-    if (recvline != NULL) 

-    {

-        p.setData((uint8_t *)recvline,len); // p.setData((uint8_t *) buffer, buflen);

-        p.setDataPosition(0);

-    }

-    return 0;

-}

-

-/**@brief wait response with expected token and write msg to parcel in some time

-* @param p [IN]: pointer the parcel

-* @param token [IN]: the expected token for the response msg

-* @param time_out [IN]: timeout.

-* @return

-*  0:success

-*  other:failure

-*/

-const int waitResponse(Parcel*& p, int token,int time_out)

-{

-    int waitToken = token;

-    int wakeup_token=-1;

-    int resp_type;

-    struct timeval now;

-    struct timespec timeout;  

-    int ret;

-    std::list<Parcel*>::iterator iter;

-    int cnt=0;

-    

-	gettimeofday(&now,NULL);

-    timeout.tv_sec = now.tv_sec+time_out; //timeout is 1min

-    timeout.tv_nsec = now.tv_usec*1000;

-

-    LYINFLOG("%s wait token is %d",__func__,waitToken);

-    

-    BLOCK_RC_MSG_LOCK();

-    while(true) { 

-        cnt++;

-        for(iter=g_recv_parcel_list.begin();iter!=g_recv_parcel_list.end();++iter)

-        {

-            (*iter)->setDataPosition(0);

-            (*iter)->readInt32(&resp_type);

-            (*iter)->readInt32(&wakeup_token);

-            if(wakeup_token==waitToken)

-            {

-                LYINFLOG("%s get waitToken",__func__);

-                p=(*iter);

-                p->setDataPosition(0);

-                g_recv_parcel_list.erase(iter);

-                goto waitResponse_end;

-            }

-        }

-        LYINFLOG("%s no wait Token in msg list, list size is %d",__func__,g_recv_parcel_list.size());

-        ret=BLOCK_WAIT_RECV_MSG_TIME_OUT(&timeout);

-        if(ret!=0)

-        {

-            LYERRLOG("%s no expected token after %d second",__func__,time_out);

-            break;

-        }        

-    }

-waitResponse_end:

-    LYINFLOG("%s wait token is %d wakeup_token is %d, cnt is %d",__func__,waitToken,wakeup_token,cnt);

-    BLOCK_RC_MSG_UNLOCK(); 

-    return wakeup_token==waitToken ? 0:LYNQ_E_TIME_OUT;

-}

-

-int JumpHeader(Parcel &p,int *resp_type,int* token,int *request,int *slot_id,int *error)

-{

-    LYINFLOG("jump header");

-    if(p.dataAvail() > 0)

-    {

-        p.readInt32(resp_type);

-        p.readInt32(token);

-        p.readInt32(request);

-        p.readInt32(slot_id);

-        p.readInt32(error);

-        LYINFLOG("resp_type=%d,token=%d,request=%d,slot_id=%d,error_code=%d",*resp_type,*token,*request,*slot_id,*error);

-        return 0;

-    }

-    else

-    {

-        return -1;

-    }

-}

-

-/**@brief print solicied response msg's head information

-* @param head [IN]: head information

-* @return none

-*/

-void PrintHeader(lynq_resp_t& head)

-{

-    LYINFLOG("resp_type=%d,token=%d,request=%d,slot_id=%d,error_code=%d",head.resp_type,head.token,head.request,head.slot_id,head.error);

-}

-

-/**@brief get solicied response msg's head

-* @param head [OUT]: head information

-* @return

-*  0:success

-*  other:failure

-*/

-int GetHeader(Parcel* &p, lynq_resp_t& head)

-{

-    LYINFLOG("get header");

-    if(p->dataAvail() > 0)

-    {

-        p->readInt32(&(head.resp_type));

-        p->readInt32(&(head.token));

-        p->readInt32(&(head.request));

-        p->readInt32(&(head.slot_id));

-        p->readInt32(&(head.error));

-        PrintHeader(head);

-        return 0;

-    }

-    else

-    {

-        return -1;

-    }

-}

-

-/**@brief send msg to service and get response from service

-* @param request_id [IN]: request id

-* @param time_out [IN]: wait time uplimit

-* @param p [IN]: point to response msg's parcel

-* @param argc [IN]: how many parameters in parameter string

-* @param format [IN]: parameter string's format

-* @param ... [IN]: the specific parameter

-* @return

-*  0:success

-*  other:failure

-*/

-int lynq_get_common_request(int request_id, int time_out, Parcel*& p, int argc, const char* format,...)

-{

-    lynq_client_t client;

-    int ret;

-    int send_num;

-    

-    client.uToken = network_Global_uToken;

-    network_Global_uToken=(network_Global_uToken+1)%10000;/*0-10000*/

-    client.request = request_id;

-    client.paramLen = argc;

-    bzero(client.param,LYNQ_REQUEST_PARAM_BUF);

-    if(argc!=0)

-    {

-        va_list args;

-        va_start(args, format);

-        vsnprintf(client.param, LYNQ_REQUEST_PARAM_BUF, format, args);

-        va_end(args);    

-    }

-    LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);

-    pthread_mutex_lock(&g_lynq_network_sendto_mutex);

-    if(g_inner_test==0)

-    {

-        send_num = sendto(network_sock_fd,&client,sizeof(client),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv); 

-    }

-    else 

-    {

-        send_num = 1;

-        g_inner_test = 0;

-    }

-    pthread_mutex_unlock(&g_lynq_network_sendto_mutex);

-

-    if(send_num <= 0)       

-    {

-        LYERRLOG("send request fail, send num is %d", send_num);

-        return -1;

-    }

-    ret = waitResponse(p, client.uToken,time_out);

-   

-    return ret;    

-}

-

-

-int wait_signal_changes()

-{

-    int ret = 0;

-    pthread_mutex_lock(&signal_state_change_mutex);

-    ret = pthread_cond_wait(&signal_state_change_cond,&signal_state_change_mutex);

-    pthread_mutex_unlock(&signal_state_change_mutex);

-    return 0;

-}

-

-void send_signal_changes()

-{

-    pthread_mutex_lock(&signal_state_change_mutex);

-    pthread_cond_signal(&signal_state_change_cond);

-    pthread_mutex_unlock(&signal_state_change_mutex);

-    return;

-}

-

-/**@ a thread just for recv\buffer solicited msg's response and notice waiting thread

-* @param p [IN]: no meaning

-* @return

-* always null

-*/

-void *thread_rc_recv(void *p)

-{

-    Parcel* rc_p;

-    std::list<Parcel*>::iterator iter;

-    int resp_type = -1;   

-    char rc_data[LYNQ_REC_BUF];

-    int rc_len;

-    int null_cnt=0;

-    int wakeup_token; 

- 

-    LYINFLOG("rc thread is running");

-    while(network_rc_status)

-    {

-        bzero(rc_data,LYNQ_REC_BUF);

-        while(true)

-        {

-            rc_len = recvfrom(network_sock_fd,rc_data,sizeof(rc_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);

-            if(rc_len<sizeof(int32_t)*2)

-            {

-                 LYERRLOG("%s recv len %d less %d",__func__, rc_len,sizeof(int)*2);

-                 continue;

-            } 

-            rc_p= new Parcel;

-            if(rc_p==NULL)

-            {

-                null_cnt++;

-                LYERRLOG("%s rc_p is NULL, cnt is %d",__func__, null_cnt);

-                if(null_cnt>20)

-                {

-                    goto rc_recv_end;

-                }

-                continue;

-            }

-            else 

-            {

-                null_cnt=0;

-            }

-                

-            rc_p->setData((uint8_t *)rc_data,rc_len); // p.setData((uint8_t *) buffer, buflen);

-            rc_p->setDataPosition(0);

-            if(rc_p->dataAvail()>0)

-            {

-                rc_p->readInt32(&resp_type); 

-                rc_p->readInt32(&wakeup_token); 

-                BLOCK_RC_MSG_LOCK();

-                g_recv_parcel_list.push_back(rc_p);                

-                LYINFLOG("%s wakeup token is %d, list size is %d!",__func__,wakeup_token,g_recv_parcel_list.size());

-                if(g_recv_parcel_list.size()>20) //max 20

-                {

-                    iter=g_recv_parcel_list.begin();

-                    (*iter)->setDataPosition(0);

-                    (*iter)->readInt32(&resp_type); 

-                    (*iter)->readInt32(&wakeup_token); 

-                    delete (*(g_recv_parcel_list.begin()));

-                    LYERRLOG("%s wakeup token %d is deleted!",__func__,wakeup_token);

-                    g_recv_parcel_list.erase(iter);

-                }                   

-                BLOCK_WAKEUP_RECV_MSG();

-                BLOCK_RC_MSG_UNLOCK();

-                break;

-            }

-            else

-            {

-                LYERRLOG("%s rc_p data Avail %d not greater than 0",__func__, rc_p->dataAvail());

-                delete rc_p;

-            }

-        }

-    }                 

-

-rc_recv_end:    

-    return NULL;

-}

-

-void *thread_urc_recv(void *p)

-{

-    Parcel *urc_p =NULL;

-    char urc_data[LYNQ_REC_BUF];

-    int resp_type = -1;

-    int urc_id = -1;

-    int res = 0;

-    int none = 0;

-    int NR_sum = 0;

-    int urc_LTE_signalstrength = 0;

-    int urc_WCDMA_signalstrength = 0;

-    LYINFLOG("urc thread is running");

-    while(network_urc_status)

-    {

-        bzero(urc_data,LYNQ_REC_BUF);

-        res = recvfrom(network_urc_sock_fd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&network_urc_addr_serv,(socklen_t*)&network_len_urc_addr_serv);

-        if(res<=0)

-        {

-            LYERRLOG("thread_urc_recv step2 fail:");

-            break;

-        }

-        urc_p = new Parcel();

-        if(urc_p == NULL)

-        {

-            LYERRLOG("new parcel failure!!!");

-            break;

-        }

-        urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);

-        urc_p->setDataPosition(0);

-        if(urc_p->dataAvail()>0)

-        {

-            urc_p->readInt32(&resp_type);

-            urc_p->readInt32(&urc_id);

-            urc_p->readInt32(&network_urc_slot_id);

-            switch(urc_id)

-            {

-                case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:

-                {

-                    set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,false);

-                    network_wait_urc_id = urc_id;

-                    LYINFLOG("slot_id = %d",network_urc_slot_id);

-                    send_signal_changes();

-                    break;

-                }

-                case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:

-                {                    

-                    set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_DATA_REG,false);

-                    network_wait_urc_id = urc_id;

-                    LYINFLOG("slot_id = %d",network_urc_slot_id);

-                    send_signal_changes();

-                    break;

-                }

-                case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:

-                {                   

-                    set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_IMS_REG,false);

-                    network_wait_urc_id = urc_id;

-                    LYINFLOG("slot_id = %d",network_urc_slot_id);

-                    send_signal_changes();

-                    break;

-                }

-                case RIL_UNSOL_SIGNAL_STRENGTH:

-                {

-                    urc_p->readInt32(&network_urc_solSigStren.rssi);

-                    if((network_urc_solSigStren.rssi!=99)&&(network_urc_solSigStren.rssi!=0))

-                    {

-                        network_urc_solSigStren.gw_sig_valid = 1;

-                    }else{

-                        network_urc_solSigStren.gw_sig_valid = 0;

-                    }

-                    if(network_urc_solSigStren.gw_sig_valid == 1)

-                    {

-                        LYINFLOG("urc_GSM_signalstrength:%d",network_urc_solSigStren.rssi);

-                    }

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&urc_LTE_signalstrength);

-                    // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);

-                    urc_p->readInt32(&network_urc_solSigStren.rsrp);

-                    urc_p->readInt32(&network_urc_solSigStren.rsrq);

-                    urc_p->readInt32(&network_urc_solSigStren.rssnr);

-                    if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))

-                    {

-                        network_urc_solSigStren.lte_sig_valid = 1;

-                    }else{

-                        network_urc_solSigStren.lte_sig_valid = 0;

-                    }

-                    if(network_urc_solSigStren.lte_sig_valid == 1)

-                    {

-                        LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);

-                    }

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&urc_WCDMA_signalstrength);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&network_urc_solSigStren.rscp);

-                    urc_p->readInt32(&network_urc_solSigStren.ecno);

-                    if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))

-                    {

-                        network_urc_solSigStren.wcdma_sig_valid = 1;

-                    }else{

-                        network_urc_solSigStren.wcdma_sig_valid = 0;

-                    }

-                    if(network_urc_solSigStren.wcdma_sig_valid == 1)

-                    {

-                        LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);

-                    }

-                    urc_p->readInt32(&network_urc_solSigStren.ssRsrp);

-                    urc_p->readInt32(&network_urc_solSigStren.ssRsrq);

-                    urc_p->readInt32(&network_urc_solSigStren.ssSinr);

-                    urc_p->readInt32(&network_urc_solSigStren.csiRsrp);

-                    urc_p->readInt32(&network_urc_solSigStren.csiRsrq);

-                    urc_p->readInt32(&network_urc_solSigStren.csiSinr);

-                    NR_sum = (network_urc_solSigStren.ssRsrp) + (network_urc_solSigStren.ssRsrq) + (network_urc_solSigStren.ssSinr) + (network_urc_solSigStren.csiRsrp)+\

-                    (network_urc_solSigStren.csiRsrq) + (network_urc_solSigStren.csiSinr);

-                    if(NR_sum != 0)

-                    {

-                        network_urc_solSigStren.nr_sig_valid = 1;

-                    }else{

-                        network_urc_solSigStren.nr_sig_valid = 0;

-                    }

-                    if(network_urc_solSigStren.nr_sig_valid == 1)

-                    {

-                        LYINFLOG("[NR signal]ssRsrp is %d , ssRsrq is %d , ssSinr is %d , csiRsrp is %d , csiRsrq is %d , csiSinr is %d",\

-                        network_urc_solSigStren.ssRsrp,network_urc_solSigStren.ssRsrq,network_urc_solSigStren.ssSinr, \

-                        network_urc_solSigStren.csiRsrp,network_urc_solSigStren.csiRsrq,network_urc_solSigStren.csiSinr);

-                    }

-                    network_wait_urc_id = urc_id;

-                    send_signal_changes();

-                    break;

-                }

-            }

-        }

-        delete urc_p;

-        urc_p = NULL;

-    }

-    return NULL;

-}

-

-int lynq_server_socket_start()

-{

-//    struct timeval timeOut;

-    network_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);

-    if(-1 == network_sock_fd)

-    {

-        LYERRLOG("socket open error");

-        return -1;

-    }

-# if 0

-    timeOut.tv_sec = 5;

-    timeOut.tv_usec = 0;

-    if (setsockopt(network_sock_fd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0)

-    {

-        LYERRLOG("time out setting failed\n");

-        return -1;

-    }

-#endif

-

-    LYINFLOG("network_sock_fd = %d",network_sock_fd);

-

-    memset(&network_addr_serv, 0, sizeof(network_addr_serv));

-    network_addr_serv.sin_family = AF_INET;

-    network_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_ADDRESS);

-    network_addr_serv.sin_port = htons(LYNQ_SERVICE_PORT);

-    network_len_addr_serv = sizeof(network_addr_serv);

-

-    BLOCK_RC_MSG_LOCK(); 

-    std::list<Parcel*>::iterator iter;

-    for(iter=g_recv_parcel_list.begin();iter!=g_recv_parcel_list.end();++iter)

-    {

-        delete (*iter);        

-    }

-    g_recv_parcel_list.clear();  

-    BLOCK_RC_MSG_UNLOCK(); 

-

-    pthread_t tid;

-    pthread_attr_t attr;

-    int ret;

-

-    pthread_attr_init(&attr);

-    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

-    ret = pthread_create(&tid,&attr,thread_rc_recv,NULL);

-    if(ret <0)

-    {

-        LYERRLOG("rc pthread create error");

-        return -1;

-    }

-    LYINFLOG("rc start success");

-

-    return 0;

-}

-

-int lynq_urc_socket_start()

-{

-    pthread_t tid;

-    pthread_attr_t attr;

-    int on = 1;

-    network_urc_sock_fd = -1;

-    int ret = 0;

-    network_len_urc_addr_serv = sizeof(sockaddr_in);

-    network_urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);

-    if (network_urc_sock_fd <0){

-        LYERRLOG("urc socket error");

-        ret = -1;

-    }

-    network_urc_addr_serv.sin_family = AF_INET;

-    network_urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);

-    network_urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);

-    /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/

-    ret = setsockopt(network_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);

-    if(ret <0)

-    {

-        LYERRLOG("urc socket set error");

-        return -1;

-    }

-    ret = bind(network_urc_sock_fd ,(struct sockaddr*)&network_urc_addr_serv, sizeof(network_urc_addr_serv));

-    if(ret <0)

-    {

-        LYERRLOG("urc socket bind error");

-        return -1;

-    }

-    pthread_attr_init(&attr);

-    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

-    ret = pthread_create(&tid,&attr,thread_urc_recv,(void *)network_urc_sock_fd);

-    if(ret <0)

-    {

-        LYERRLOG("urc pthread create error");

-        return -1;

-    }

-    LYINFLOG("urc start success");

-    

-    return 0;

-}

+int g_module_init_flag = 0;

 

 int lynq_network_init(int utoken){

-    if(g_lynq_network_init_flag == 1)

+    if(g_module_init_flag != MODULE_CLOSED)

     {

-        LYERRLOG("init twice is not allowed");

-        return -1;

+        LYERRLOG("module state is %d",g_module_init_flag);

+        return LYNQ_E_CONFLICT;

     }

-    g_lynq_network_init_flag = 1;

-    if(utoken <0){

-        LYERRLOG("init err");

-        return -1;

+    

+   if(utoken <0){

+        LYERRLOG("utoken  is less than 0",utoken);      

+        return LYNQ_E_PARAMETER_ANONALY;

     }

-    network_urc_status = 1;

-    network_rc_status = 1;

-    network_Global_uToken = utoken;

+

+    g_module_init_flag = MODULE_SWITCHING;

+

+    g_module_Global_uToken = utoken;

     LYLOGSET(LOG_INFO);

     LYLOGEINIT(USER_LOG_TAG);

-    int ret = 0;

+    

+    int ret;

 

     init_network_timer_all();

 

+    ret = lynq_urc_socket_start();

+    if(ret != 0)

+    {

+        LYERRLOG("init socket urc fail!!!");

+        g_module_init_flag = MODULE_CLOSED;  

+        return LYNQ_E_INNER_ERROR;

+    }

+

     ret = lynq_server_socket_start();

     if(ret !=0)

     {

         LYERRLOG("init socket client fail!!!");

-        return -1;

+        lynq_close_urc_thread();

+        g_module_init_flag = MODULE_CLOSED;  

+        return LYNQ_E_INNER_ERROR;

     }

-    ret = lynq_urc_socket_start();

-    if(ret != 0)

-    {

-        LYERRLOG("init socket urc fail!!!");

-        return -1;

-    }

-    pthread_mutex_init(&g_lynq_network_sendto_mutex, NULL);   

-    pthread_mutex_init(&s_RecvMsgBlockMutex, NULL);   

+    g_module_init_flag = MODULE_RUNNING;

     

-    return 0;

+    return RESULT_OK;    

+}

+

+int lynq_network_deinit(void){

+

+    if (g_module_init_flag != MODULE_RUNNING)

+    {

+       LYERRLOG("module state is %d",g_module_init_flag);

+       return LYNQ_E_CONFLICT;

+    }  

+    g_module_init_flag = MODULE_SWITCHING;

+

+    lynq_close_urc_thread();

+    lynq_close_rc_thread();    

+    deinit_network_timer_all();

+

+    g_module_init_flag = MODULE_CLOSED;

+    return RESULT_OK;    

 }

 

 int strUpper(char * str)

@@ -707,7 +108,7 @@
         }

         i++;

     }

-    return 0;

+    return RESULT_OK;      

 }

 

 int copyCellInfoList(Parcel* &p,uint64_t *cellinfo,int *tac,int *earfcn)

@@ -717,6 +118,7 @@
     if(NULL == cellinfo)

     {

         LYERRLOG("*cellinfo error");

+        return LYNQ_E_PARAMETER_ANONALY;   

     }

 

     int nothing = 0;

@@ -820,35 +222,7 @@
     LYINFLOG("CID in fUNC :%llu",*cellinfo);

     LYINFLOG("tac in fUNC :%d",*tac);

     LYINFLOG("earfcn in fUNC :%d",*earfcn);

-    return 0;

-}

-

-int lynq_network_deinit(void){

-    if (g_lynq_network_init_flag == 0)

-    {

-        LYERRLOG("deinit twice is not allowed");

-        return -1;

-    }

-    if (network_sock_fd > 0)

-    {

-        close(network_sock_fd);

-    }

-    g_lynq_network_init_flag = 0;

-    network_urc_status = 0;

-    network_rc_status = 0;

-

-    deinit_network_timer_all();

-

-    BLOCK_RC_MSG_LOCK(); 

-    std::list<Parcel*>::iterator iter;

-    for(iter=g_recv_parcel_list.begin();iter!=g_recv_parcel_list.end();++iter)

-    {

-        delete (*iter);        

-    }

-    g_recv_parcel_list.clear();  

-    BLOCK_RC_MSG_UNLOCK(); 

-

-    return 0;

+    return RESULT_OK;    

 }

 

 static char * lynqStrdupReadString(Parcel* &p) {

@@ -861,123 +235,112 @@
 

 int lynq_query_operater(char *OperatorFN,char *OperatorSH,char *MccMnc)

 {

-    int ret = -1;

+    if(g_module_init_flag != MODULE_RUNNING)

+    {

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

+    }

+    

     if(NULL == OperatorFN||NULL == OperatorSH|| NULL == MccMnc)

     {

         LYERRLOG("%s some parameter OperatorFN OperatorSH MccMnc %s %s %s is NULL",__func__,OperatorFN,OperatorSH,MccMnc);  

-        return ret;   

+        return LYNQ_E_PARAMETER_ANONALY;   

     }    

-    lynq_resp_t head; 

+

     Parcel* p=NULL;

-    

-    ret=lynq_get_common_request(RIL_REQUEST_OPERATOR,5,p,0,"");

-    if(ret==0)

+    int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OPERATOR,0,"");

+

+    if(ret!=RESULT_OK)

     {

-        if(p==NULL)

-        {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

-        }

-        ret=GetHeader(p,head);

-        if(ret!=0)

-        {

-            LYERRLOG("%s get head error",__func__,ret);

-            delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }       

+ 

+    int num ;

+    char *resp[LYNQ_RESP_STRING_MAX_NUM];

 

-        int num ;

-        char *resp[LYNQ_RESP_BUF];

-

-        p->readInt32(&num);

-        if(num == 0)

+    p->readInt32(&num);

+    if(num == 0 || num > LYNQ_RESP_STRING_MAX_NUM)

+    {

+        LYERRLOG("no paramters or num %d too great",num);        

+        delete p;      

+        return LYNQ_E_INNER_ERROR;    

+    }else{

+        int i;

+        for(i = 0; i<num;i++)

         {

-            LYERRLOG("no paramters");

-        }else{

-            for(int i = 0; i<num;i++)

-            {

-                resp[i] = lynqStrdupReadString(p);

-            }

-            if(NULL != resp[0])

-            {

-                strcpy(OperatorFN,resp[0]);

-            }

-            if(NULL != resp[1])

-            {

-                strcpy(OperatorSH,resp[1]);

-            }

-            if(NULL != resp[2])

-            {

-                strcpy(MccMnc,resp[2]);

-            }

+            resp[i] = lynqStrdupReadString(p);

         }

-

-        LYINFLOG("%s suc",__func__);   

-        delete p;       

-        return 0;

+        if(NULL != resp[0])

+        {

+            strcpy(OperatorFN,resp[0]);

+        }

+        if(NULL != resp[1])

+        {

+            strcpy(OperatorSH,resp[1]);

+        }

+        if(NULL != resp[2])

+        {

+            strcpy(MccMnc,resp[2]);

+        }

+        for(i = 0; i<num;i++)

+        {

+            if(resp[i]!=NULL)

+            {

+                free(resp[i]);            

+            }            

+        }

     }

 

-    LYERRLOG("%s get response from modem failure, ret is %d",__func__,ret);

-    return ret;  

+    LYINFLOG("%s suc",__func__);   

+    delete p;       

+    return RESULT_OK;    

 }

 

 int lynq_query_network_selection_mode(int *netselMode)

 {

-    int ret = -1;

+    if(g_module_init_flag != MODULE_RUNNING)

+    {

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

+    }

+

     if(NULL == netselMode)

     {

         LYERRLOG("%s parameter is NULL",__func__);  

-        return ret;   

+        return LYNQ_E_PARAMETER_ANONALY;   

     }    

-    lynq_resp_t head; 

-    Parcel* p=NULL;

-    

-    ret=lynq_get_common_request(RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE,600,p,0,"");

-    if(ret==0)

+ 

+    Parcel* p=NULL;    

+    int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE,0,"");

+

+    if(ret!=RESULT_OK)

     {

-        if(p==NULL)

-        {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

-        }

-        ret=GetHeader(p,head);

-        if(ret!=0)

-        {

-            LYERRLOG("%s get head error",__func__,ret);

-            delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }   

+    

+    int readnum;

+    p->readInt32(&readnum);

+    p->readInt32(netselMode);

 

-        int readnum;

-        p->readInt32(&readnum);

-        p->readInt32(netselMode);

-

-        LYINFLOG("%s suc",__func__);   

-        delete p;       

-        return 0;

-    }

-    return ret;  

+    LYINFLOG("%s suc",__func__);   

+    delete p;       

+    return RESULT_OK;  

 }

 

 int lynq_set_network_selection_mode(const char *mode,const char* mccmnc)

 {

-    int ret = -1; 

+    if(g_module_init_flag != MODULE_RUNNING)

+    {

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

+    }

+    

     if(NULL == mode || (strlen(mode) == 0))

     {

         LYERRLOG("%s parameter mod %s is error",__func__,mode);  

-        return -1;

+        return LYNQ_E_PARAMETER_ANONALY;

     }

 

     if(!strcmp(mode,"Manual"))

@@ -985,145 +348,120 @@
         if(mccmnc == NULL || strlen(mccmnc) == 0)

         {

              LYERRLOG("%s parameter mccmnc %s is error",__func__,mccmnc);  

-             return -1;

+             return LYNQ_E_PARAMETER_ANONALY;

         }        

     }

     

-    lynq_resp_t head; 

     Parcel* p=NULL;

+    int ret;

 

     if(!strcmp(mode,"Auto"))

     {

-        ret=lynq_get_common_request(RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC,5,p,0,"");

+        ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC,0,"");

     }

     else if(!strcmp(mode,"Manual"))

     {

-        ret=lynq_get_common_request(RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL,5,p,1,"%s",mccmnc); 

+        ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL,1,"%s",mccmnc); 

     }

     else 

     {

-        LYERRLOG("%s parameter mode %s is NULL",__func__,mode);  

-        return -1;

-    }

-        

-    

-    if(ret==0)

-    {

-        if(p==NULL)

-        {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

-        }

-        ret=GetHeader(p,head);

-        if(ret!=0)

-        {

-            LYERRLOG("%s get head error %d",__func__,ret);

-            delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

-        LYINFLOG("%s set mode %s mccmnc %s suc",__func__,mode,mccmnc);   

-        delete p;

-        return 0;

+        LYERRLOG("%s parameter mode %s is errir",__func__,mode);  

+        return LYNQ_E_PARAMETER_ANONALY;

     }

 

-    LYERRLOG("%s get response from modem failure, ret is %d",__func__,ret);

-    return ret;    

+    if(ret!=RESULT_OK)

+    {

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }   

+        

+    LYINFLOG("%s set mode %s mccmnc %s suc",__func__,mode,mccmnc);   

+    delete p;

+    return RESULT_OK;  

 }

 

 int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)

 {

-    int ret = -1;

+    if(g_module_init_flag != MODULE_RUNNING)

+    {

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

+    }

     if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)

     {

         LYERRLOG("%s there is parameter is NULL",__func__);  

-        return ret;

+        return LYNQ_E_PARAMETER_ANONALY;

     }  

-    

-    lynq_resp_t head; 

+

     Parcel* p=NULL;

+    int ret=lynq_send_common_request(p,600,RIL_REQUEST_QUERY_AVAILABLE_NETWORKS,0,"");

 

-    ret=lynq_get_common_request(RIL_REQUEST_QUERY_AVAILABLE_NETWORKS,600,p,0,"");

-    if(ret==0)

+    if(ret!=RESULT_OK)

     {

-        if(p==NULL)

-        {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

-        }

-        ret=GetHeader(p,head);

-        if(ret!=0)

-        {

-            LYERRLOG("%s get head error %d",__func__,ret);

-            delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

-        

-        int num =p->readInt32();

-        char *resp[128];

-        if(num == 0)

-        {

-            LYERRLOG("%s get num is 0",__func__);

-            delete p;

-            return -1;

-        }else{

-            for(int i = 0; i<num;i++)

-            {

-                resp[i] = lynqStrdupReadString(p);

-            }

-            if(NULL != resp[0])

-            {

-                strcpy(OperatorFN,resp[0]);

-            }

-            if(NULL != resp[1])

-            {

-                strcpy(OperatorSH,resp[1]);

-            }

-            if(NULL != resp[2])

-            {

-                strcpy(MccMnc,resp[2]);

-            }

-            if(NULL != resp[3])

-            {

-                strcpy(NetStatus,resp[2]);

-            }

-        }

-        delete p;

-        LYINFLOG("%s suc",__func__);   

-        return 0;

-    }

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }   

 

-    LYERRLOG("%s get response from modem failure, ret is %d",__func__,ret);

-    return ret;

+    int num =p->readInt32();

+    char *resp[LYNQ_RESP_STRING_MAX_NUM];

+    if(num == 0 || num > LYNQ_RESP_STRING_MAX_NUM)

+    {

+        LYERRLOG("no paramters or num %d too great",num);        

+        delete p;      

+        return LYNQ_E_INNER_ERROR;    

+    }else{

+        int i;

+        for(i = 0; i<num;i++)

+        {

+            resp[i] = lynqStrdupReadString(p);

+        }

+        if(NULL != resp[0])

+        {

+            strcpy(OperatorFN,resp[0]);

+        }

+        if(NULL != resp[1])

+        {

+            strcpy(OperatorSH,resp[1]);

+        }

+        if(NULL != resp[2])

+        {

+            strcpy(MccMnc,resp[2]);

+        }

+        if(NULL != resp[3])

+        {

+            strcpy(NetStatus,resp[2]);

+        }

+        for(i = 0; i<num;i++)

+        {

+            if(resp[i]!=NULL)

+            {

+                free(resp[i]);            

+            }            

+        }

+    }

+    delete p;

+    LYINFLOG("%s suc",__func__);   

+    return RESULT_OK;  

 }

 

 int lynq_query_registration_state(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam,int *netRejected)

 {

-    int ret = -1;

+    if(g_module_init_flag != MODULE_RUNNING)

+    {

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

+    }

+    

     if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam || NULL == netRejected)

     {

         LYERRLOG("%s there is parameter is NULL",__func__);  

-        return ret;

+        return LYNQ_E_PARAMETER_ANONALY;

     }  

     if(strlen(type)>LYNQ_TYPE_BUF)

     {

         LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);

-        return ret;   

-    }

-    

-    lynq_resp_t head; 

-    Parcel* p=NULL;

+        return LYNQ_E_PARAMETER_ANONALY;   

+    }   

     

     int request;

     char str[LYNQ_TYPE_BUF];   

@@ -1150,752 +488,742 @@
         request = RIL_REQUEST_IMS_REGISTRATION_STATE;

     }else{

         LYERRLOG("request error");

-        return ret;

+        return LYNQ_E_PARAMETER_ANONALY;

     }    

 

-    ret=lynq_get_common_request(request,5,p,0,"");

-    if(ret==0)

+    Parcel* p=NULL;

+    int ret=lynq_send_common_request(p,g_wait_time,request,0,"");

+

+    if(ret!=RESULT_OK)

     {

-        if(p==NULL)

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }   

+    

+    int num,i;

+    char *resp[LYNQ_RESP_STRING_MAX_NUM];       

+    if(!strcmp(str,"VOICE"))

+    {

+        p->readInt32(&num);

+        if(num == 15)

         {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

+            for(i=0;i<15;i++)

+            {

+                resp[i]=lynqStrdupReadString(p);

+            }            

+            *regState = atoi(resp[0]);

+            *netType = atoi(resp[3]);

+            *netRejected = atoi(resp[14]);     

+            for(i=0;i<15;i++)

+            {

+                if(resp[i]!=NULL)

+                {

+                    free(resp[i]);            

+                }            

+            }            

+            set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,*regState,*netType,*netRejected,0);

         }

-        ret=GetHeader(p,head);

-        if(ret!=0)

+        else 

         {

-            LYERRLOG("%s get head error %d",__func__,ret);

+            LYERRLOG("%s type %s num %d error",__func__,str,num);

             delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

-        int num;

-        if(!strcmp(str,"VOICE"))

-        {

-            p->readInt32(&num);

-            if(num == 15)

-            {

-                *regState = atoi(lynqStrdupReadString(p));

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                *netType = atoi(lynqStrdupReadString(p));

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                *netRejected = atoi(lynqStrdupReadString(p));       

-                set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,*regState,*netType,*netRejected,0);

-            }

-            else 

-            {

-                LYERRLOG("%s type %s num %d error",__func__,str,num);

-                delete p;

-                return -1;

-            }            

-        }

-        else if(!strcmp(str,"DATA")){

-            p->readInt32(&num);

-            if(num == 11)

-            {

-                char *resp[LYNQ_RESP_BUF];

-                *regState = atoi(lynqStrdupReadString(p));

-                resp[0] = lynqStrdupReadString(p);

-                strcpy(LAC,resp[0]);

-

-                resp[1] = lynqStrdupReadString(p);

-                strcpy(CID,resp[1]);

-                *netType = atoi(lynqStrdupReadString(p));

-                set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,2,*regState,*netType,2,LAC,CID);

-            }

-            else 

-            {

-                LYERRLOG("%s type %s num %d error",__func__,str,num);

-                delete p;

-                return -1;

-            }            

-

-        }

-        else // "IMS"

-        {

-            p->readInt32(&num);

-            if(num == 2)

-            {

-                p->readInt32(imsRegState);

-                p->readInt32(radioTechFam);

-                set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_IMS_REG,2,*imsRegState,*radioTechFam,0);

-            }

-            else 

-            {

-                LYERRLOG("%s type %s num %d error",__func__,str,num);

-                delete p;

-                return -1;

-            }            

-        }

-        LYINFLOG("%s suc",__func__); 

-        delete p;        

-        return 0;

+            return LYNQ_E_INNER_ERROR;

+        }            

     }

+    else if(!strcmp(str,"DATA")){

+        p->readInt32(&num);

+        if(num == 11)

+        {                

+            for(i=0;i<4;i++)

+            {

+                resp[i]=lynqStrdupReadString(p);

+            }            

+            *regState = atoi(resp[0]);

+            strcpy(LAC,resp[1]);

+            strcpy(CID,resp[2]);

+            *netType = atoi(resp[3]);

+            for(i=0;i<4;i++)

+            {

+                if(resp[i]!=NULL)

+                {

+                    free(resp[i]);            

+                }           

+            }            

+            set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,2,*regState,*netType,2,LAC,CID);

+        }

+        else 

+        {

+            LYERRLOG("%s type %s num %d error",__func__,str,num);

+            delete p;

+            return LYNQ_E_INNER_ERROR;

+        }            

 

-    LYERRLOG("%s get response from modem failure, ret is %d",__func__,ret);

-    return ret;

+    }

+    else // "IMS"

+    {

+        p->readInt32(&num);

+        if(num == 2)

+        {

+            p->readInt32(imsRegState);

+            p->readInt32(radioTechFam);

+            set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_IMS_REG,2,*imsRegState,*radioTechFam,0);

+        }

+        else 

+        {

+            LYERRLOG("%s type %s num %d error",__func__,str,num);

+            delete p;

+            return LYNQ_E_INNER_ERROR;

+        }            

+    }

+    LYINFLOG("%s suc",__func__); 

+    delete p;        

+    return RESULT_OK;     

 }

 

 int lynq_query_prefferred_networktype(int *preNetType)

 {    

-    int ret = -1;

+    if(g_module_init_flag != MODULE_RUNNING)

+    {

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

+    }

     if(NULL == preNetType)

     {

         LYERRLOG("%s there is parameter is NULL",__func__);  

-        return ret;

-    }      

-    

-    lynq_resp_t head; 

-    Parcel* p=NULL;

-      

-    ret=lynq_get_common_request(RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE,5,p,0,"");

-    if(ret==0)

-    {

-        if(p==NULL)

-        {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

-        }

-        ret=GetHeader(p,head);

-        if(ret!=0)

-        {

-            LYERRLOG("%s get head error %d",__func__,ret);

-            delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

-        int num;

-        p->readInt32(&num);

-        p->readInt32(preNetType);  

-        LYINFLOG("%s suc",__func__); 

-        delete p;

-        return 0;

-    }

+        return LYNQ_E_PARAMETER_ANONALY;

+    }          

 

-    LYERRLOG("%s get response from modem failure, ret is %d",__func__,ret);

-    return ret;

+    Parcel* p=NULL;

+    int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE,0,"");

+

+    if(ret!=RESULT_OK)

+    {

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }   

+    

+    int num;

+    p->readInt32(&num);

+    p->readInt32(preNetType);  

+    

+    LYINFLOG("%s suc",__func__); 

+    delete p;

+    return RESULT_OK;  

 }

 

 int lynq_set_prefferred_networktype(const int preffertype)

 {

-    int ret = -1;

+    if(g_module_init_flag != MODULE_RUNNING)

+    {

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

+    }

     if(preffertype < 0||preffertype >33)

     {

         LYERRLOG("%s parameter %d error",__func__,preffertype);  

-        return ret;

+        return LYNQ_E_PARAMETER_ANONALY;

     }     

-    

-    lynq_resp_t head; 

+

     Parcel* p=NULL;

-      

-    ret=lynq_get_common_request(RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE,5,p,1,"%d",preffertype);

-    if(ret==0)

+    int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE,1,"%d",preffertype);

+     

+    if(ret!=RESULT_OK)

     {

-        if(p==NULL)

-        {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

-        }

-        ret=GetHeader(p,head);

-        if(ret!=0)

-        {

-            LYERRLOG("%s get head error %d",__func__,ret);

-            delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

-        LYINFLOG("%s set %d suc",__func__,preffertype);     

-        delete p;

-        return 0;

-    }

-

-    LYERRLOG("%s get response from modem failure, ret is %d",__func__,ret);

-    return ret;

-

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }   

+    

+    LYINFLOG("%s set %d suc",__func__,preffertype);     

+    delete p;

+    return RESULT_OK;  

+   

 }

 

 int lynq_query_cell_info(uint64_t cellinfo[CELLINFO_MAX_NUM],int tac[CELLINFO_MAX_NUM],int earfcn[CELLINFO_MAX_NUM],int * realNum)

 {

-    int ret = -1;

+    if(g_module_init_flag != MODULE_RUNNING)

+    {

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

+    }

     if(NULL == realNum)

     {

         LYERRLOG("%s there is parameter is NULL",__func__);  

-        return ret;

+        return LYNQ_E_PARAMETER_ANONALY;

     }      

     

-    lynq_resp_t head; 

-    Parcel* p=NULL;

-      

-    ret=lynq_get_common_request(RIL_REQUEST_GET_CELL_INFO_LIST,5,p,0,"");

-    if(ret==0)

+    Parcel* p=NULL;      

+    int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_GET_CELL_INFO_LIST,0,"");

+    

+    if(ret!=RESULT_OK)

     {

-        if(p==NULL)

-        {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

-        }

-        ret=GetHeader(p,head);

-        if(ret!=0)

-        {

-            LYERRLOG("%s get head error %d",__func__,ret);

-            delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }   

+    

+    int num;

 

-        int num;

-

-        p->readInt32(&num);

-        LYINFLOG("cell info num:%d",num);

-        *realNum = num;

-        for(int i = 0;i<num;i++)

-        {

-            copyCellInfoList(p,&cellinfo[i],&tac[i],&earfcn[i]);

-        }

-        

-        LYINFLOG("%s suc",__func__); 

-        delete p;

-        return 0;

+    p->readInt32(&num);

+    LYINFLOG("cell info num:%d",num);

+    *realNum = num;

+    for(int i = 0;i<num;i++)

+    {

+        copyCellInfoList(p,&cellinfo[i],&tac[i],&earfcn[i]);

     }

-

-    LYERRLOG("%s get response from modem failure, ret is %d",__func__,ret);

-    return ret;

-

+    

+    LYINFLOG("%s suc",__func__); 

+    delete p;

+    return RESULT_OK;  

 }

 

 int lynq_set_unsol_cell_info_listrate(const int rate)

 {

-    int ret = -1; 

-    lynq_resp_t head; 

-    Parcel* p=NULL;

-      

-    ret=lynq_get_common_request(RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE,5,p,1,"%d",rate);

-    if(ret==0)

+    if(g_module_init_flag != MODULE_RUNNING)

     {

-        if(p==NULL)

-        {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

-        }

-        ret=GetHeader(p,head);

-        if(ret!=0)

-        {

-            LYERRLOG("%s get head error %d",__func__,ret);

-            delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

-        LYINFLOG("%s set %d suc",__func__,rate);    

-        delete p;

-        return 0;

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

     }

+    Parcel* p=NULL;      

+    int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE,1,"%d",rate);

 

-    LYERRLOG("%s get response from modem failure, ret is %d",__func__,ret);

-    return ret;

+    if(ret!=RESULT_OK)

+    {

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }   

+    

+    LYINFLOG("%s set %d suc",__func__,rate);    

+    delete p;

+    return RESULT_OK;      

 }

 

 int lynq_set_band_mode(const int bandmode)

 {

-    int ret = -1; 

-    lynq_resp_t head; 

-    Parcel* p=NULL;

-      

-    ret=lynq_get_common_request(RIL_REQUEST_SET_BAND_MODE,5,p,1,"%d",bandmode);

-    if(ret==0)

+    if(g_module_init_flag != MODULE_RUNNING)

     {

-        if(p==NULL)

-        {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

-        }

-        ret=GetHeader(p,head);

-        if(ret!=0)

-        {

-            LYERRLOG("%s get head error %d",__func__,ret);

-            delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

-        LYINFLOG("%s set %d suc",__func__,bandmode);    

-        delete p;

-        return 0;

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

     }

+    Parcel* p=NULL;      

+    int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SET_BAND_MODE,1,"%d",bandmode);

 

-    LYERRLOG("%s get response from modem failure, ret is %d",__func__,ret);

-    return ret;

+    if(ret!=RESULT_OK)

+    {

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }   

+    

+    LYINFLOG("%s set %d suc",__func__,bandmode);    

+    delete p;

+    return RESULT_OK;  

 }

 

 int lynq_query_available_bandmode(int availBanMode[])

 {

-    int ret=-1;   

-        

+    if(g_module_init_flag != MODULE_RUNNING)

+    {

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

+    }

     if(NULL == availBanMode)

     {

         LYERRLOG("%s parameter is NULL",__func__);  

-        return ret;

+        return LYNQ_E_PARAMETER_ANONALY;

     }

 

-    lynq_resp_t head; 

     Parcel* p=NULL;

-

-    ret=lynq_get_common_request(RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE,5,p,0,"");

-    if(ret==0)

+    int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE,0,"");

+    if(ret!=RESULT_OK)

     {

-        if(p==NULL)

-        {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

-        }

-        ret=GetHeader(p,head);

-        if(ret!=0)

-        {

-            LYERRLOG("%s get head error",__func__,ret);

-            delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

-

-        int num = 0;

-        int res = 0;

-        int i;

-

-        p->readInt32(&num);

-        LYINFLOG("num = %d",num);

-        availBanMode[0] = num;

-        for(i=1 ;i<=num;i++)

-        {

-            p->readInt32(&res);

-            availBanMode[i]=res;

-        }

-     

-        LYINFLOG("%s suc",__func__);  

-        delete p;

-        return 0;           

-    }

-

-    LYERRLOG("%s send request error %d",__func__,ret);  

-

-    return ret;

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }   

     

+    int num = 0;

+    int res = 0;

+    int i;

+

+    p->readInt32(&num);

+    LYINFLOG("num = %d",num);

+    availBanMode[0] = num;

+    for(i=1 ;i<=num;i++)

+    {

+        p->readInt32(&res);

+        availBanMode[i]=res;

+    }

+ 

+    LYINFLOG("%s suc",__func__);  

+    delete p;

+    return RESULT_OK;                

 }

 

 int lynq_radio_on(const int data)

-{    

-    int ret = -1;

+{     

+    if(g_module_init_flag != MODULE_RUNNING)

+    {

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

+    }

     if (data < 0 || data > 1)

     {

         LYERRLOG("%s parameter %d error",__func__,data);  

-        return ret;

+        return LYNQ_E_PARAMETER_ANONALY;

     }     

     

-    lynq_resp_t head; 

-    Parcel* p=NULL;

-      

-    ret=lynq_get_common_request(RIL_REQUEST_RADIO_POWER,65,p,1,"%d",data);

-    if(ret==0)

-    {

-        if(p==NULL)

-        {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

-        }

-        ret=GetHeader(p,head);

-        if(ret!=0)

-        {

-            LYERRLOG("%s get head error %d",__func__,ret);

-            delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

-        LYINFLOG("%s set %d suc",__func__,data);  

-        delete p;

-        return 0;

-    }

+    Parcel* p=NULL;      

+    int ret=lynq_send_common_request(p,65,RIL_REQUEST_RADIO_POWER,1,"%d",data);

 

-    LYERRLOG("%s get response from modem failure, ret is %d",__func__,ret);

-    return ret;

+    if(ret!=RESULT_OK)

+    {

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }       

+

+    LYINFLOG("%s set %d suc",__func__,data);  

+    delete p;

+    return RESULT_OK;  

 }

 

 const char * lynq_get_raw_data(Parcel* &p, int* data_len) 

 {

-    int32_t len;

+    int32_t len;
     int status;

     char *data;

 

     *data_len=0;

-

+
     status = p->readInt32(&len);

-

+
     if (status != 0) {

         LYERRLOG("%s status is %d",__func__,status);

         return NULL;

-    }

-

-    // The java code writes -1 for null arrays

+    }
+
+    // The java code writes -1 for null arrays
     if (((int)len) == -1 || ((int)len) == 0) 

     {

         LYERRLOG("%s len is %d",__func__,len);

         return NULL;

     }

     LYINFLOG("%s len is %d",__func__,len);

-

+
     data = (char*) p->readInplace(len); 

     *data_len=len;

-

+
     return data;

 }

 

 int lynq_query_radio_state(int *radio_state)

 {

-    int ret=-1;   

-        

+    if(g_module_init_flag != MODULE_RUNNING)

+    {

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

+    }

     if(NULL == radio_state)

     {

         LYERRLOG("%s radio state is NULL",__func__);  

-        return ret;

+        return LYNQ_E_PARAMETER_ANONALY;

     }

 

-    lynq_resp_t head; 

     Parcel* p=NULL;

-

-    ret=lynq_get_common_request(RIL_REQUEST_OEM_HOOK_RAW,5,p,1,"%s","AT+CFUN");

-    if(ret==0)

+    int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"%s","AT+CFUN");

+    if(ret!=RESULT_OK)

     {

-        if(p==NULL)

-        {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

-        }

-        ret=GetHeader(p,head);

-        if(ret!=0)

-        {

-            LYERRLOG("%s get head error",__func__,ret);

-            delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }           

 

-        int bfind=false;

-        const char* data;

-        int data_len;

-        char* data_str;

-        char* start;

-        int length;

-        int i;

-        int num_start;

-        data = lynq_get_raw_data(p,&data_len);

-        if(data==NULL || data_len == 0)

-        {

-            LYERRLOG("%s lynq_get_raw_data NULL or data_len is 0",__func__);    

-            delete p;

-            return -1; 

-        }

-        data_str = (char*) calloc(1,data_len+1);

-        if (NULL == data_str) 

-        {

-             LYERRLOG("%s alloc mem error, data_len is %d",__func__,data_len+1);         

-             delete p;

-             return -1;

-        }

-        memmove(data_str, data, data_len);     

-        data_str[data_len]='\0';           

-        LYINFLOG("%s return string is %s",__func__,data_str);  

-        start = strstr(data_str,"CFUN");

-        if(start!=NULL)

-        {

-             start=start+4;

-             length=strlen(start);

-             for(i=0; i<length;i++)

-             {

-                 if((!bfind) && (start[i] >= '0') && (start[i] <= '9'))

-                 {

-                     bfind=true;  

-                     num_start=i;

-                 }

-                 else if(bfind && ((start[i] < '0') || (start[i] > '9')))

-                 {

-                    start[i]='\0';

-                    break;

-                 }

-             }

-             if(bfind)

-             {                    

-                 (*radio_state) = atoi(start+num_start);

-                 LYINFLOG("%s, radio state is %s %d",__func__,start+num_start,*radio_state);  

-                 free(data_str);

-                 delete p;

-                 return 0;                        

-             }

-        }             

-        LYERRLOG("%s return string %s no cfun or no digit",__func__,data_str);  

-        free(data_str);

+    int bfind=false;

+    const char* data;

+    int data_len;

+    char* data_str;

+    char* start;

+    int length;

+    int i;

+    int num_start;

+    data = lynq_get_raw_data(p,&data_len);

+    if(data==NULL || data_len == 0)

+    {

+        LYERRLOG("%s lynq_get_raw_data NULL or data_len is 0",__func__);    

         delete p;

-        return -1;           

+        return LYNQ_E_INNER_ERROR; 

     }

-

-    LYERRLOG("%s send request error %d",__func__,ret);  

-

-    return ret;

+    data_str = (char*) calloc(1,data_len+1);

+    if (NULL == data_str) 

+    {

+         LYERRLOG("%s alloc mem error, data_len is %d",__func__,data_len+1);         

+         delete p;

+         return LYNQ_E_MALLOC_ERROR;

+    }

+    memmove(data_str, data, data_len);     

+    data_str[data_len]='\0';           

+    LYINFLOG("%s return string is %s",__func__,data_str);  

+    start = strstr(data_str,"CFUN");

+    if(start!=NULL)

+    {

+         start=start+4;

+         length=strlen(start);

+         for(i=0; i<length;i++)

+         {

+             if((!bfind) && (start[i] >= '0') && (start[i] <= '9'))

+             {

+                 bfind=true;  

+                 num_start=i;

+             }

+             else if(bfind && ((start[i] < '0') || (start[i] > '9')))

+             {

+                start[i]='\0';

+                break;

+             }

+         }

+         if(bfind)

+         {                    

+             (*radio_state) = atoi(start+num_start);

+             LYINFLOG("%s, radio state is %s %d",__func__,start+num_start,*radio_state);  

+             free(data_str);

+             delete p;

+             return RESULT_OK;                         

+         }

+    }             

+    LYERRLOG("%s return string %s no cfun or no digit",__func__,data_str);  

+    free(data_str);

+    delete p;

+    return LYNQ_E_INNER_ERROR;              

 }

 

 int lynq_query_radio_tech(int* radioTech)

 {

-    int ret = -1;

+    if(g_module_init_flag != MODULE_RUNNING)

+    {

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

+    }

     if(NULL == radioTech)

     {

         LYERRLOG("%s radio tech is NULL",__func__);  

-        return ret;   

+        return LYNQ_E_PARAMETER_ANONALY;   

     }    

 

-    lynq_resp_t head; 

     Parcel* p=NULL;

-

-    ret=lynq_get_common_request(RIL_REQUEST_VOICE_RADIO_TECH,5,p,0,"");

-    if(ret==0)

+    int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_VOICE_RADIO_TECH,0,"");

+    

+    if(ret!=RESULT_OK)

     {

-        if(p==NULL)

-        {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

-        }

-        ret=GetHeader(p,head);

-        if(ret!=0)

-        {

-            LYERRLOG("%s get head error",__func__,ret);

-            delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }              

          

-        int num;

-        p->readInt32(&num);

-        p->readInt32(radioTech);

+    int num;

+    p->readInt32(&num);

+    p->readInt32(radioTech);

 

-        LYINFLOG("%s suc",__func__);  

-        delete p;

-        return head.error;

-    }

-    return ret;   

+    LYINFLOG("%s suc",__func__);  

+    delete p;

+    return RESULT_OK;   

 }

 

 int lynq_solicited_signal_strength(signalStrength_t *solSigStren)

 {

-    int ret=-1;   

-        

+    if(g_module_init_flag != MODULE_RUNNING)

+    {

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

+    }

     if(NULL == solSigStren)

     {

         LYERRLOG("%s parameter is NULL",__func__);  

-        return ret;

+        return LYNQ_E_PARAMETER_ANONALY;

     }

 

-    lynq_resp_t head; 

     Parcel* p=NULL;

-

-    ret=lynq_get_common_request(RIL_REQUEST_SIGNAL_STRENGTH,8,p,0,"");

-    if(ret==0)

+    int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SIGNAL_STRENGTH,0,"");

+    if(ret!=RESULT_OK)

     {

-        if(p==NULL)

-        {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

-        }

-        ret=GetHeader(p,head);

-        if(ret!=0)

-        {

-            LYERRLOG("%s get head error",__func__,ret);

-            delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }            

+    

+    int sum = 0;

+    int LTE_signalstrength = 0;

+    int WCDMA_signalstrength = 0;

+    int none = 0;

 

-        int sum = 0;

-        int LTE_signalstrength = 0;

-        int WCDMA_signalstrength = 0;

-        int none = 0;

-

-        p->readInt32(&solSigStren->rssi);

-        if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))

-        {

-            solSigStren->gw_sig_valid = 1;

-        }else{

-            solSigStren->gw_sig_valid = 0;

-        }

-

-        p->readInt32(&none);

-        p->readInt32(&none);

-        p->readInt32(&none);

-        p->readInt32(&none);

-        p->readInt32(&none);

-        p->readInt32(&none);

-        p->readInt32(&none);

-        p->readInt32(&LTE_signalstrength);

-        // p->readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);

-        p->readInt32(&solSigStren->rsrp);

-        p->readInt32(&solSigStren->rsrq);

-        p->readInt32(&solSigStren->rssnr);

-        LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);

-        if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))

-        {

-            solSigStren->lte_sig_valid = 1;

-        }else{

-            solSigStren->lte_sig_valid = 0;

-        }

-

-        p->readInt32(&none);

-        p->readInt32(&none);

-        p->readInt32(&none);

-        p->readInt32(&none);

-        p->readInt32(&none);

-        p->readInt32(&WCDMA_signalstrength);

-        p->readInt32(&none);

-        p->readInt32(&solSigStren->rscp);

-        p->readInt32(&solSigStren->ecno);

-        LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);

-        if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))

-        {

-            solSigStren->wcdma_sig_valid = 1;

-        }else{

-            solSigStren->wcdma_sig_valid = 0;

-        }

-        /*bug fix*/

-        p->readInt32(&solSigStren->ssRsrp);

-        p->readInt32(&solSigStren->ssRsrq);

-        p->readInt32(&solSigStren->ssSinr);

-        p->readInt32(&solSigStren->csiRsrp);

-        p->readInt32(&solSigStren->csiRsrq);

-        p->readInt32(&solSigStren->csiSinr);

-        sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\

-        (solSigStren->csiRsrq) + (solSigStren->csiSinr);

-        if(sum != 0)

-        {

-            solSigStren->nr_sig_valid = 1;

-        }else{

-            LYERRLOG("None of NR signal info");

-        }        

-

-        LYINFLOG("%s suc",__func__);  

-        delete p;

-        return 0;           

+    p->readInt32(&solSigStren->rssi);

+    if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))

+    {

+        solSigStren->gw_sig_valid = 1;

+    }else{

+        solSigStren->gw_sig_valid = 0;

     }

 

-    LYERRLOG("%s send request error %d",__func__,ret);  

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&LTE_signalstrength);

+    // p->readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);

+    p->readInt32(&solSigStren->rsrp);

+    p->readInt32(&solSigStren->rsrq);

+    p->readInt32(&solSigStren->rssnr);

+    LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);

+    if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))

+    {

+        solSigStren->lte_sig_valid = 1;

+    }else{

+        solSigStren->lte_sig_valid = 0;

+    }

 

-    return ret;

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&none);

+    p->readInt32(&WCDMA_signalstrength);

+    p->readInt32(&none);

+    p->readInt32(&solSigStren->rscp);

+    p->readInt32(&solSigStren->ecno);

+    LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);

+    if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))

+    {

+        solSigStren->wcdma_sig_valid = 1;

+    }else{

+        solSigStren->wcdma_sig_valid = 0;

+    }

+    /*bug fix*/

+    p->readInt32(&solSigStren->ssRsrp);

+    p->readInt32(&solSigStren->ssRsrq);

+    p->readInt32(&solSigStren->ssSinr);

+    p->readInt32(&solSigStren->csiRsrp);

+    p->readInt32(&solSigStren->csiRsrq);

+    p->readInt32(&solSigStren->csiSinr);

+    sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\

+    (solSigStren->csiRsrq) + (solSigStren->csiSinr);

+    if(sum != 0)

+    {

+        solSigStren->nr_sig_valid = 1;

+    }else{

+        LYERRLOG("None of NR signal info");

+    }        

+

+    LYINFLOG("%s suc",__func__);  

+    delete p;

+    return RESULT_OK;    

 }

 

 int lynq_set_ims(const int ims_mode)

 {

-    if(ims_mode == -1000)

+    if(g_module_init_flag != MODULE_RUNNING)

     {

-        g_inner_test = 1;

-        return 0;

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

     }

-

-    int ret = -1;

     if (ims_mode < 0 || ims_mode > 1)

     {

         LYERRLOG("%s parameter %d error",__func__,ims_mode);  

-        return ret;

+        return LYNQ_E_PARAMETER_ANONALY;

     }     

-    

-    lynq_resp_t head; 

-    Parcel* p=NULL;

-      

-    ret=lynq_get_common_request(RIL_REQUEST_SET_IMS_ENABLE,65,p,1,"%d",ims_mode);

-    if(ret==0)

-    {

-        if(p==NULL)

-        {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

-        }

-        ret=GetHeader(p,head);

-        if(ret!=0)

-        {

-            LYERRLOG("%s get head error %d",__func__,ret);

-            delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

-        LYINFLOG("%s set %d suc",__func__,ims_mode);    

-        delete p;

-        return 0;

-    }

 

-    LYERRLOG("%s get response from modem failure, ret is %d",__func__,ret);

-    return ret;

+    Parcel* p=NULL;

+    int ret = lynq_send_common_request(p,65,RIL_REQUEST_SET_IMS_ENABLE,1,"%d",ims_mode);

+    if(ret!=RESULT_OK)

+    {

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }        

+    

+    LYINFLOG("%s set %d suc",__func__,ims_mode);    

+    delete p;

+    return RESULT_OK;   

 }

 

+/*Used to get urc info*/

+int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)

+{

+    if(g_module_init_flag != MODULE_RUNNING)

+    {

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

+    }

+    LYDBGLOG("start get urc info");

+    if(handle != RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED &&handle != RIL_UNSOL_SIGNAL_STRENGTH)

+    {

+        LYINFLOG("invalid handle!!!");

+        return LYNQ_E_PARAMETER_ANONALY;

+    }

+    if((handle ==RIL_UNSOL_SIGNAL_STRENGTH && NULL == solSigStren) || 

+        (handle ==RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED && NULL == slot_id))

+    {

+        LYINFLOG("incoming solSigStren or slot_id is NULL!!!");

+        return LYNQ_E_PARAMETER_ANONALY;

+    }

+    switch(handle)

+    {

+        case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: //1002

+        {

+            LYDBGLOG("get state update to VOICE");

+            *slot_id = s_module_urc_slot_id;

+            LYINFLOG("slot_id = %d",s_module_urc_slot_id);

+            break;

+        }

+        case RIL_UNSOL_SIGNAL_STRENGTH: //1009

+        {

+            LYDBGLOG("get state update to signal info");

+            solSigStren->gw_sig_valid = s_network_urc_solSigStren.gw_sig_valid;

+            solSigStren->rssi = s_network_urc_solSigStren.rssi;

+            solSigStren->wcdma_sig_valid = s_network_urc_solSigStren.wcdma_sig_valid;

+            solSigStren->rscp = s_network_urc_solSigStren.rscp;

+            solSigStren->ecno = s_network_urc_solSigStren.ecno;

+            solSigStren->lte_sig_valid = s_network_urc_solSigStren.lte_sig_valid;

+            solSigStren->rsrp = s_network_urc_solSigStren.rsrp;

+            solSigStren->rsrq = s_network_urc_solSigStren.rsrq;

+            solSigStren->rssnr = s_network_urc_solSigStren.rssnr;

+            solSigStren->nr_sig_valid = s_network_urc_solSigStren.nr_sig_valid;

+            solSigStren->ssRsrp = s_network_urc_solSigStren.ssRsrp;

+            solSigStren->ssRsrq = s_network_urc_solSigStren.ssRsrq;

+            solSigStren->ssSinr = s_network_urc_solSigStren.ssSinr;

+            solSigStren->csiRsrp = s_network_urc_solSigStren.csiRsrp;

+            solSigStren->csiRsrq = s_network_urc_solSigStren.csiRsrq;

+            solSigStren->csiSinr = s_network_urc_solSigStren.csiSinr;

+            break;

+        }

+    }

+    return RESULT_OK;   

+}

+

+static pthread_mutex_t urc_signal_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;

+static pthread_cond_t urc_signal_state_change_cond = PTHREAD_COND_INITIALIZER;

+

+int wait_urc_signal_changes()

+{

+    pthread_mutex_lock(&urc_signal_state_change_mutex);

+    pthread_cond_wait(&urc_signal_state_change_cond,&urc_signal_state_change_mutex);

+    pthread_mutex_unlock(&urc_signal_state_change_mutex);

+    return RESULT_OK;   

+}

+

+void send_urc_signal_changes()

+{

+    pthread_mutex_lock(&urc_signal_state_change_mutex);

+    pthread_cond_signal(&urc_signal_state_change_cond);

+    pthread_mutex_unlock(&urc_signal_state_change_mutex);

+    return;

+}

+

+void urc_msg_process(Parcel *p)

+{ 

+    int resp_type; 

+    int none = 0;

+    int NR_sum = 0;

+    int urc_LTE_signalstrength = 0;

+    int urc_WCDMA_signalstrength = 0;

+

+    p->readInt32(&resp_type);

+    p->readInt32(&s_module_wait_urc_id);

+    p->readInt32(&s_module_urc_slot_id);

+    LYINFLOG("urc id = %d, slot_id = %d",s_module_wait_urc_id,s_module_urc_slot_id);

+    switch(s_module_wait_urc_id)

+    {

+        case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:

+        {

+            set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,false);

+            send_urc_signal_changes();

+            break;

+        }

+        case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:

+        {                    

+            set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_DATA_REG,false);

+            send_urc_signal_changes();

+            break;

+        }

+        case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:

+        {                   

+            set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_IMS_REG,false);                                       

+            send_urc_signal_changes();

+            break;

+        }

+        case RIL_UNSOL_SIGNAL_STRENGTH:

+        {

+            p->readInt32(&s_network_urc_solSigStren.rssi);

+            if((s_network_urc_solSigStren.rssi!=99)&&(s_network_urc_solSigStren.rssi!=0))

+            {

+                s_network_urc_solSigStren.gw_sig_valid = 1;

+            }else{

+                s_network_urc_solSigStren.gw_sig_valid = 0;

+            }

+            if(s_network_urc_solSigStren.gw_sig_valid == 1)

+            {

+                LYINFLOG("urc_GSM_signalstrength:%d",s_network_urc_solSigStren.rssi);

+            }

+            p->readInt32(&none);

+            p->readInt32(&none);

+            p->readInt32(&none);

+            p->readInt32(&none);

+            p->readInt32(&none);

+            p->readInt32(&none);

+            p->readInt32(&none);

+            p->readInt32(&urc_LTE_signalstrength);

+            // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);

+            p->readInt32(&s_network_urc_solSigStren.rsrp);

+            p->readInt32(&s_network_urc_solSigStren.rsrq);

+            p->readInt32(&s_network_urc_solSigStren.rssnr);

+            if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))

+            {

+                s_network_urc_solSigStren.lte_sig_valid = 1;

+            }else{

+                s_network_urc_solSigStren.lte_sig_valid = 0;

+            }

+            if(s_network_urc_solSigStren.lte_sig_valid == 1)

+            {

+                LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);

+            }

+            p->readInt32(&none);

+            p->readInt32(&none);

+            p->readInt32(&none);

+            p->readInt32(&none);

+            p->readInt32(&none);

+            p->readInt32(&urc_WCDMA_signalstrength);

+            p->readInt32(&none);

+            p->readInt32(&s_network_urc_solSigStren.rscp);

+            p->readInt32(&s_network_urc_solSigStren.ecno);

+            if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))

+            {

+                s_network_urc_solSigStren.wcdma_sig_valid = 1;

+            }else{

+                s_network_urc_solSigStren.wcdma_sig_valid = 0;

+            }

+            if(s_network_urc_solSigStren.wcdma_sig_valid == 1)

+            {

+                LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);

+            }

+            p->readInt32(&s_network_urc_solSigStren.ssRsrp);

+            p->readInt32(&s_network_urc_solSigStren.ssRsrq);

+            p->readInt32(&s_network_urc_solSigStren.ssSinr);

+            p->readInt32(&s_network_urc_solSigStren.csiRsrp);

+            p->readInt32(&s_network_urc_solSigStren.csiRsrq);

+            p->readInt32(&s_network_urc_solSigStren.csiSinr);

+            NR_sum = (s_network_urc_solSigStren.ssRsrp) + (s_network_urc_solSigStren.ssRsrq) + (s_network_urc_solSigStren.ssSinr) + (s_network_urc_solSigStren.csiRsrp)+\

+            (s_network_urc_solSigStren.csiRsrq) + (s_network_urc_solSigStren.csiSinr);

+            if(NR_sum != 0)

+            {

+                s_network_urc_solSigStren.nr_sig_valid = 1;

+            }else{

+                s_network_urc_solSigStren.nr_sig_valid = 0;

+            }

+            if(s_network_urc_solSigStren.nr_sig_valid == 1)

+            {

+                LYINFLOG("[NR signal]ssRsrp is %d , ssRsrq is %d , ssSinr is %d , csiRsrp is %d , csiRsrq is %d , csiSinr is %d",\

+                s_network_urc_solSigStren.ssRsrp,s_network_urc_solSigStren.ssRsrq,s_network_urc_solSigStren.ssSinr, \

+                s_network_urc_solSigStren.csiRsrp,s_network_urc_solSigStren.csiRsrq,s_network_urc_solSigStren.csiSinr);

+            }             

+            send_urc_signal_changes();

+            break;

+        }

+    }

+}

 

 /*Used to wait for an update signal*/

 int lynq_wait_signalchanges(int *handle)

@@ -1904,61 +1232,15 @@
     if(NULL == handle)

     {

         LYERRLOG("illegal input");

-        return -1;

+        return LYNQ_E_PARAMETER_ANONALY;

     }

-    wait_signal_changes();

+    wait_urc_signal_changes();

     LYDBGLOG("get signalchanges");

-    *handle = network_wait_urc_id;

-    return 0;

-}

-/*Used to get urc info*/

-int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)

-{

-    LYDBGLOG("start get urc info");

-    if(handle != 1002&&handle != 1009)

-    {

-        LYINFLOG("invalid handle!!!");

-        return -1;

-    }

-    if(NULL == solSigStren && NULL == slot_id)

-    {

-        LYINFLOG("incoming solSigStren or slot_id is NULL!!!");

-        return -1;

-    }

-    switch(handle)

-    {

-        case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED

-        {

-            LYDBGLOG("get state update to VOICE");

-            *slot_id = network_urc_slot_id;

-            LYINFLOG("slot_id = %d",network_urc_slot_id);

-            break;

-        }

-        case 1009: //RIL_UNSOL_SIGNAL_STRENGTH

-        {

-            LYDBGLOG("get state update to signal info");

-            solSigStren->gw_sig_valid = network_urc_solSigStren.gw_sig_valid;

-            solSigStren->rssi = network_urc_solSigStren.rssi;

-            solSigStren->wcdma_sig_valid = network_urc_solSigStren.wcdma_sig_valid;

-            solSigStren->rscp = network_urc_solSigStren.rscp;

-            solSigStren->ecno = network_urc_solSigStren.ecno;

-            solSigStren->lte_sig_valid = network_urc_solSigStren.lte_sig_valid;

-            solSigStren->rsrp = network_urc_solSigStren.rsrp;

-            solSigStren->rsrq = network_urc_solSigStren.rsrq;

-            solSigStren->rssnr = network_urc_solSigStren.rssnr;

-            solSigStren->nr_sig_valid = network_urc_solSigStren.nr_sig_valid;

-            solSigStren->ssRsrp = network_urc_solSigStren.ssRsrp;

-            solSigStren->ssRsrq = network_urc_solSigStren.ssRsrq;

-            solSigStren->ssSinr = network_urc_solSigStren.ssSinr;

-            solSigStren->csiRsrp = network_urc_solSigStren.csiRsrp;

-            solSigStren->csiRsrq = network_urc_solSigStren.csiRsrq;

-            solSigStren->csiSinr = network_urc_solSigStren.csiSinr;

-            break;

-        }

-    }

-    return 0;

+    *handle = s_module_wait_urc_id;

+    return RESULT_OK;   

 }

 

+#ifdef MODEM_GEN97

 /**@brief parse at response,return error code,and the response

 * @param response [IN] <response>:original at response,This parameter must be a character array.

 

@@ -1976,7 +1258,7 @@
     if(response == NULL || value == NULL)

     {

         LYERRLOG("parameter invalid");

-        return -1;

+        return LYNQ_E_PARAMETER_ANONALY;

     }

     if(strstr(response,"ERROR"))

     {

@@ -2064,158 +1346,123 @@
                 memcpy(value,temp_buf,strlen(temp_buf));

             }

         }

-        return 0;

+        return RESULT_OK;   

     }

     else

     {

         LYINFLOG("%s this response invalid\n",response);

-        return -1;

+        return LYNQ_E_INNER_ERROR;

     }

 }

-#ifdef MODEM_GEN97

 

 int lynq_oos_recover_timer_interval(int mode, char interval[LY_RECOVER_TIMER_INTERVAL],char result[LY_RECOVER_TIMER_INTERVAL])

 {

-    int ret=-1; 

-    

+    if(g_module_init_flag != MODULE_RUNNING)

+    {

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

+    }

+

     if((mode < 0) || (mode >1) || (mode == 0 && NULL == interval) || (NULL == result))

     {

         LYERRLOG("%s mode %d interval %s result %s error",__func__,mode,interval,result);  

-        return -1;

+        return LYNQ_E_PARAMETER_ANONALY;

     }

 

-    lynq_resp_t head; 

     Parcel* p=NULL;

+    int ret;

 

     if(mode == 0)

     {

-        ret=lynq_get_common_request(RIL_REQUEST_OEM_HOOK_RAW,5,p,1,"AT+ERSCFG=%s",interval);

+        ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"AT+ERSCFG=%s",interval);

     }

     else 

     {

-        ret=lynq_get_common_request(RIL_REQUEST_OEM_HOOK_RAW,5,p,1,"AT+ERSCFG?");

+        ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"AT+ERSCFG?");

     }

 

-    if(ret==0)

+    if(ret!=RESULT_OK)

     {

-        if(p==NULL)

-        {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

-        }

-        ret=GetHeader(p,head);

-        if(ret!=0)

-        {

-            LYERRLOG("%s get head error",__func__,ret);

-            delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

-     

-        int recv_len;    

-        char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};

-        char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }        

 

+    int recv_len;    

+    char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};

+    char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};

 

-        LYINFLOG("get recover timer interval");

-        p->readInt32(&recv_len);

-        if(recv_len == -1)

-        {

-            LYINFLOG("no responset");

-            delete p;

-            return -1;

-        }

-        else

-        {

-            LYINFLOG("recv_len:%d",recv_len);

-            p->read(response_interval,recv_len);

-        }

-        LYINFLOG("response_interval:%s",response_interval);

-        ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);

-        if(mode == 1)

-        {

-            if(strlen(res_data) <= LY_RECOVER_TIMER_INTERVAL)

-            {

-                memcpy(result,res_data,strlen(res_data));

-            }

-        }

-        LYERRLOG("%s ret:%d",__func__,ret);

+    LYINFLOG("get recover timer interval");

+    p->readInt32(&recv_len);

+    if(recv_len == -1)

+    {

+        LYINFLOG("no responset");

         delete p;

-        return ret;         

+        return LYNQ_E_INNER_ERROR;

     }

-

-    LYERRLOG("%s send request error %d",__func__,ret);  

-

-    return ret;

+    else

+    {

+        LYINFLOG("recv_len:%d",recv_len);

+        p->read(response_interval,recv_len);

+    }

+    LYINFLOG("response_interval:%s",response_interval);

+    ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);

+    if(mode == 1)

+    {

+        if(strlen(res_data) <= LY_RECOVER_TIMER_INTERVAL)

+        {

+            memcpy(result,res_data,strlen(res_data));

+        }

+    }

+    LYERRLOG("%s ret:%d",__func__,ret);

+    delete p;

+    return ret;         

 }

 

 int lynq_oos_deep_sleep_recover_timer_interval(int recovery_threshold,int fullband_timer,int sniffer_timer,int inactive_mode)

 {

-    int ret=-1;

-

-    if(((recovery_threshold < 2) || (recovery_threshold > 10)) || ((fullband_timer < 90) || (fullband_timer > 360)) || 

+    if(g_module_init_flag != MODULE_RUNNING)

+    {

+        LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

+        return LYNQ_E_CONFLICT;

+    }

+     if(((recovery_threshold < 2) || (recovery_threshold > 10)) || ((fullband_timer < 90) || (fullband_timer > 360)) || 

     ((sniffer_timer < 10) || (sniffer_timer > 60)) || ((inactive_mode < 0) || (inactive_mode > 1)))

     {

-        LYERRLOG("%s paramter recovery_threshold %d fullband_timer %d sniffer_timer %d inactive_mode %d fail!",__func__,recovery_threshold,fullband_timer,sniffer_timer,inactive_mode);

-        return ret;

+        LYERRLOG("%s paramter recovery_threshold %d fullband_timer %d sniffer_timer %d inactive_mode %d error!",__func__,recovery_threshold,fullband_timer,sniffer_timer,inactive_mode);

+        return LYNQ_E_PARAMETER_ANONALY;

     }

 

-    lynq_resp_t head; 

     Parcel* p=NULL;

+    int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"AT+ESRVREC=%d,%d,%d,%d",recovery_threshold,fullband_timer,sniffer_timer,inactive_mode);

 

-    ret=lynq_get_common_request(RIL_REQUEST_OEM_HOOK_RAW,5,p,1,"AT+ESRVREC=%d,%d,%d,%d",recovery_threshold,fullband_timer,sniffer_timer,inactive_mode);

-    if(ret==0)

+    if(ret!=RESULT_OK)

     {

-        if(p==NULL)

-        {

-            LYERRLOG("%s get p error",__func__);

-            return -1;

-        }

-        ret=GetHeader(p,head);

-        if(ret!=0)

-        {

-            LYERRLOG("%s get head error",__func__,ret);

-            delete p;

-            return -1;

-        }

-        if(head.error!=0)

-        {

-            LYERRLOG("%s mdm return head error %d",__func__,head.error);

-            delete p;

-            return head.error;

-        }

-

-        int recv_len;   

-        char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};

-        char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};

-     

-        p->readInt32(&recv_len);

-        if(recv_len == -1)

-        {

-            LYINFLOG("no responset");

-            delete p;

-            return -1;

-        }

-        else

-        {

-            LYINFLOG("recv_len:%d",recv_len);

-            p->read(response_interval,recv_len);

-        }

-        LYINFLOG("response_interval:%s",response_interval);

-        ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);

-        LYERRLOG("%s ret:%d",__func__,ret);

+        LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);

+        return ret;  

+    }        

+ 

+    int recv_len;   

+    char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};

+    char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};

+ 

+    p->readInt32(&recv_len);

+    if(recv_len == -1)

+    {

+        LYINFLOG("no responset");

         delete p;

-        return ret;      

+        return LYNQ_E_INNER_ERROR;

     }

-

-    LYERRLOG("%s send request error %d",__func__,ret);  

-

-    return ret;

+    else

+    {

+        LYINFLOG("recv_len:%d",recv_len);

+        p->read(response_interval,recv_len);

+    }

+    LYINFLOG("response_interval:%s",response_interval);

+    ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);

+    LYERRLOG("%s ret:%d",__func__,ret);

+    delete p;

+    return ret;      

+ 

 }

 #endif