上库LYNQ_SLEEP接口以及添加对应测试demo(LPM接口暂时未完成等驱动配合),优化LYNQ_NW模块支持配置飞行模式,配置OOS

Change-Id: Id6e9d9e05d8392348cf567a22c253c3a4e319af5
diff --git a/mbtk/include/mbtk/mbtk_info_api.h b/mbtk/include/mbtk/mbtk_info_api.h
index ac0bfe3..a0f09d3 100755
--- a/mbtk/include/mbtk/mbtk_info_api.h
+++ b/mbtk/include/mbtk/mbtk_info_api.h
@@ -905,7 +905,7 @@
 //Get the searching interval of OOS 
 int mbtk_oos_get(mbtk_info_handle_t* handle, mbtk_oos_info *oos_info);
 //Set the searching interval of OOS 
-int mbtk_oos_set(mbtk_info_handle_t* handle, char *oos_info);
+int mbtk_oos_set(mbtk_info_handle_t* handle, mbtk_oos_info *oos_info);
 
 
 //set dtmf character
diff --git a/mbtk/lynq_lib/src/lynq_network.c b/mbtk/lynq_lib/src/lynq_network.c
index 34f215f..7b5eb9f 100755
--- a/mbtk/lynq_lib/src/lynq_network.c
+++ b/mbtk/lynq_lib/src/lynq_network.c
@@ -10,7 +10,6 @@
 
 nw_client_handle_type g_nw_val = -1;
 
-
 typedef struct
 {
     QSER_NW_RxMsgHandlerFunc_t handlerPtr;
@@ -51,47 +50,32 @@
 
 void lynq_nw_state_change_cb(const void* data, int data_len)
 {
+
+/*
     uint8 *net_data = NULL;
 
     net_data = (uint8*)data;
-    log_hex(">>>data",data,data_len);
 
-    if (net_data == NULL)
+    if(data && data_len > 0)
     {
-        LOG(">>>NO DATA");
+        if(*net_data == 0)
+        { // CS
+                printf("CS:act=%d, mode=%d\n", *(net_data + 1), *(net_data + 2));
+        }
+        else
+        { // PS
+                printf("PS[%s]:act=%d, mode=%d\n", *(net_data + 3) == 0 ? "GSM/WCDMA" : "LTE", *(net_data + 1), *(net_data + 2));
+        }
     }
     else
     {
-        LOG(">>>net_data =[%0x]\n",net_data[2]);
+        printf("NET_CB : NULL");
     }
-    
-/*
-    uint8 data[3];
-    data[0] = (uint8)MBTK_NET_CS_STATE;
-
-    net_data[0] = *(uint8 *)(data);                                 //MBTK_NET_PS_STATE
-    net_data[1] = *(uint8 *)(data + sizeof(uint8));                 //mbtk_net_reg_state_enum state Reg State
-    net_data[2] = *(uint8 *)(data + sizeof(uint8) + sizeof(uint8)); //act
 */
 
-    if(roaming_pref == 0)
+    if(lynq_func_cb_handle.handlerPtr != NULL)//数据原样输出
     {
-        mbtk_modem_info_t info;
-        if(*net_data == 5)
-        {
-            info.fun=4;
-        }
-        else
-            info.fun=1;
-        info.rst=0;
-        mbtk_set_modem_fun(lynq_nw_info_handle, &info);
-    }
-    
-    if(lynq_func_cb_handle.handlerPtr != NULL)
-    {
-        //lynq_func_cb_handle.handlerPtr(g_nw_val, NW_IND_VOICE_REG_EVENT_IND_FLAG,&(net_data[2]), sizeof(&(net_data[2])), NULL);
-        lynq_func_cb_handle.handlerPtr(g_nw_val, NW_IND_DATA_REG_EVENT_IND_FLAG,&(net_data[2]), sizeof(&(net_data[2])), NULL);
-        //lynq_func_cb_handle.handlerPtr(g_nw_val, NW_IND_SIGNAL_STRENGTH_EVENT_IND_FLAG,&(net_data[2]), sizeof(&(net_data[2])), NULL);
+        lynq_func_cb_handle.handlerPtr(g_nw_val, NW_IND_DATA_REG_EVENT_IND_FLAG, data, data_len, NULL);
     }
 }
 
@@ -169,7 +153,7 @@
     } else {
         switch(net_mode)
         {
-            //只做234G的only下配 MBTK_NET_PREF_GSM_ONLY/MBTK_NET_PREF_UMTS_ONLY/MBTK_NET_PREF_LTE_ONLY
+            //只做234G的下配 MBTK_NET_PREF_GSM_ONLY/MBTK_NET_PREF_GSM_UMTS_UMTS_PREF/MBTK_NET_PREF_GSM_UMTS_LTE_LTE_PREF
             case QSER_NW_MODE_GSM:
                 mbtk_net_pre = MBTK_NET_PREF_GSM_ONLY;
                 break;
@@ -584,16 +568,142 @@
 
 int qser_nw_set_oos_config (nw_client_handle_type h_nw, QSER_NW_OOS_CONFIG_INFO_T *pt_info)
 {
-    UNUSED(h_nw);
-    UNUSED(pt_info);
+    //UNUSED(h_nw);
+    //UNUSED(pt_info);
+    if (h_nw != g_nw_val || g_nw_val == -1)
+    {
+        printf("handle NULL\n");
+        return -1;
+    }
+
+    if (pt_info == NULL)
+    {
+        printf("QSER_NW_OOS_CONFIG_INFO_T NULL\n");
+        return -1;
+    }
+
+    uint32 oosPhase_0, oosPhase_1, oosPhase_2;
+    char tmp_type;
+    mbtk_oos_info oos_info;
+
+    memset(&oos_info, 0x00, sizeof(mbtk_oos_info));
+
+
+    tmp_type = pt_info->type;
+
+    if (tmp_type == QSER_NW_OOS_CFG_TYPE_FULL_BAND_SCAN)
+    {//如果没有配置对应的值,例如,10,20
+     //oosPhase_2这个位置没有配置,则使用默认值20,既不限制次数的5s进行一次扫描
+     //同理oosPhase_0,oosPhase_1这个位置没有配置,则使用默认值5,10,既限制次数5次的5s,10s进行一次扫描
+     //输入多少配置多少,可以缺省使用默认值
+        if (pt_info->u.full_band_scan_info.t_min < 0 || pt_info->u.full_band_scan_info.t_step < 0 || pt_info->u.full_band_scan_info.t_max < 0)
+        {
+            printf("qser_nw_set_oos_config set time < 0 \n");
+            return -1;
+        }
+        else if ((pt_info->u.full_band_scan_info.t_min > 0 && pt_info->u.full_band_scan_info.t_min <= 255) && pt_info->u.full_band_scan_info.t_step == 0 && pt_info->u.full_band_scan_info.t_max == 0)
+        {
+            oosPhase_0 = pt_info->u.full_band_scan_info.t_min;
+            oos_info.mode = 1;
+            oos_info.oosPhase[0] = oosPhase_0;
+        }
+        else if ((pt_info->u.full_band_scan_info.t_min > 0 && pt_info->u.full_band_scan_info.t_min <= 255) && (pt_info->u.full_band_scan_info.t_step > 0 && pt_info->u.full_band_scan_info.t_step <= 255) && pt_info->u.full_band_scan_info.t_max == 0)
+        {
+            oosPhase_0 = pt_info->u.full_band_scan_info.t_min;
+            oosPhase_1 = pt_info->u.full_band_scan_info.t_step;
+            oos_info.mode = 1;
+            oos_info.oosPhase[0] = oosPhase_0;
+            oos_info.oosPhase[1] = oosPhase_1;
+        }
+        else if ((pt_info->u.full_band_scan_info.t_min > 0 && pt_info->u.full_band_scan_info.t_min <= 255) && (pt_info->u.full_band_scan_info.t_step > 0 && pt_info->u.full_band_scan_info.t_step <= 255) && (pt_info->u.full_band_scan_info.t_max > 0 && pt_info->u.full_band_scan_info.t_max <= 255))
+        {
+            oosPhase_0 = pt_info->u.full_band_scan_info.t_min;
+            oosPhase_1 = pt_info->u.full_band_scan_info.t_step;
+            oosPhase_2 = pt_info->u.full_band_scan_info.t_max;
+            oos_info.mode = 1;
+            oos_info.oosPhase[0] = oosPhase_0;
+            oos_info.oosPhase[1] = oosPhase_1;
+            oos_info.oosPhase[2] = oosPhase_2;
+        }
+        else if (pt_info->u.full_band_scan_info.t_min == 0 && pt_info->u.full_band_scan_info.t_step == 0 && pt_info->u.full_band_scan_info.t_max == 0)
+        {
+            oos_info.mode = 0;
+        }
+        else
+        {
+            printf("qser_nw_set_oos_config set Format err\n");
+            return -1;
+        }
+
+        int err = mbtk_oos_set(lynq_nw_info_handle, &oos_info);
+        if (err != 0)
+        {
+            printf("qser_nw_set_oos_config mbtk_oos_set err \n");
+            return -1;
+        }
+    }
+    else if (tmp_type == QSER_NW_OOS_CFG_TYPE_FAST_SCAN)
+    {
+        printf("Not currently supported\n");
+        return -1;
+    }
+    else
+    {
+        printf("type is error\n");
+        return -1;
+    }
 
     return 0;
 }
 
 int qser_nw_get_oos_config (nw_client_handle_type h_nw, QSER_NW_OOS_CONFIG_INFO_T *pt_info)
 {
-    UNUSED(h_nw);
-    UNUSED(pt_info);
+    //UNUSED(h_nw);
+    //UNUSED(pt_info);
+    if (h_nw != g_nw_val || g_nw_val == -1)
+    {
+        printf("handle NULL\n");
+        return -1;
+    }
+
+    mbtk_oos_info oos_info;
+    uint32 oosPhase_0, oosPhase_1, oosPhase_2;
+    char cmd[100] = {0};
+
+    memset(&oos_info, 0x00, sizeof(mbtk_oos_info));
+
+    int err = mbtk_oos_get(lynq_nw_info_handle, &oos_info);
+    if (err != 0)
+    {
+        printf("qser_nw_get_oos_config mbtk_oos_get err \n");
+        return -1;
+    }
+
+    printf("oos_info.mode =[%d] \n",oos_info.mode);
+    printf("oos_info.1 =[%d] \n",oos_info.oosPhase[0]);
+    printf("oos_info.2 =[%d] \n",oos_info.oosPhase[1]);
+    printf("oos_info.3 =[%d] \n",oos_info.oosPhase[2]);
+
+    if(oos_info.mode == 0)//关闭状态
+    {
+        pt_info->u.full_band_scan_info.t_min = 0;
+        pt_info->u.full_band_scan_info.t_step = 0;
+        pt_info->u.full_band_scan_info.t_max = 0;
+    }
+    else
+    {
+        pt_info->u.full_band_scan_info.t_min = (int)oos_info.oosPhase[0];
+        pt_info->u.full_band_scan_info.t_step = (int)oos_info.oosPhase[1];
+        pt_info->u.full_band_scan_info.t_max = (int)oos_info.oosPhase[2];
+    }
+    pt_info->type = QSER_NW_OOS_CFG_TYPE_FULL_BAND_SCAN;
+
+
+    if (pt_info == NULL)
+    {
+        printf("qser_nw_get_oos_config pt_info is null \n");
+        return -1;
+    }
 
     return 0;
 }
@@ -603,6 +713,7 @@
     //UNUSED(h_nw);
     //UNUSED(rf_mode);
     int ret;
+    mbtk_modem_info_t info;
 
     if (h_nw != g_nw_val || g_nw_val == -1)
     {
@@ -616,13 +727,24 @@
         return -1;
     }
 
+/*
     if (rf_mode == 4)
     {
         printf("Flight Mode no Support Now\n");
         return -1;
     }
+*/
+    if (rf_mode != 4 && rf_mode != 0 && rf_mode != 1) 
+    {
+        printf("mode is error!\n");
+        return -1;
+    }
 
-    ret = mbtk_radio_state_set(lynq_nw_info_handle, rf_mode);
+    info.fun = rf_mode;
+    info.rst = 0;
+    ret = mbtk_set_modem_fun(lynq_nw_info_handle, &info);
+
+    //ret = mbtk_radio_state_set(lynq_nw_info_handle, rf_mode);
     if (ret != 0)
     {
         LOGE("mbtk_radio_state_set fail.");
@@ -655,7 +777,9 @@
         return -1;
     }
 
-    ret = mbtk_radio_state_get(lynq_nw_info_handle, &tmp_rf);
+    ret = mbtk_get_modem_fun(lynq_nw_info_handle, &tmp_rf);
+
+    //ret = mbtk_radio_state_get(lynq_nw_info_handle, &tmp_rf);
     if (ret != 0)
     {
         LOGE("mbtk_radio_state_get fail.");
diff --git a/mbtk/lynq_lib/src/lynq_sleep.c b/mbtk/lynq_lib/src/lynq_sleep.c
index 2b1ef31..b7592bd 100755
--- a/mbtk/lynq_lib/src/lynq_sleep.c
+++ b/mbtk/lynq_lib/src/lynq_sleep.c
@@ -6,6 +6,9 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <pthread.h>
+#include <string.h>
+
 
 #include "mbtk_type.h"
 #include "mbtk_log.h"
@@ -25,6 +28,16 @@
 static bool sms_off = FALSE;
 static bool data_off = FALSE;
 
+pthread_t lpm_t;
+static int edge_t = 0;
+
+typedef struct{
+    qser_lpm_wakeupin_data_t wakeupin;
+    qser_lpm_wakeupout_data_t wakeupout;
+}lynq_wake_t;
+
+static lynq_wake_t lpm_init;
+
 
 static int powerrind_get()
 {
@@ -57,7 +70,6 @@
 static mbtk_info_handle_t* whitelist_info_handle = NULL;
 
 
-
 int qser_autosuspend_enable(char enable)
 {
     //UNUSED(enable);
@@ -217,15 +229,46 @@
     return 0;
 }
 
+void *threadFunction(void *arg)
+{
+    int pinValue;
+    
+
+    edge_t = pinValue;
+    return NULL;
+}
 
 int qser_lpm_init(qser_lpm_Handler_t qser_lpm_handler, qser_pm_cfg_t *qser_lpm_cfg)
 {
-    UNUSED(qser_lpm_handler);
-    UNUSED(qser_lpm_cfg);
+    //UNUSED(qser_lpm_handler);
+    //UNUSED(qser_lpm_cfg);
 
-    //pthread_mutex_init();
+    lpm_init.wakeupin.wakeupin_pin = qser_lpm_cfg->wakeupin.wakeupin_pin;
+    printf(">>pin = %d",lpm_init.wakeupin.wakeupin_pin);
+    lpm_init.wakeupin.wakeupin_edge = qser_lpm_cfg->wakeupin.wakeupin_edge;
+    printf(">>edge = %d",lpm_init.wakeupin.wakeupin_edge);
+    edge_t = qser_lpm_cfg->wakeupin.wakeupin_edge;//保留原始状态值 0 or 1
 
+    //pthread_attr_t thread_attr;
+    //pthread_attr_init(&thread_attr);
+    /*
+    if(pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED))
+    {
+        printf("pthread_attr_setdetachstate() fail\n");
+        return -1;
+    }
+    */
+    //if(pthread_create(&lpm_t, &thread_attr, threadFunction, NULL))
+    if(pthread_create(&lpm_t, NULL, threadFunction, NULL))
+    {
+        printf("qser_lpm_init can't create thread\n");
+        return -1;
+    }
 
+    //pthread_attr_destroy(&thread_attr);
+
+    if (edge_t != qser_lpm_cfg->wakeupin.wakeupin_edge)//说明有变化,并且和原来的值不相同
+        qser_lpm_handler(edge_t);
 
     return 0;
 }
@@ -233,6 +276,18 @@
 int qser_lpm_deinit(void)
 {
 
+    if(pthread_cancel(lpm_t) != 0)
+    {
+        printf("qser_lpm_deinit pthread_cancel err\n");
+        return -1;
+    }
+
+    if(pthread_join(lpm_t,NULL) != 0)
+    {
+        printf("qser_lpm_deinit pthread_join err\n");
+        return -1;
+    }
+
     return 0;
 }
 
@@ -270,7 +325,8 @@
 
     if (len != 4)
     {
-        printf("whitelish num error.\n");
+        printf("whitelish num error num=[%d]\n",len);
+        return -1;
     }
 
     tmp = atoi(whitelish);
@@ -362,7 +418,7 @@
 int qser_whitelist_get(char* whitelish)
 {
     //UNUSED(whitelish);
-    char *list = NULL;
+    char list[10]={0};
     int call_t, nw_t, data_t, sms_t;
 
     if (call_Off == TRUE)
@@ -385,9 +441,9 @@
     else
         sms_t = 0;
 
-    sprintf(list,"%d%d%d%d\n",call_t, nw_t, data_t, sms_t);
-    printf(">>>whitelist: %s\n",list);
-    whitelish = list;
+    sprintf(list, "%d%d%d%d", call_t, nw_t, data_t, sms_t);
+    //printf(">>>whitelist: %s\n",list);
+    strncpy(whitelish, list, strlen(list));
 
     if(whitelist_info_handle != NULL)
     {
diff --git a/mbtk/mbtk_lib/inc/mbtk_info.h b/mbtk/mbtk_lib/inc/mbtk_info.h
index b562cb2..1f035be 100755
--- a/mbtk/mbtk_lib/inc/mbtk_info.h
+++ b/mbtk/mbtk_lib/inc/mbtk_info.h
@@ -216,14 +216,19 @@
 
     MBTK_INFO_ID_PB_END,
 
-    //wakeup 
+    //wakeup
+    MBTK_INFO_ID_WAKEUP_STA_BEGIN = 6000,
     MBTK_INFO_ID_WAKEUP_STA_REQ,
     MBTK_INFO_ID_WAKEUP_STA_RSP,
 
+    MBTK_INFO_ID_WAKEUP_STA_END,
+
     //oos(out of service))
+    MBTK_INFO_ID_OOS_STA_BEGIN = 7000,
     MBTK_INFO_ID_OOS_STA_REQ,
     MBTK_INFO_ID_OOS_STA_RSP,
 
+    MBTK_INFO_ID_OOS_STA_END,
 
     // IND Information
     MBTK_INFO_ID_IND_BEGIN = 10000,
diff --git a/mbtk/mbtk_lib/src/mbtk_info.c b/mbtk/mbtk_lib/src/mbtk_info.c
index 7ff9345..cdef2b2 100755
--- a/mbtk/mbtk_lib/src/mbtk_info.c
+++ b/mbtk/mbtk_lib/src/mbtk_info.c
@@ -430,6 +430,10 @@
             info_id == MBTK_INFO_ID_SMS_END ||
             info_id == MBTK_INFO_ID_PB_BEGIN ||
             info_id == MBTK_INFO_ID_PB_END ||
+            info_id == MBTK_INFO_ID_WAKEUP_STA_BEGIN ||
+            info_id == MBTK_INFO_ID_WAKEUP_STA_END ||
+            info_id == MBTK_INFO_ID_OOS_STA_BEGIN ||
+            info_id == MBTK_INFO_ID_OOS_STA_END ||
             info_id == MBTK_INFO_ID_REQ_UNKNOWN)
     {
         return MBTK_INFO_TYPE_UNKNOWN;
diff --git a/mbtk/mbtk_lib/src/mbtk_info_api.c b/mbtk/mbtk_lib/src/mbtk_info_api.c
index 1c54ecb..cae9d27 100755
--- a/mbtk/mbtk_lib/src/mbtk_info_api.c
+++ b/mbtk/mbtk_lib/src/mbtk_info_api.c
@@ -2143,17 +2143,15 @@
 /*
 * oos set .
 */
-int mbtk_oos_set(mbtk_info_handle_t* handle, char *oos_info)
+int mbtk_oos_set(mbtk_info_handle_t* handle, mbtk_oos_info *oos_info)
 {
     if(handle == NULL)
     {
         LOGE("ARG error.");
         return -1;
     }
-    if(str_empty(oos_info))
-        return -1;
 
-    return info_item_process(handle, MBTK_INFO_ID_OOS_STA_REQ, oos_info, strlen(oos_info), NULL) ? handle->info_err : 0;
+    return info_item_process(handle, MBTK_INFO_ID_OOS_STA_REQ, oos_info, sizeof(mbtk_oos_info), NULL) ? handle->info_err : 0;
 }
 
 
diff --git a/mbtk/mbtk_ril/src/mbtk_info_server.c b/mbtk/mbtk_ril/src/mbtk_info_server.c
index f731309..861c64b 100755
--- a/mbtk/mbtk_ril/src/mbtk_info_server.c
+++ b/mbtk/mbtk_ril/src/mbtk_info_server.c
@@ -75,7 +75,7 @@
     if (state >= 0 && state < 32)
     {
         sprintf(cmd, "AT*POWERIND=%d", state);
-        LOG("Set the powerind command is = %s.\n", cmd);
+        LOG("Set the powerind command is = [%s]\n", cmd);
     }
     int err = at_send_command(cmd, &response);
     if (err < 0 || response->success == 0){
@@ -89,36 +89,56 @@
 }
 
 /*
+AT+OOSPP=1
+or
+AT+OOSPP=0
+or
 AT+OOSPP=1,20,30,40 //AtOospp()
  param1:mode
  param2:oosPhasePeriod[0] //5 times, 5s by default;
- param3:oosPhasePeriod[1] //5 times, 5s by default;
- param4:oosPhasePeriod[2] //unlimited, 5s by default;
+ param3:oosPhasePeriod[1] //5 times, 10s by default;
+ param4:oosPhasePeriod[2] //unlimited, 20s by default;
 
 
 BTW
 1, 如果只输入mode=1,其余参数不设置,相当于这个功能打开,时间间隔是这个功能的默认值。
 2, 如果当mode=1加上其余设置参数后,功能打开,时间间隔是本次设置的值;
-3,如果再设置mode=0,相当于这个功能关闭,是走默认的搜网间隔。
-
+3,如果再设置mode=0,相当于这个功能关闭,是走平台自己另一套的搜网设置。
+平台本身是有一套间隔搜网,也有历史频点优先处理的逻辑(不需要我们进行处理),
+提供给我们的AT+OOSPP指令是让我们可以自定义搜网间隔
 */
-static int req_oos_set(char* state, int *cme_err)
+static int req_oos_set(mbtk_oos_info* state, int *cme_err)
 {
     ATResponse *response = NULL;
     char cmd[100] = {0};
-    int mode;
 
-    mode = atoi(state);
-    if (mode == 1 || mode == 0)//只有一个值0/1
+    if ((state->mode == 1 && state->oosPhase[0] == 0 && state->oosPhase[1] == 0 && state->oosPhase[2] == 0) \
+        || state->mode == 0)
     {
-        sprintf(cmd, "AT+OOSPP=%d", mode);
+        sprintf(cmd, "AT+OOSPP=%d", state->mode);//只有一个值0/1
     }
     else
     {
-        sprintf(cmd, "AT+OOSPP=%s", state);
+        if ((state->oosPhase[0] != 0) && (state->oosPhase[1] != 0) && (state->oosPhase[2] != 0))
+        {
+            sprintf(cmd, "AT+OOSPP=%d,%d,%d,%d", state->mode, state->oosPhase[0], state->oosPhase[1], state->oosPhase[2]);
+        }
+        else if ((state->oosPhase[0] != 0) && (state->oosPhase[1] != 0) && (state->oosPhase[2] == 0))
+        {
+            sprintf(cmd, "AT+OOSPP=%d,%d,%d", state->mode, state->oosPhase[0], state->oosPhase[1]);
+        }
+        else if ((state->oosPhase[0] != 0) && (state->oosPhase[1] == 0) && (state->oosPhase[2] == 0))
+        {
+            sprintf(cmd, "AT+OOSPP=%d,%d", state->mode, state->oosPhase[0]);
+        }
+        else
+        {
+            LOG("AT+OOSPP SET ERR");
+            goto exit;
+        }
     }
 
-    LOG("Set the oos command is = %s.\n", cmd);
+    LOG("Set the oos command is = [%s]\n", cmd);
     int err = at_send_command(cmd, &response);
     if (err < 0 || response->success == 0){
         *cme_err = at_get_cme_error(response);
@@ -133,8 +153,8 @@
 
 /*
 AT+OOSPP?
-开:
-+OOSPP:5,5,5
+开(默认值):
++OOSPP:5,10,20
 关:
 +OOSPP:0
 */
@@ -142,7 +162,7 @@
 {
     ATResponse *response = NULL;
 
-    int err = at_send_command_singleline("AT+CSCA?", "+OOSPP:", &response);
+    int err = at_send_command_singleline("AT+OOSPP?", "+OOSPP:", &response);
 
     if (err < 0 || response->success == 0 || !response->p_intermediates){
         *cme_err = at_get_cme_error(response);
@@ -152,42 +172,48 @@
     char *line = response->p_intermediates->line;
 
     char *tmp_str = NULL;
+    err = at_tok_start(&line);//+OOSPP:10,15,20,过滤+OOSPP:
+    if (err < 0)
+    {
+        goto exit;
+    }
+
+    //LOG("req_oos_get =[%s]",line);
+
     err = at_tok_nextstr(&line, &tmp_str);
     if (err < 0)
     {
         goto exit;
     }
 
-    LOG("[xiaorui] >>> req_oos_get =[%s]",tmp_str);
-
     int mode = atoi(tmp_str);
     if (mode == 0)//关闭状态
     {
-        req->mode = (uint8)mode;
+        req->mode = mode;
     }
     else//开状态
     {
         req->mode = 1;
-
-        req->oosPhase[0] = (uint8)tmp_str;
+        //LOG("tmp_str =[%s]",tmp_str);
+        req->oosPhase[0] = atoi(tmp_str);
 
         err = at_tok_nextstr(&line, &tmp_str);
         if (err < 0)
         {
             goto exit;
         }
-        req->oosPhase[1] = (uint8)tmp_str;
+        //LOG("tmp_str =[%s]",tmp_str);
+        req->oosPhase[1] = atoi(tmp_str);
 
         err = at_tok_nextstr(&line, &tmp_str);
         if (err < 0)
         {
             goto exit;
         }
-        req->oosPhase[2] = (uint8)tmp_str;
+        //LOG("tmp_str =[%s]",tmp_str);
+        req->oosPhase[2] = atoi(tmp_str);
     }
 
-    memcpy(req, tmp_str, strlen(tmp_str));
-
 exit:
     at_response_free(response);
     return err;
@@ -5248,17 +5274,22 @@
                             err = MBTK_INFO_ERR_UNKNOWN;
                         }
                         LOG("Get SMS OOS fail.");
-                        printf("Get OOS fail\n");
                     }
                     else
                     {
-                        printf("Get OOS suscess\n");
                         pack_rsp_send(cli_info->fd, MBTK_INFO_ID_OOS_STA_RSP, &oos_t, sizeof(mbtk_oos_info));
                     }
                 }
                 else     // Set OOS
                 {
-                    char* state = pack->data;
+                    mbtk_oos_info *state = (mbtk_oos_info *)pack->data;
+                    if(pack->data_len != sizeof(mbtk_oos_info))
+                    {
+                        err = MBTK_INFO_ERR_REQ_PARAMETER;
+                        LOG("Set oos error.");
+                        break;
+                    }
+
                     if(req_oos_set(state, &cme_err) || cme_err != MBTK_INFO_ERR_CME_NON)
                     {
                         if(cme_err != MBTK_INFO_ERR_CME_NON) {
diff --git a/mbtk/test/asr1806/lynq_nw_test.c b/mbtk/test/asr1806/lynq_nw_test.c
index 62c231d..55b5206 100755
--- a/mbtk/test/asr1806/lynq_nw_test.c
+++ b/mbtk/test/asr1806/lynq_nw_test.c
@@ -18,179 +18,26 @@
     u_int32_t              ind_msg_len, 
     void                  *contextPtr)
 {
-    switch(ind_flag) {
-        case NW_IND_VOICE_REG_EVENT_IND_FLAG:
-            {
-                printf(">>>>>NW_IND_VOICE_REG_EVENT_IND_FLAG!!! \n");
-                QSER_NW_VOICE_REG_EVENT_IND_T *ind = (QSER_NW_VOICE_REG_EVENT_IND_T*)ind_msg_buf;
-                printf("Recv event indication : VOICE REG EVENT\n");
-                
-                if(ind==NULL)
-                {
-                     printf("ind is NULL\n");
-                     break;
-                }
-                /*
-                if(ind->registration_valid)
-                {
-                    printf("voice_registration: \ntech_domain=%s, radio_tech=%s, roaming=%d, registration_state=%d\n", 
-                            ind->registration.tech_domain, 
-                            ind->registration.radio_tech,
-                            ind->registration.roaming,
-                            ind->registration.registration_state);
-                }
-                */
-                if(ind->registration_details_3gpp_valid)
-                {
-                    printf("voice_registration_details_3gpp: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, cid=0x%X, lac=%d, psc=%d, tac=%d\n", 
-                            ind->registration_details_3gpp.tech_domain, 
-                            ind->registration_details_3gpp.radio_tech,
-                            ind->registration_details_3gpp.mcc,
-                            ind->registration_details_3gpp.mnc,
-                            ind->registration_details_3gpp.roaming,
-                            ind->registration_details_3gpp.forbidden,                    
-                            ind->registration_details_3gpp.cid,
-                            ind->registration_details_3gpp.lac,
-                            ind->registration_details_3gpp.psc,
-                            ind->registration_details_3gpp.tac);
-                }
-                /*
-                if(ind->registration_details_3gpp2_valid)
-                {
-                    printf("voice_registration_details_3gpp2: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, sid=%d, nid=%d, bsid=%d\n", 
-                            ind->registration_details_3gpp2.tech_domain, 
-                            ind->registration_details_3gpp2.radio_tech,
-                            ind->registration_details_3gpp2.mcc,
-                            ind->registration_details_3gpp2.mnc,
-                            ind->registration_details_3gpp2.roaming,
-                            ind->registration_details_3gpp2.forbidden,                    
-                            ind->registration_details_3gpp2.sid,
-                            ind->registration_details_3gpp2.nid,
-                            ind->registration_details_3gpp2.bsid);
-                }
-                */
-                break;
-            }
-        case NW_IND_DATA_REG_EVENT_IND_FLAG:
-            {
-                printf(">>>>>NW_IND_DATA_REG_EVENT_IND_FLAG!!! \n");
-                QSER_NW_DATA_REG_EVENT_IND_T *ind = (QSER_NW_DATA_REG_EVENT_IND_T*)ind_msg_buf;
+    uint8 *net_data = NULL;
 
-                printf("Recv event indication : DATA REG EVENT\n");
-                
-                if(ind==NULL)
-                {
-                     printf("ind is NULL\n");
-                     break;
-                }
-                /*
-                if(ind->registration_valid)
-                {
-                    printf("data_registration: \ntech_domain=%s, radio_tech=%s, roaming=%d, registration_state=%d\n", 
-                            ind->registration.tech_domain, 
-                            ind->registration.radio_tech,
-                            ind->registration.roaming,
-                            ind->registration.registration_state);
-                }
-                */
-                if(ind->registration_details_3gpp_valid)
-                {
-                    printf("data_registration_details_3gpp: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, cid=0x%X, lac=%d, psc=%d, tac=%d\n", 
-                            ind->registration_details_3gpp.tech_domain, 
-                            ind->registration_details_3gpp.radio_tech,
-                            ind->registration_details_3gpp.mcc,
-                            ind->registration_details_3gpp.mnc,
-                            ind->registration_details_3gpp.roaming,
-                            ind->registration_details_3gpp.forbidden,                    
-                            ind->registration_details_3gpp.cid,
-                            ind->registration_details_3gpp.lac,
-                            ind->registration_details_3gpp.psc,
-                            ind->registration_details_3gpp.tac);
-                }
-                /*
-                if(ind->registration_details_3gpp2_valid)
-                {
-                    printf("data_registration_details_3gpp2: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, prl=%d, css=%d, sid=%d, nid=%d, bsid=%d\n", 
-                            ind->registration_details_3gpp2.tech_domain, 
-                            ind->registration_details_3gpp2.radio_tech,
-                            ind->registration_details_3gpp2.mcc,
-                            ind->registration_details_3gpp2.mnc,
-                            ind->registration_details_3gpp2.roaming,
-                            ind->registration_details_3gpp2.forbidden,   
-                            ind->registration_details_3gpp2.inPRL,
-                            ind->registration_details_3gpp2.css,
-                            ind->registration_details_3gpp2.sid,
-                            ind->registration_details_3gpp2.nid,
-                            ind->registration_details_3gpp2.bsid);
-                }
-                */
-                break;
-            }
-        case NW_IND_SIGNAL_STRENGTH_EVENT_IND_FLAG:
-            {
-                printf(">>>>>NW_IND_SIGNAL_STRENGTH_EVENT_IND_FLAG!!! \n");
-                QSER_NW_SINGNAL_EVENT_IND_T *ind = (QSER_NW_SINGNAL_EVENT_IND_T*)ind_msg_buf;
+    net_data = (uint8*)ind_msg_buf;
 
-                printf("Recv event indication : SIGNAL STRENGTH EVENT\n");
-                
-                if(ind==NULL)
-                {
-                     printf("ind is NULL\n");
-                     break;
-                }
-
-                if(ind->gsm_sig_info_valid)
-                {
-                    printf("gsm_sig_info: rssi=%d\n", 
-                            ind->gsm_sig_info.rssi);
-                } 
-
-                if(ind->wcdma_sig_info_valid)
-                {
-                    printf("wcdma_sig_info: rssi=%d, ecio=%d\n", 
-                            ind->wcdma_sig_info.rssi, 
-                            ind->wcdma_sig_info.ecio);
-                }
-                /*
-                if(ind->tdscdma_sig_info_valid)
-                {
-                    printf("tdscdma_sig_info: rssi=%d, rscp=%d, ecio=%d, sinr=%d\n", 
-                            ind->tdscdma_sig_info.rssi, 
-                            ind->tdscdma_sig_info.rscp,
-                            ind->tdscdma_sig_info.ecio,
-                            ind->tdscdma_sig_info.sinr);
-                } 
-                */
-                if(ind->lte_sig_info_valid)
-                {
-                    printf("lte_sig_info: rssi=%d, rsrq=%d, rsrp=%d, snr=%d\n", 
-                            ind->lte_sig_info.rssi, 
-                            ind->lte_sig_info.rsrq,
-                            ind->lte_sig_info.rsrp,
-                            ind->lte_sig_info.snr);
-                } 
-                /*
-                if(ind->cdma_sig_info_valid)
-                {
-                    printf("cdma_sig_info: rssi=%d, ecio=%d\n", 
-                            ind->cdma_sig_info.rssi, 
-                            ind->cdma_sig_info.ecio);
-                } 
-                if(ind->hdr_sig_info_valid)
-                {
-                    printf("hdr_sig_info: rssi=%d, ecio=%d, sinr=%d, io=%d\n", 
-                            ind->hdr_sig_info.rssi, 
-                            ind->hdr_sig_info.ecio,
-                            ind->hdr_sig_info.sinr,
-                            ind->hdr_sig_info.io);
-                }
-                */
-                break;
-            }        
-        default:
-            printf(">>>>>NO DATA!!! \n");
-            break;
+    if(ind_msg_buf && ind_msg_len > 0)//无处理原始数据传输过来
+    {
+        if(*net_data == 0)
+        { // CS
+                printf("CS:act=%d, mode=%d\n", *(net_data + 1), *(net_data + 2));
+        }
+        else
+        { // PS
+                printf("PS[%s]:act=%d, mode=%d\n", *(net_data + 3) == 0 ? "GSM/WCDMA" : "LTE", *(net_data + 1), *(net_data + 2));
+        }
     }
+    else
+    {
+        printf("NET_CB : NULL");
+    }
+
 }
 
 
@@ -245,6 +92,7 @@
                     "\t16:LTE \n"
                     "\t32:TDSCDMA \n"
             );
+            memset(operator,0x00, sizeof(operator));
             fgets(operator, sizeof(operator), stdin);
             fflush(stdin);
             opt = atoi(operator);
@@ -297,9 +145,9 @@
             } else {
                  if(reg.voice_registration_details_3gpp_valid)
                  {
-                     printf("voice_registration_details_3gpp: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, cid=0x%X, lac=%d, psc=%d, tac=%d\n", 
-                         tech_domain[reg.voice_registration_details_3gpp.tech_domain], 
-                         radio_tech[reg.voice_registration_details_3gpp.radio_tech],
+                     printf("voice_registration_details_3gpp: \ntech_domain=%d, radio_tech=%d, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, cid=0x%X, lac=%d, psc=%d, tac=%d\n", 
+                         reg.voice_registration_details_3gpp.tech_domain, 
+                         reg.voice_registration_details_3gpp.radio_tech,
                          reg.voice_registration_details_3gpp.mcc,
                          reg.voice_registration_details_3gpp.mnc,
                          reg.voice_registration_details_3gpp.roaming,
@@ -311,9 +159,9 @@
                  }
                  if(reg.data_registration_details_3gpp_valid)
                  {
-                     printf("data_registration_details_3gpp: \ntech_domain=%s, radio_tech=%s, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, cid=0x%X, lac=%d, psc=%d, tac=%d\n", 
-                         tech_domain[reg.data_registration_details_3gpp.tech_domain], 
-                         radio_tech[reg.data_registration_details_3gpp.radio_tech],
+                     printf("data_registration_details_3gpp: \ntech_domain=%d, radio_tech=%d, mcc=%s, mnc=%s, roaming=%d, forbidden=%d, cid=0x%X, lac=%d, psc=%d, tac=%d\n", 
+                         reg.data_registration_details_3gpp.tech_domain, 
+                         reg.data_registration_details_3gpp.radio_tech,
                          reg.data_registration_details_3gpp.mcc,
                          reg.data_registration_details_3gpp.mnc,
                          reg.data_registration_details_3gpp.roaming,
@@ -348,24 +196,49 @@
             }
         case 7:
             {
-            qser_nw_set_oos_config(NULL, NULL);
+            QSER_NW_OOS_CONFIG_INFO_T pt_info_s;
+            memset(&pt_info_s, 0x00, sizeof(QSER_NW_OOS_CONFIG_INFO_T));
+            /*取值范围0-255
+            phase 1   5次       次数无法更改,这五次都是以10秒为一次的间隔搜网
+            phase 2   5次      次数无法更改,这五次都是以15秒为一次的间隔搜网
+            phase 3   不限制次数的秒数设置,第三阶段不限制次数以20秒为一次的间隔搜网
+            如果要关闭OOS配置,则把min step max 全部配置为0即可
+            */
+            pt_info_s.type = QSER_NW_OOS_CFG_TYPE_FULL_BAND_SCAN;
+            //if (pt_info.type == QSER_NW_OOS_CFG_TYPE_FULL_BAND_SCAN)
+            {
+                pt_info_s.u.full_band_scan_info.t_min = 10;
+                pt_info_s.u.full_band_scan_info.t_step = 15;
+                pt_info_s.u.full_band_scan_info.t_num = 0;//可以不配置,并没有使用
+                pt_info_s.u.full_band_scan_info.t_max = 20;
+            }
+            printf("set OOS %d %d %d \n",pt_info_s.u.full_band_scan_info.t_min, pt_info_s.u.full_band_scan_info.t_step, pt_info_s.u.full_band_scan_info.t_max);
+            qser_nw_set_oos_config(handle, &pt_info_s);
             break;
             }
         case 8:
             {
-            qser_nw_get_oos_config(NULL, NULL);
+            QSER_NW_OOS_CONFIG_INFO_T pt_info_g;
+            qser_nw_get_oos_config(handle, &pt_info_g);
+            if (pt_info_g.type == QSER_NW_OOS_CFG_TYPE_FULL_BAND_SCAN)
+                printf("TYPE: %d min: %d setp: %d max: %d\n", pt_info_g.type, pt_info_g.u.full_band_scan_info.t_min, pt_info_g.u.full_band_scan_info.t_step, pt_info_g.u.full_band_scan_info.t_max);
+            /*
+            else if (pt_info.type == QSER_NW_OOS_CFG_TYPE_FAST_SCAN)
+                printf("TYPE: %d enable: %d time_interval: %d\n", pt_info.type, pt_info.u.fast_can_info.enable, pt_info.u.fast_can_info.enable, pt_info.u.fast_can_info.time_interval);
+            */
+            else
+                printf("type not supported \n");
             break;
             }
         case 9:
             {
-            printf("please input 0 or 1: \n");
+            printf("please input 0 or 1 or 4: \n");
+            memset(operator,0x00, sizeof(operator));
             fgets(operator, sizeof(operator), stdin);
             fflush(stdin);
             opt = atoi(operator);
-            if (opt == 0 || opt == 1)
-                qser_nw_set_rf_mode(handle, opt);
-            else
-                printf(">>>Please re-enter\n");
+            printf("opt: [%d]\n",opt);
+            qser_nw_set_rf_mode(handle, opt);
             break;
             }
         case 10:
diff --git a/mbtk/test/asr1806/lynq_sleep_test.c b/mbtk/test/asr1806/lynq_sleep_test.c
index c390fe1..d88a65b 100755
--- a/mbtk/test/asr1806/lynq_sleep_test.c
+++ b/mbtk/test/asr1806/lynq_sleep_test.c
@@ -32,8 +32,8 @@
             "\t5 wakelock destroy\n"
             "\t6 whitelist set\n"
             "\t7 whitelist get\n"
-            "\t6 lpm init\n"
-            "\t7 lpm destroy\n"
+            "\t8 lpm init\n"
+            "\t9 lpm destroy\n"
             "operator: >> \n");
 
         fgets(operator, sizeof(operator), stdin);
@@ -57,47 +57,63 @@
                 qser_autosuspend_enable(en);
             }
             else
-                printf(">>>>>Input 0 or 1 error<<<<<\n");
+                printf(">>>>>re Input 0 or 1 error<<<<<\n");
             break;
             }
         case 2:
             {
+            printf(">>>>>Input name<<<<<\n");
             char *t_name = NULL;
-            char t_operator[128];
             int len_name;
-            memset(t_operator, 0x00, sizeof(t_operator));
-            fgets(t_operator, sizeof(t_operator), stdin);
+            memset(operator, 0x00, sizeof(operator));
+            fgets(operator, sizeof(operator), stdin);
             fflush(stdin);
-            len_name = strlen(t_operator);
-            strncpy(t_name, t_operator, len_name);
+            len_name = strlen(operator);
+            strncpy(t_name, operator, len_name);
 
-            fd_t = qser_wakelock_create(t_operator, len_name);
+            fd_t = qser_wakelock_create(t_name, len_name);
+            printf(">>>>>Output ID NUM =[%d]<<<<<\n",fd_t);
             break;
             }
         case 3:
+            printf(">>>>>Input ID NUM<<<<<\n");
+            fgets(operator, sizeof(operator), stdin);
+            fflush(stdin);
+            fd_t = atoi(operator);
             qser_wakelock_lock(fd_t);
             break;
         case 4:
+            printf(">>>>>Input ID NUM<<<<<\n");
+            memset(operator, 0x00, sizeof(operator));
+            fgets(operator, sizeof(operator), stdin);
+            fflush(stdin);
+            fd_t = atoi(operator);
             qser_wakelock_unlock(fd_t);
             break;
         case 5:
+            printf(">>>>>Input ID NUM<<<<<\n");
+            memset(operator, 0x00, sizeof(operator));
+            fgets(operator, sizeof(operator), stdin);
+            fflush(stdin);
+            fd_t = atoi(operator);
             qser_wakelock_destroy(fd_t);
             break;
         case 6:
             {
-            char* whitelish = NULL;
-            memset(operator, 0x00, sizeof(operator));
-            fgets(operator, sizeof(operator), stdin);
-            fflush(stdin);
-            strcpy(whitelish, operator);
+            printf(">>>>>Input whitelish NUM  4位(eg:1010) <<<<<\n");
+            char* whitelish = "1010";
+
+            printf(">>>server list = [%s]\n", whitelish);
             qser_whitelist_set(whitelish);
             }
             break;
         case 7:
             {
-            char* whitelish = NULL;
-            qser_whitelist_get(whitelish);
-            printf(">>>server list = %s\n", whitelish);
+            char whitelish_get[10]={0};
+            printf(">>>>>get\n");
+
+            qser_whitelist_get(whitelish_get);
+            printf(">>>server list = %s\n", whitelish_get);
             }
             break;
         case 8:
@@ -107,6 +123,7 @@
             qser_lpm_cfg->wakeupin.wakeupin_pin = 50;
             qser_lpm_cfg->wakeupin.wakeupin_edge = E_QL_LPM_FALLING;
             qser_lpm_init(qser_lpm_handler, qser_lpm_cfg);
+            free(qser_lpm_cfg);
             }
             break;
         case 9: