开启Cat1后5秒更新一次信号状态
authorSnickerSun <snickersun@163.com>
Tue, 7 May 2024 02:11:21 +0000 (10:11 +0800)
committerSnickerSun <snickersun@163.com>
Tue, 7 May 2024 02:11:21 +0000 (10:11 +0800)
升级py脚本V6支持连接网络种类反馈
添加cat1持续唤醒接口,保证下载时的速度

code/sdk/drivers/peripheral/slip/cat1Service/cat1_ctl.cpp
code/sdk/drivers/peripheral/slip/cat1Service/cat1_ctl.h
code/sdk/drivers/peripheral/slip/cat1Service/cat1_server.cpp
code/sdk/drivers/peripheral/slip/cat1Service/pyscript/cat1Service.py

index 24b0234..addab51 100644 (file)
@@ -107,11 +107,20 @@ void cat1_ring_isr_callback(pin_t pin, uintptr_t param)
     do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_ADD_CAT1VOTE,NULL,0);
 }
 
+static uint8_t cat1_keepon_wakeup = 0;
+void uapi_cat1_keep_wakeup(uint8_t keep_wakeup)
+{
+    cat1_keepon_wakeup = keep_wakeup;
+    uapi_cat1_wakeup_cat1(cat1_keepon_wakeup);
+}
 void uapi_cat1_wakeup_cat1(uint8_t wakeup)
 {
-
-
-    if( wakeup == 1)
+    uint8_t wake=wakeup;
+    if (cat1_keepon_wakeup == 1)
+    {
+        wake = 1;
+    }
+    if( wake == 1)
     {
         WEARABLE_LOGW(WEARABLE_LOG_MODULE_MAIN_SERVICE,"wakeup cat1\n");
         uapi_gpio_set_dir(S_AGPIO_L30, GPIO_DIRECTION_OUTPUT);
index fdba58e..f72fba7 100644 (file)
@@ -18,6 +18,7 @@ void uapi_cat1_stop_volte_voice(void);
 void uapi_cat1_remove_cat1_vote(void);\r
 void uapi_cat1_add_cat1_vote(void);\r
 void uapi_cat1_wakeup_cat1(uint8_t wakeup);\r
+void uapi_cat1_keep_wakeup(uint8_t keep_wakeup);\r
 bool uapi_cat1_get_power_stat(void);\r
 \r
 void uapi_cat1_suspend(void);\r
index 2457ecb..579783a 100644 (file)
@@ -108,6 +108,14 @@ static uint8_t g_time_synced = 0;
 #define MAX_TIME_SYNC_RETRY_TIME 5
 static uint8_t g_time_sync_retry_time = 0;
 
+
+#define  PY_SRV_VER_4 "PY_SRV_V4"
+#define  PY_SRV_VER_5 "PY_SRV_V5"
+#define  PY_SRV_VER_6 "PY_SRV_V6"
+
+static uint8_t g_py_ver = 4;
+
+
 static struct tcp_msg_t *unpack_tlv_format(char *rx_buffer, int length)
 {
     char temp[8]={0};
@@ -217,8 +225,9 @@ static int decodeVersion(char* msg)
     {
         p = MSG_SPLIT_CHAR2;
     }
-    char* s = NULL;
-    for (s = strtok(buf,p); s!=NULL;s=strtok(NULL,p))
+    char *pchStrTmpIn = nullptr;
+    char *s = nullptr;
+    for (s = strtok_r(buf,p,&pchStrTmpIn); s!=NULL;s=strtok_r(NULL,p,&pchStrTmpIn))
     {
         if((strncmp(s,"pyVer",5) == 0) && (strlen(s)> 5))
         {
@@ -230,6 +239,11 @@ static int decodeVersion(char* msg)
                 memset(runtime->cat1_runtime.pyVer,0,sizeof(runtime->cat1_runtime.pyVer));
                 strcpy_s(runtime->cat1_runtime.pyVer,sizeof(runtime->cat1_runtime.pyVer),ptmp);
             }
+            if (strncmp(ptmp,"PY_SRV_V",8)==0 && strlen(ptmp)>8)
+            {
+                int pyver = atoi(ptmp+8);
+                if ( pyver > 0 )    g_py_ver = pyver;
+            } 
 
         }else if ((strncmp(s,"modemVer",8) == 0) && (strlen(s)> 8))
         {
@@ -290,13 +304,22 @@ static int decodeNetStat(char* msg)
         return -2;
     }
     char* p = MSG_SPLIT_CHAR;
-    if (strstr(buf,MSG_SPLIT_CHAR2) != NULL)
+    switch(g_py_ver)
     {
-        p = MSG_SPLIT_CHAR2;
+        case 5:
+        case 6:
+            p = MSG_SPLIT_CHAR2;
+            break;
+        case 4:
+        default:
+            break;
     }
+    char netstat[20]="0,10,0,10";
+
+    char *pchStrTmpIn = NULL;
     char* s = NULL;
     char* ppbuf = NULL;
-    for (s = strtok(buf,p); s!=NULL;s=strtok(NULL,p))
+    for (s = strtok_r(buf,p,&pchStrTmpIn); s!=NULL;s=strtok_r(NULL,p,&pchStrTmpIn))
     {
         // PRINT("%s\r\n",s );
         if(strncmp(s,"imei:",5) == 0)
@@ -350,8 +373,49 @@ static int decodeNetStat(char* msg)
             }  
             continue;
         }  
+
+        if(g_py_ver == 6 && strncmp(s,"net:",4) == 0)
+        {
+            ppbuf = s+4;
+            /**
+             * 0,10,0,10  
+             * voice_stat 语音网络状态:1,注冊本地网络,5注册漫游网络,其他不通, 
+             * voice_rat, 语音网络类型: 0      GSM ;1        GSM COMPACT ;2        UTRAN ;3      GSM wEGPRS ; 4        UTRAN wHSDPA ;5       UTRAN wHSUPA ;
+             *              6  UTRAN wHSDPA HSUPA ;7 E_UTRAN ;8    UTRAN HSPAP ;9        E_UTRAN_CA ;10        NONE
+             * data_stat, 数据网络状态
+             * data_rat 数据网络类型
+             * 
+             */
+            memset(netstat,0,sizeof(netstat));
+            strcpy_s(netstat,sizeof(netstat),ppbuf);
+        }
         
     }
+
+
+    if(g_py_ver == 6 )
+    {
+        int idx=0;
+        pchStrTmpIn=NULL;
+        for (s = strtok_r(netstat,",",&pchStrTmpIn); s!=NULL;s=strtok_r(NULL,",",&pchStrTmpIn))
+        {
+            switch(idx)
+            {
+                case 2:
+                    runtime->cat1_runtime.network_on = atoi(s) ;
+                    break;
+                case 3:
+                    runtime->cat1_runtime.cat1_network_type  = atoi(s);
+                    break;
+                case 0:
+                case 1:
+                default:
+                    break;
+            }
+            idx++;
+        }
+    }
+
     if (update > 0)
         return 0;
     else 
@@ -552,21 +616,26 @@ static void time_sync_func(void)
 {
     
     PRINT("time_sync_func\n");
-    cat1_gettime();
+    cat1_getsignal();
     
     if(osTimerIsRunning(g_timer_time_sync)==1 && g_time_synced == 1 )
     {
-        osStatus_t ret = osTimerStop(g_timer_time_sync);
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1 g_time_synced == 1 stop timer  , ret %d\n",ret);
+        // osStatus_t ret = osTimerStop(g_timer_time_sync);
+        // WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1 g_time_synced == 1 stop timer  , ret %d\n",ret);
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1 g_time_synced == 1 stop timer \n");
+        return ;
     }else{
         g_time_sync_retry_time ++;
     }
     if( g_time_sync_retry_time >= MAX_TIME_SYNC_RETRY_TIME)
     {
-         osStatus_t ret = osTimerStop(g_timer_time_sync);
-         WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1 g_time_sync_retry_time >= %d stop timer ,ret %d\n",MAX_TIME_SYNC_RETRY_TIME,ret);
-
+        //  osStatus_t ret = osTimerStop(g_timer_time_sync);
+        //  WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1 g_time_sync_retry_time >= %d stop timer ,ret %d\n",MAX_TIME_SYNC_RETRY_TIME,ret);
+         WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1 g_time_sync_retry_time >= %d stop timer \n",MAX_TIME_SYNC_RETRY_TIME);
+        return ;
     }
+    cat1_gettime();
+
 }
 
 void restart_time_sync(void)
@@ -637,8 +706,8 @@ static int udp_packet_parse(char *rx_buffer, int len)
                 //"BOOTUP,pyVer,PY_SRV_V4,modemVer,EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_BETA0312"
                 if(strstr(msg->buffer,"BOOTUP")!=NULL)
                 {
-                    cat1_getsignal();
                     cat1_handle_version_msg(msg);
+                    cat1_getsignal();
                     restart_time_sync();
                 }
                
index 2016acf..4bd9cd6 100644 (file)
@@ -50,7 +50,7 @@ import request
 import ql_fs
 import pm
 PROJECT_NAME = "Cat1SlipUDPService"
-PROJECT_VERSION = "PY_SRV_V5"
+PROJECT_VERSION = "PY_SRV_V6"
 CONFIG_JSON="/usr/system_config.json"
 CURRENT_APP_TYPE="pysrv"
 
@@ -269,7 +269,11 @@ class Cat1Service:
             # UDP_CMD_GET_RECV_NETWORKSTAT
             simstat = sim.getStatus()
             imei = modem.getDevImei()
-            netstat = net.getSignal(1)
+            netstat = "0,10,0,10"
+            netstat_ = net.getState()
+            if netstat_ != -1 :
+                netstat = "{},{},{},{}".format(netstat_[0][0],netstat_[0][3],netstat_[1][0],netstat_[1][3])
+            # ([voice_state, voice_lac, voice_cid, voice_rat, voice_reject_cause, voice_psc], [data_state, data_lac, data_cid, data_rat, data_reject_cause, data_psc])
             operator =  net.operatorName()
             signal = net.csqQueryPoll()
             print("imei:{0},sim:{1},oper:{2},signal:{3},net:{4}".format(imei,simstat,operator,signal,netstat))