新增lcd偏移接口
authorp15692025051 <846603105@qq.com>
Mon, 28 Aug 2023 04:07:53 +0000 (12:07 +0800)
committerp15692025051 <846603105@qq.com>
Mon, 28 Aug 2023 04:07:53 +0000 (12:07 +0800)
22 files changed:
2.sdk/Helios_SDK/components/HX3918/hx3918_prox.c
2.sdk/Helios_SDK/peripheral/helios_lcd.h
2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/machine_lcd.c
2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modHsensor_HX3918.c
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/appFactoryMode.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/btn_device_ec800m.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/mgr.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/protocol.py
2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/images/DBG.7z
2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/images/firmware_base_release_pack.zip
2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/libraries/libHeliosAPI.lib
2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/libraries/ql_common_api.lib
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/appAlipay.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/appFactoryMode.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/btn_device_ec800m.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/main_init.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/mgr.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/protocol.py
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/DBG.7z
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base_release_pack.zip
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/libraries/libHeliosAPI.lib
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/libraries/ql_common_api.lib

index 5aa60c2..b2ed4c9 100644 (file)
@@ -406,12 +406,15 @@ bool hx3918_prox_reg_init(void)
  * hx3918 获取靠近感应的结果,结果=0, prox感应的结果为非佩戴, =1 佩戴
 * @param NULL
 */
+extern char is_open_sar ; //是否打开sar检测
 uint8_t hx3918_report_prox_status(void)
 {
     static int16_t lp_old[2] = {0};
     static int16_t bl_old[2] = {0};
     static uint8_t cap_wear_flag = 0;
     uint8_t ret = 0; 
+    if(is_open_sar == 0)
+        return 1;
     lp[0] = hx3918_read_diff_lp(LP0);
     bl[0] = hx3918_read_raw_bl(BL0);
 
index 5bf43bc..c7803c2 100644 (file)
@@ -138,6 +138,7 @@ typedef struct
  
  int Helios_LCD_Display_on();
  
+ int Helios_LCD_Set_Offset(int offset_x, int offset_y);
  int Helios_LCD_Display_off();
  
  int Helios_LCD_WriteCmd(uint64_t cmd, uint32_t data_len);
index dd5f26e..30f6602 100644 (file)
@@ -244,6 +244,23 @@ STATIC mp_obj_t machine_lcd_write_data(size_t n_args, const mp_obj_t *args)
 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(machine_lcd_write_data_obj, 3, 3, machine_lcd_write_data);
 
 
+#if defined(PLAT_ASR_1606)
+STATIC mp_obj_t machine_lcd_set_offset(mp_obj_t self_in,const mp_obj_t obj_offset_x, const mp_obj_t obj_offset_y)
+{
+       int ret = 0;
+       int offset_x = mp_obj_get_int(obj_offset_x);
+       int offset_y = mp_obj_get_int(obj_offset_y);
+
+    ret = Helios_LCD_Set_Offset(offset_x, offset_y);
+       if (ret != 0)
+       {
+               printf("offset out of range offset_x = %d, offset_y = %d\n",offset_x, offset_y);
+       }
+       return mp_obj_new_int(ret);
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_3(machine_lcd_set_offset_obj, machine_lcd_set_offset);
+#endif
+
 STATIC mp_obj_t machine_lcd_init_helper(machine_lcd_obj_t *self, mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args)
 {
        enum
@@ -1140,6 +1157,9 @@ STATIC const mp_rom_map_elem_t lcd_locals_dict_table[] = {
        {MP_ROM_QSTR(MP_QSTR_lcd_level_brightness), MP_ROM_PTR(&machine_lcd_level_brightness_obj)},
 #endif
        {MP_ROM_QSTR(MP_QSTR_lcd_write), MP_ROM_PTR(&machine_lcd_write_obj)},
+#if defined(PLAT_ASR_1606)
+       {MP_ROM_QSTR(MP_QSTR_lcd_set_offset), MP_ROM_PTR(&machine_lcd_set_offset_obj)},
+#endif 
        {MP_ROM_QSTR(MP_QSTR_lcd_display_on), MP_ROM_PTR(&machine_lcd_display_on_obj)},
        {MP_ROM_QSTR(MP_QSTR_lcd_display_off), MP_ROM_PTR(&machine_lcd_display_off_obj)},
        {MP_ROM_QSTR(MP_QSTR_lcd_write_cmd), MP_ROM_PTR(&machine_lcd_write_cmd_obj)},
index fa51fd3..0b9b16c 100644 (file)
@@ -84,7 +84,7 @@ extern unsigned char Gsensor_init_flag ;
 #endif
 int ir_wear = 0;//红外佩戴状态
 int cap_wear = 1;//电容佩戴状态
-
+char is_open_sar = 0;//是否打开sar检测
 int wear_time = 0;
 // int test_count1 = 0;
 // int test_count2 = 0;
@@ -153,7 +153,7 @@ void HX3918_thread_do(void)
                        
                        //hx3918_prox_factory_hanging_cali();
                        ir_wear = hx3918_get_wear_ppg_Int_handle();
-                       //cap_wear = hx3918_report_prox_status();
+                       cap_wear = hx3918_report_prox_status();
                        
                        HX3918_LOG("ir_wear:%d cap_wear%d\n",ir_wear,cap_wear);
                        if(ir_wear == 1 && cap_wear==1)
@@ -303,22 +303,22 @@ mp_obj_t mp_HX3918_init(mp_obj_t self_in)
        gpio_struct.dir = HELIOS_GPIO_INPUT;
        gpio_struct.pull = HELIOS_PULL_NONE;
        gpio_struct.value = HELIOS_LVL_LOW;
-       Helios_GPIO_Init(self->irq, &gpio_struct);//IRQ
-
-       Helios_ExtInt_Deinit(self->irq);//关闭中断
-       Helios_ExtIntStruct extint_struct1 = {0};
-       // Helios_TriggerMode gpio_trigger;     //GPIO interrupt trigger mode  (0-EDGE_TRIGGER  1-LEVEL_TRIGGER)
-       // Helios_DebounceMode gpio_debounce;   //GPIO interrupt trigger debounce enable/disable  (0-disable  1-enable)
-       // Helios_EdgeMode gpio_edge;                   //GPIO interrupt edge/level trigger configure  (0-EDGE_RISING 1-EDGE_FALLING 2-EDGE_BOTH)
-       // Helios_PullMode gpio_pull;                   //GPIO get input pull (0-PULL_NONE 1-PULL_UP 2-PULL_DOWN)
-       // void *eint_cb;                                               //GPIO interrupt cb
-       // void *wakeup_eint_cb;                                //GPIO interrupt cb_ctx
-       extint_struct1.gpio_trigger = HELIOS_EDGE_TRIGGER;
-       extint_struct1.gpio_edge = HELIOS_EDGE_RISING;
-       extint_struct1.gpio_debounce = HELIOS_DEBOUNCE_EN;
-       extint_struct1.gpio_pull = HELIOS_PULL_NONE;
-       extint_struct1.eint_cb = HX3918_irq_cb;
-       extint_struct1.wakeup_eint_cb = NULL;
+       // Helios_GPIO_Init(self->irq, &gpio_struct);//IRQ
+
+       // Helios_ExtInt_Deinit(self->irq);//关闭中断
+       // Helios_ExtIntStruct extint_struct1 = {0};
+       // // Helios_TriggerMode gpio_trigger;  //GPIO interrupt trigger mode  (0-EDGE_TRIGGER  1-LEVEL_TRIGGER)
+       // // Helios_DebounceMode gpio_debounce;        //GPIO interrupt trigger debounce enable/disable  (0-disable  1-enable)
+       // // Helios_EdgeMode gpio_edge;                        //GPIO interrupt edge/level trigger configure  (0-EDGE_RISING 1-EDGE_FALLING 2-EDGE_BOTH)
+       // // Helios_PullMode gpio_pull;                        //GPIO get input pull (0-PULL_NONE 1-PULL_UP 2-PULL_DOWN)
+       // // void *eint_cb;                                            //GPIO interrupt cb
+       // // void *wakeup_eint_cb;                             //GPIO interrupt cb_ctx
+       // extint_struct1.gpio_trigger = HELIOS_EDGE_TRIGGER;
+       // extint_struct1.gpio_edge = HELIOS_EDGE_RISING;
+       // extint_struct1.gpio_debounce = HELIOS_DEBOUNCE_EN;
+       // extint_struct1.gpio_pull = HELIOS_PULL_NONE;
+       // extint_struct1.eint_cb = HX3918_irq_cb;
+       // extint_struct1.wakeup_eint_cb = NULL;
        
        
        Helios_I2C_Init((Helios_I2CEnum)self->i2c_no, HELIOS_FAST_MODE);
@@ -350,8 +350,8 @@ mp_obj_t mp_HX3918_init(mp_obj_t self_in)
        {
                HX3918_LOG("mp_HX3918_init: OK\r\n");
                is_HX3918 = 1;
-               Helios_ExtInt_Init(self->irq,  &extint_struct1);//初始化中断
-               Helios_ExtInt_Enable(self->irq);//打开中断
+               // Helios_ExtInt_Init(self->irq,  &extint_struct1);//初始化中断
+               // Helios_ExtInt_Enable(self->irq);//打开中断
                hx3918_init(WEAR_MODE);//打开佩戴检测
                #if CONFIG_SC7A20
                if(Gsensor_init_flag == 0)//初始化Gsensor
@@ -367,8 +367,8 @@ STATIC mp_obj_t mp_HX3918_deinit(mp_obj_t self_in)
     HX3918_obj_t *self = MP_OBJ_TO_PTR(self_in);
 
        HX3918_close();
-       Helios_GPIO_Deinit((Helios_GPIONum)self->irq);
-       Helios_ExtInt_Deinit(self->irq);
+       // Helios_GPIO_Deinit((Helios_GPIONum)self->irq);
+       // Helios_ExtInt_Deinit(self->irq);
        // Helios_I2C_Deinit((Helios_I2CEnum) self->i2c_no);
        Helios_GPIO_SetLevel(self->power, HELIOS_LVL_LOW);
 
@@ -436,7 +436,13 @@ STATIC mp_obj_t mp_HX3918_open_test(mp_obj_t self_in,mp_obj_t val1)
        HX3918_run_mode = mp_obj_get_int(val1);
     return mp_obj_new_int(1);
 }
-
+//设置是否打开sar模式
+STATIC mp_obj_t mp_HX3918_set_sar(mp_obj_t self_in,mp_obj_t val1)
+{
+       HX3918_obj_t *self = MP_OBJ_TO_PTR(self_in);
+       is_open_sar = mp_obj_get_int(val1);
+    return mp_obj_new_int(1);
+}
 void HX3918_close(void)
 {
        if(is_open_HX3918 == 1)
@@ -459,10 +465,10 @@ void HX3918_close(void)
                }
        }
        is_open_HX3918 = 0;
-       Helios_GPIO_SetLevel(g_HX3918->power, HELIOS_LVL_LOW);
-       Helios_msleep(15);
-       Helios_GPIO_SetLevel(g_HX3918->power, HELIOS_LVL_HIGH);
-       Helios_msleep(20);
+       // Helios_GPIO_SetLevel(g_HX3918->power, HELIOS_LVL_LOW);
+       // Helios_msleep(15);
+       // Helios_GPIO_SetLevel(g_HX3918->power, HELIOS_LVL_HIGH);
+       // Helios_msleep(20);
        hx3918_init(WEAR_MODE);//打开佩戴检测
 
 }
@@ -565,6 +571,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_HX3918_get_all_data_obj, mp_HX3918_get_all_d
 STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_HX3918_close_obj, mp_HX3918_close);//
 STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_HX3918_set_sleep_obj, mp_HX3918_set_sleep);//
 STATIC MP_DEFINE_CONST_FUN_OBJ_2(mp_HX3918_open_test_obj, mp_HX3918_open_test);
+STATIC MP_DEFINE_CONST_FUN_OBJ_2(mp_HX3918_set_sar_obj, mp_HX3918_set_sar);
 STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_HX3918_get_test_data_obj, mp_HX3918_get_test_data);//
 
 STATIC const mp_rom_map_elem_t HX3918_locals_dict_table[] = {
@@ -583,6 +590,7 @@ STATIC const mp_rom_map_elem_t HX3918_locals_dict_table[] = {
        { MP_ROM_QSTR(MP_QSTR_close), MP_ROM_PTR(&mp_HX3918_close_obj)},
        { MP_ROM_QSTR(MP_QSTR_set_sleep), MP_ROM_PTR(&mp_HX3918_set_sleep_obj)},
        { MP_ROM_QSTR(MP_QSTR_open_test), MP_ROM_PTR(&mp_HX3918_open_test_obj)},
+       { MP_ROM_QSTR(MP_QSTR_set_sar), MP_ROM_PTR(&mp_HX3918_set_sar_obj)},
        { MP_ROM_QSTR(MP_QSTR_get_test_data), MP_ROM_PTR(&mp_HX3918_get_test_data_obj)},
 };
 
index a476ee8..a584793 100644 (file)
@@ -140,24 +140,25 @@ FactoryModeLocation_screen.center()
 FactoryModeLocation_screen.set_size(128, 128)
 FactoryModeLocation_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
 
-FactoryModeLocation_WIFI_label = lv.label(FactoryModeLocation_screen)
-FactoryModeLocation_WIFI_label.set_text("WIFI:")
-FactoryModeLocation_WIFI_label.set_size(128, 100)
-FactoryModeLocation_WIFI_label.set_pos(0, 5)
-FactoryModeLocation_WIFI_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
-FactoryModeLocation_WIFI_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-FactoryModeLocation_CALL_label = lv.label(FactoryModeLocation_screen)
-FactoryModeLocation_CALL_label.set_text("CALL:")
-FactoryModeLocation_CALL_label.set_size(128, 100)
-FactoryModeLocation_CALL_label.set_pos(0, 110)
-FactoryModeLocation_CALL_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
-FactoryModeLocation_CALL_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# FactoryModeLocation_WIFI_label = lv.label(FactoryModeLocation_screen)
+# FactoryModeLocation_WIFI_label.set_text("WIFI:")
+# FactoryModeLocation_WIFI_label.set_size(240, 120)
+# FactoryModeLocation_WIFI_label.set_pos(0, 0)
+# FactoryModeLocation_WIFI_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+# FactoryModeLocation_WIFI_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# FactoryModeLocation_CALL_label = lv.label(FactoryModeLocation_screen)
+# FactoryModeLocation_CALL_label.set_text("CALL:")
+# FactoryModeLocation_CALL_label.set_size(240, 100)
+# FactoryModeLocation_CALL_label.set_pos(0, 120)
+# FactoryModeLocation_CALL_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+# FactoryModeLocation_CALL_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 FactoryModeLocation_GNSS_label = lv.label(FactoryModeLocation_screen)
 FactoryModeLocation_GNSS_label.set_text("GNSS:\n")
-FactoryModeLocation_GNSS_label.set_size(128, 100)
-FactoryModeLocation_GNSS_label.set_pos(0, 215)
+FactoryModeLocation_GNSS_label.set_size(128, lv.SIZE.CONTENT)
+FactoryModeLocation_GNSS_label.set_pos(0, 0)
+FactoryModeLocation_GNSS_label.set_long_mode(lv.label.LONG.WRAP)
 FactoryModeLocation_GNSS_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
 FactoryModeLocation_GNSS_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
@@ -168,16 +169,21 @@ class FactoryModeLocationScreen(Screen):
         self.meta = FactoryModeLocation_screen
         EventMesh.subscribe("PUSH_LOCATION_DATA",self.GET_LOCATION_DATA)
         self.timer_FactoryModeLocation = osTimer()
+        self.time_count = 0
+        self.time_GNSS = 0
+        self.GNSS_status = 0
 
     def initialization(self):
         FactoryModeLocation_GNSS_label.set_text("GNSS:\n") 
-        FactoryModeLocation_WIFI_label.set_text("WIFI:")
-        FactoryModeLocation_CALL_label.set_text("CALL:")
+        # FactoryModeLocation_WIFI_label.set_text("WIFI:")
+        # FactoryModeLocation_CALL_label.set_text("CALL:")
         self.timer_FactoryModeLocation.start(1000, 1, self.timer_FactoryModeLocation_cb)
-
+        self.time_count = utime.mktime(utime.localtime())
+        self.time_GNSS = 0
+        self.GNSS_status = 0
     def post_processor_after_initialization(self):
         #utime.sleep_ms(1000)
-         EventMesh.publish(constants.EVENT.START_LOCATION_TEST) #测试模式
+        EventMesh.publish(constants.EVENT.START_LOCATION_TEST) #测试模式
 
     def timer_FactoryModeLocation_cb(self, *args, **kwargs):
         EventMesh.publish("system_sleep_rest")#防止黑屏    
@@ -187,53 +193,70 @@ class FactoryModeLocationScreen(Screen):
         print("WIFI:{}".format(msg[1]))
         print("CALL:{}".format(msg[2]))
         EventMesh.publish("system_sleep_rest")#防止黑屏
+        _DATA = ""
+        time_tmp = utime.mktime(utime.localtime())
+         
+        
+        if len(msg[0]) > 1 : #GPS
+            GNSS_DATA = "GNSS:------\n"
+            
+            _DATA += "定位时间:{};{}秒\n".format(self.time_GNSS,time_tmp-self.time_count)   
+            rmc_data = msg[0][1].split("RMC")
+            gsv_data = msg[0][1].split("GSV")
+            if len(rmc_data) >= 2 :
+                rmc_data = rmc_data[1:]
+                rmc_tmp = rmc_data[0].split(",")
+                if len(rmc_tmp) >= 2:
+                    GNSS_DATA = GNSS_DATA + "{},{},{}\n".format(rmc_tmp[2],rmc_tmp[3],rmc_tmp[5])
+                    if rmc_tmp[2] == 'A':
+                        if self.GNSS_status == 0:
+                            self.time_GNSS =  time_tmp-self.time_count
+                        self.GNSS_status = 1
+                    else:
+                        self.GNSS_status = 0
+                        self.time_GNSS = 0
+                        
+            if len(gsv_data) >= 2 :  
+                gsv_data = gsv_data[1:]
+                GSV_dict= {}
+                for i in range(len(gsv_data)) :
+                    gsv_data[i] = gsv_data[i].split("\r\n")[0]
+                    gsv_tmp = gsv_data[i].split(",")
+                    if len(gsv_tmp) < 7 :
+                        break
+                    gsv_tmp = gsv_tmp[4:]
+                    #print("gsv_tmp:{}".format(gsv_tmp))
+                    for i in range(len(gsv_tmp)) :
+                        if i % 4 == 0:
+                            GSV_dict[gsv_tmp[i]] = gsv_tmp[i+3]
+                            print("GSV_dict:{}:[{}]".format(gsv_tmp[i],gsv_tmp[i+3]))
+                        if len(gsv_tmp)-i < 4:
+                            break 
+                count = 0
+                for key in GSV_dict :
+                    #print("GSV_dict[key]:len:{}".format(len(GSV_dict[key])))
+                    if len(GSV_dict[key]) >= 1 :
+                        GNSS_DATA+=" {:<3}:[{:<3}] \n".format(key,GSV_dict[key])#:<3 宽度为3左对齐
+                        count+=1
+                    if count > 14:
+                        break
+            print("GxGSV:{}".format(GNSS_DATA))
+            _DATA += GNSS_DATA
+            #FactoryModeLocation_GNSS_label.set_text(GNSS_DATA) 
         if msg[1] != [] : #WIFI
             WIFI_len = len(msg[1][1])
-            WIFI_DATA = "WIFI:"
+            _DATA += "WIFI:------\n"
             if WIFI_len > 3:
                 WIFI_len = 3
             for i in range(WIFI_len) :
-                WIFI_DATA += "{}".format(msg[1][1][i])
-            FactoryModeLocation_WIFI_label.set_text(WIFI_DATA)
-        
-        if len(msg[0]) > 1 : #GPS
-            GNSS_DATA = "GNSS:\n"
-
-            gsv_data = msg[0][1].split("GSV")
-            if len(gsv_data) < 2 :
-                return
-            gsv_data = gsv_data[1:]
-            
-            GSV_dict= {}
-            for i in range(len(gsv_data)) :
-                gsv_data[i] = gsv_data[i].split("\r\n")[0]
-                gsv_tmp = gsv_data[i].split(",")
-                if len(gsv_tmp) < 7 :
-                    break
-                gsv_tmp = gsv_tmp[4:]
-                #print("gsv_tmp:{}".format(gsv_tmp))
-                for i in range(len(gsv_tmp)) :
-                    if i % 4 == 0:
-                        GSV_dict[gsv_tmp[i]] = gsv_tmp[i+3]
-                        #print("GSV_dict:{}:[{}]".format(gsv_tmp[i],gsv_tmp[i+3]))
-                    if len(gsv_tmp)-i < 4:
-                        break 
-            count = 0
-            for key in GSV_dict :
-                print("GSV_dict[key]:len".format(len(GSV_dict[key])))
-                if len(GSV_dict[key]) >= 1 :
-                    GNSS_DATA+=" {:<3}:[{:<3}] ".format(key,GSV_dict[key])#:<3 宽度为3左对齐
-                    count+=1
-                if count%2 == 0:
-                    GNSS_DATA+="\n"
-                if count > 14:
-                    break
-            print("GxGSV:{}".format(GNSS_DATA))
-            FactoryModeLocation_GNSS_label.set_text(GNSS_DATA)  
+                _DATA += "{}".format(msg[1][1][i]) 
         if msg[2] != [] :#基站
             #print("CALL data:".format(msg[2][0]))
             if len(msg[2]) >= 2 :
-                FactoryModeLocation_CALL_label.set_text("CALL:{}".format(msg[2][0]))      
+                _DATA += "CALL:------\n{}".format(msg[2][0])
+                #FactoryModeLocation_CALL_label.set_text("CALL:{}".format(msg[2][0]))
+        print("GET_LOCATION_DATA:data:{}".format(_DATA))  
+        FactoryModeLocation_GNSS_label.set_text(_DATA)    
     def Close(self):
         EventMesh.publish(constants.EVENT.CLOSE_LOCATION) 
         self.timer_FactoryModeLocation.stop()
index c8872b2..2602b4f 100644 (file)
@@ -109,28 +109,8 @@ class BtnDevice(Abstract):
         self.powerKey_status = status
         if self.pwk_press == 1: #按按钮时不处理
             return
-        if status == 1:#拔出
-            print("USB OUT")
-            screen_NAME = EventMesh.publish("get_screen_NAME")
-            if screen_NAME != None:
-                if screen_NAME == "poweron" or screen_NAME == "system_init":
-                    return
-            
-            bat_tmp = EventMesh.publish("screen_get_battery")
-            if bat_tmp !=  None:
-                if bat_tmp[0] == "1":
-                    EventMesh.publish("load_screen", {"screen": "charge_in"})
-            pass
-        elif status == 0:#插入usb
-            print("USB IN")
-            screen_NAME = EventMesh.publish("get_screen_NAME")
-            if screen_NAME != None:
-                if screen_NAME == "poweron" or screen_NAME == "system_init":
-                    return
-            bat_tmp = EventMesh.publish("screen_get_battery")
-            if bat_tmp !=  None:
-                if bat_tmp[0] == "0":
-                    EventMesh.publish("load_screen", {"screen": "charge_out"})
+        
+
     
 
     def start(self):
index abf3840..77278b7 100644 (file)
@@ -18,6 +18,7 @@ from location import GPS, GPSMatch,CellLocator
 from misc import USB, Power, ADC
 from machine import ExtInt, Pin,Timer,RTC,UART
 import EventMesh
+import usys
 import audio
 from machine import I2C
 from Gsensor import SC7A20
@@ -676,7 +677,7 @@ class DeviceInfoManager(Abstract):
         self.no_smi_state = 0
 
         self.charge_full_count = 0
-
+        self.GPS_step_t = 0#记录步数
         self.usb = USB()
         self.usb.setCallback(self.usb_event_cb)
         self.log = LogAdapter(self.__class__.__name__)
@@ -700,11 +701,13 @@ class DeviceInfoManager(Abstract):
     def post_processor_after_instantiation(self):
         print("post_processor_after_instantiation:1")
         """订阅此类所有的事件到 EventMesh中"""
+        voiceCall.setCallback(voice_callback)
         EventMesh.subscribe("screen_get_ope", self.get_device_ope)
         EventMesh.subscribe("screen_get_sig", self.get_signal)
         EventMesh.subscribe("screen_get_time", self.get_time)
         EventMesh.subscribe("about_get_imei", self.get_imei)
         EventMesh.subscribe("about_get_iccid", self.get_ic_cid)
+        EventMesh.subscribe("get_sim_Status", self.get_sim_Status)
         EventMesh.subscribe("about_get_phonenum", self.get_phone_num)
         EventMesh.subscribe("screen_get_battery", self.get_battery)
         EventMesh.subscribe("set_curr_battery_level", self.set_curr_battery_level)
@@ -765,6 +768,7 @@ class DeviceInfoManager(Abstract):
                     data["func"](data["data"])
                 except Exception as e:
                     print("DeviceInfo_queue_thread:ERROR:{}".format(e))
+                    usys.print_exception(e)
 
 
     def gsensor_cb(self, para):
@@ -788,7 +792,7 @@ class DeviceInfoManager(Abstract):
         EventMesh.publish("publish_message_event_DeviceInfo",{"func":self.publish_event,"data":0})  
     def publish_event(self,data):
         """
-        主动推送事件
+        定时事件处理
         :param args:
         :param kwargs:
         :return:
@@ -807,24 +811,31 @@ class DeviceInfoManager(Abstract):
         time_tmp = utime.mktime(date_tmp)
         # print("date_tmp......01....{} time_tmp:{}\r\n".format(date_tmp,time_tmp))
         EventMesh.publish("countdown_end_cb")
+        """定时检查是否关闭gps失败"""
         gnss_state = quecgnss.get_state()
         get_location_flag = EventMesh.publish("get_location_flag")
         if get_location_flag != None:
             if gnss_state == 2 and get_location_flag == 0:
                 EventMesh.publish(constants.EVENT.GPSCLOSE)
 
+        """7分钟一次心跳"""
         if  math.fabs(time_tmp - self.KA_time) > 7*60: #7分钟一次心跳
             self.KA_time = time_tmp
             EventMesh.publish(constants.PROTOCOL.KA_SEND)
+
+        """定时定位"""
         self.upload_time = EventMesh.publish("get_upload_data")
         #print("self.upload_time:{} math.fabs(time_tmp - self.UD_time):{}".format(self.upload_time,math.fabs(time_tmp - self.UD_time)))
         if self.upload_time != None:
             if  math.fabs(time_tmp - self.UD_time) > self.upload_time: #30分钟一次定位
                 self.UD_time = time_tmp
-                if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:
+                step_tmp = self.gsensor.get_step()
+                if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1 and step_tmp != self.GPS_step_t :
                     EventMesh.publish(constants.EVENT.START_LOCATION,constants.PROTOCOL.UD_SEND) #开始UD定位
+                    self.GPS_step_t = step_tmp#记录步数
         EventMesh.publish(constants.EVENT.PUSH_STEP, self.get_step_count())
 
+        """电池平均值"""
         temp = Power.getVbatt()
         
         if self.bat_count < 10:
@@ -855,14 +866,12 @@ class DeviceInfoManager(Abstract):
                 if bat_value <= 0:
                     EventMesh.publish("load_screen", {"screen": "LOW_ONE_POWER"})
         
-        self.get_hr_state = EventMesh.publish("get_hr_state")
-        self.get_spo2_state = EventMesh.publish("get_spo2_state")
         
+        """"隔天清步数"""
         hour = 0
         min = 0
         hour = date_tmp[3]
         min = date_tmp[4]
-
         old_Timesec = EventMesh.publish("get_old_time_data")
         if old_Timesec != None:
             data = RTC().datetime()
@@ -910,7 +919,7 @@ class DeviceInfoManager(Abstract):
             if self.clear_step == 1:
                 self.clear_step = 0
         
-        #电量小于20% 5分钟提醒一次
+        """电量小于20% 5分钟提醒一次"""
         get_low_btn = EventMesh.publish("get_low_bat_btn")#
         battery = EventMesh.publish("screen_get_battery")
         # print("get_low_btn:{} self.bat_time:{}".format(get_low_btn,self.bat_time))
@@ -926,7 +935,29 @@ class DeviceInfoManager(Abstract):
             else:
                 self.bat_time = 0
         
-        #消息已满
+        """未联网提示关机"""
+        if EventMesh.publish(constants.EVENT.GET_CONNECT) == 0:#未联网提示关机
+            if battery[0] == "0":
+                self.no_smi_count+=10
+                if self.no_smi_count > (15*60) and self.no_smi_state == 0:
+                    self.no_smi_count = 0
+                    self.no_smi_state = 1
+                    EventMesh.publish("load_screen", {"screen": "no_sim_auto_screen"})  
+            else:
+                self.no_smi_count = 0
+                self.no_smi_state = 0
+        else:
+            self.no_smi_count = 0
+            self.no_smi_state = 0
+        if battery[0] == "1":
+            if battery[1] >= 100:
+                if self.charge_full_count > 60 and self.charge_full_count % (60*10) == 0:#每十分钟提醒一次
+                    EventMesh.publish("load_screen", {"screen": "charge_full"})  
+                self.charge_full_count+=10
+        else:
+            self.charge_full_count = 0
+
+        """检测短信已满,提示是否清掉"""
         msg_nums = sms.getMsgNums() #获取短信条数
         if(msg_nums != -1):
             sms_data = sms.getSaveLoc()
@@ -939,7 +970,10 @@ class DeviceInfoManager(Abstract):
             else:
                 self.sms_full_flag = 0
 
+        """定时测量心率,血氧,体温"""
         WEAR = EventMesh.publish(constants.EVENT.GET_WEAR)#佩戴数据
+        self.get_hr_state = EventMesh.publish("get_hr_state")
+        self.get_spo2_state = EventMesh.publish("get_spo2_state")
         get_temp_time  = EventMesh.publish("get_temp_time")
         get_temp_state  = EventMesh.publish("get_temp_state")
         hr_time = {}
@@ -1407,32 +1441,12 @@ class DeviceInfoManager(Abstract):
             self.old_time = 0    
             self.set_hsenor_crt = 0
 
-        voiceCall.setCallback(voice_callback)
-        if EventMesh.publish(constants.EVENT.GET_CONNECT) == 0:#未插卡提示关机
-            if battery[0] == "0":
-                self.no_smi_count+=10
-                if self.no_smi_count > (15*60) and self.no_smi_state == 0:
-                    self.no_smi_count = 0
-                    self.no_smi_state = 1
-                    EventMesh.publish("load_screen", {"screen": "no_sim_auto_screen"})  
-            else:
-                self.no_smi_count = 0
-                self.no_smi_state = 0
-        else:
-            self.no_smi_count = 0
-            self.no_smi_state = 0
-        if battery[0] == "1":
-            if battery[1] >= 100:
-                if self.charge_full_count > 60 and self.charge_full_count % (60*10) == 0:#每十分钟提醒一次
-                    EventMesh.publish("load_screen", {"screen": "charge_full"})  
-                self.charge_full_count+=10
-        else:
-            self.charge_full_count = 0
+        
         #quecgnss.gnssEnable(0)  
     
       
-    
-
+    def get_sim_Status(self, event, msg):
+        return sim.getStatus()
     def get_device_ope(self, event, msg):
         """
         获取设备运营商信息
@@ -1706,7 +1720,27 @@ class DeviceInfoManager(Abstract):
             return sim.switchCard(slot)
 
     def usb_event_cb(self, state):
-        EventMesh.publish("battery", self.get_battery())
+        status = state
+        if status == 1:#拔出
+            screen_NAME = EventMesh.publish("get_screen_NAME")
+            if screen_NAME != None:
+                if screen_NAME == "poweron" or screen_NAME == "system_init":
+                    return
+            bat_tmp = EventMesh.publish("screen_get_battery")
+            if bat_tmp !=  None:
+                if bat_tmp[0] == "1":
+                    EventMesh.publish("load_screen", {"screen": "charge_in"})
+            pass
+        elif status == 0:#插入usb
+            screen_NAME = EventMesh.publish("get_screen_NAME")
+            if screen_NAME != None:
+                if screen_NAME == "poweron" or screen_NAME == "system_init":
+                    return
+            bat_tmp = EventMesh.publish("screen_get_battery")
+            if bat_tmp !=  None:
+                if bat_tmp[0] == "0":
+                    EventMesh.publish("load_screen", {"screen": "charge_out"})
+        #EventMesh.publish("battery", self.get_battery())
 
     def get_usb_state(self):
         state = self.usb.getStatus()
@@ -1935,8 +1969,8 @@ class LocationManager(Abstract):
 
 
     def location_thread(self):
-        data = ""
         
+        gnss_r_data = ""
         while True:
             try :
                 if self.location_flag == 1 :
@@ -1945,47 +1979,54 @@ class LocationManager(Abstract):
                         self.wifi_data = []
                         self.gps_data = []
                         self.cell_data = []
+                        gnss_r_data = ""
+                        print("location_thread:1")
                         EventMesh.publish(constants.EVENT.GPSOPEN)
+                        print("location_thread:2")
                         EventMesh.publish(constants.EVENT.WIFISCANOPEN)
+                        print("location_thread:3")
+                        utime.sleep_ms(1000)
+                        quecgnss.read(4096)#去掉第一次错误数据
                     match_gga_data = []
                     match_gsv_data = []
 
-                    if self.location_check_data_timer_count > 3 :#5秒查一次
+                    #检查GNSS数据
+                    if (self.gps_data == [] or self.location_type == 1) and quecgnss.get_state() == 2:
+                        self.gps.__gps_nmea_data_clean()
+                        gnss_r_data = quecgnss.read(4096)
+                        #print("location gnss_r_data:{}".format(gnss_r_data[1].decode()))
+                        if gnss_r_data[0] > 0 : #有数据
+                            match_gga_data = self.match.GxGGA(gnss_r_data[1]).split(",")
+                            match_gsv_data = self.match.GxGSV(gnss_r_data[1]).split(",")
+                            if self.gps.__check_gps_valid(gnss_r_data[1].decode()): #数据齐全
+                                match_gmc_data = self.match.GxRMC(gnss_r_data[1]).split(",")
+                                match_vtg_data = self.match.GxVTG(gnss_r_data[1]).split(",")
+                                match_gga_data = self.match.GxGGA(gnss_r_data[1]).split(",")
+                                gps_data_tmp = self.gps.read_coordinates(gnss_r_data[1])
+                                latitude_tmp = str(gps_data_tmp[1]).split(".")
+                                if len(latitude_tmp) >= 2 and len(latitude_tmp[1])>=5:
+                                    latitude = "%s.%s"%(latitude_tmp[0],latitude_tmp[1][:6])
+                                latitude = "%s,%s"%(latitude,match_gmc_data[4] )
+                                longitude_tmp = str(gps_data_tmp[0]).split(".")
+                                if len(longitude_tmp) >= 2 and len(longitude_tmp[1])>=5:
+                                    longitude = "%s.%s"%(longitude_tmp[0],longitude_tmp[1][:6])
+                                longitude = "%s,%s"%(longitude,match_gmc_data[6] ) #match_gmc_data[6] + str(gnss_r_data[1])
+                                high = str(gps_data_tmp[2])
+                                self.gps_data = {
+                                    "latitude": latitude,
+                                    "longitude": longitude,
+                                    "high": high,
+                                    "direction": match_vtg_data[1],
+                                    "speed": match_vtg_data[5],
+                                    "number": match_gga_data[7],   
+                                }
+                    if self.location_check_data_timer_count > 5 :#5秒查一次基站数据和wifi数据
                         self.location_check_data_timer_count = 0
                         #print(self.location_timer_count)
                         #检查wifi数据
                         if self.wifi_data == [] or (self.wifi_data != [] and self.wifi_data[0] == 0):#and self.wifi_data[0] <= 0:
                             EventMesh.publish(constants.EVENT.WIFISCANOPEN)
-                        #检查GNSS数据
-                        if (self.gps_data == [] or self.location_type == 1) and quecgnss.get_state() == 2:
-                            self.gps.__gps_nmea_data_clean()
-                            data = quecgnss.read(4096)
-                            #print(data[1].decode())
-                            if data[0] > 0 : #有数据
-                                match_gga_data = self.match.GxGGA(data[1]).split(",")
-                                match_gsv_data = self.match.GxGSV(data[1]).split(",")
-                                if self.gps.__check_gps_valid(data[1].decode()): #数据齐全
-                                    match_gmc_data = self.match.GxRMC(data[1]).split(",")
-                                    match_vtg_data = self.match.GxVTG(data[1]).split(",")
-                                    match_gga_data = self.match.GxGGA(data[1]).split(",")
-                                    gps_data_tmp = self.gps.read_coordinates(data[1])
-                                    latitude_tmp = str(gps_data_tmp[1]).split(".")
-                                    if len(latitude_tmp) >= 2 and len(latitude_tmp[1])>=5:
-                                        latitude = "%s.%s"%(latitude_tmp[0],latitude_tmp[1][:6])
-                                    latitude = "%s,%s"%(latitude,match_gmc_data[4] )
-                                    longitude_tmp = str(gps_data_tmp[0]).split(".")
-                                    if len(longitude_tmp) >= 2 and len(longitude_tmp[1])>=5:
-                                        longitude = "%s.%s"%(longitude_tmp[0],longitude_tmp[1][:6])
-                                    longitude = "%s,%s"%(longitude,match_gmc_data[6] ) #match_gmc_data[6] + str(data[1])
-                                    high = str(gps_data_tmp[2])
-                                    self.gps_data = {
-                                        "latitude": latitude,
-                                        "longitude": longitude,
-                                        "high": high,
-                                        "direction": match_vtg_data[1],
-                                        "speed": match_vtg_data[5],
-                                        "number": match_gga_data[7],   
-                                    }
+                        
                         #检查基站数据
                         if self.cell_data == []:   
                             data_tmp = net.getCellInfo()
@@ -1997,9 +2038,9 @@ class LocationManager(Abstract):
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
                         #break
                     if self.location_type == 1: #测试模式
-                        EventMesh.publish("PUSH_LOCATION_DATA", [data,self.wifi_data,self.cell_data]) 
+                        EventMesh.publish("PUSH_LOCATION_DATA", [gnss_r_data,self.wifi_data,self.cell_data]) 
                     elif self.location_type == 0: #正常模式     
-                        if self.gps_data  != [] or self.location_timer_count > 60: #or( self.wifi_data != [] and self.cell_data != []): 
+                        if self.gps_data  != [] or self.location_timer_count > 70: #or( self.wifi_data != [] and self.cell_data != []): 
                             self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                             EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
                             #break
@@ -2016,6 +2057,7 @@ class LocationManager(Abstract):
                 else :
                     utime.sleep_ms(2000)
             except Exception as e:
+                usys.print_exception(e)
                 utime.sleep_ms(1000)
                 print("location_thread:ERROR:{}\r\n{}".format(e,Exception))
                 print("self.gps_data{},self.wifi_data{},self.cell_data{}".format(self.gps_data,self.wifi_data,self.cell_data))
@@ -2832,9 +2874,10 @@ class testSmsSetIPManager(Abstract):#
         Power.powerRestart()
 
     def get_new_ip(self, event, msg):
-        
+        tmp_data = EventMesh.publish("get_storage_config","set_new_ip_addr")
         # return [self.newip,self.newcom,self.newmd5]
-        return [self.newip,self.newcom]
+        if(tmp_data != None):
+            return [self.newip,self.newcom]
 
 
     
\ No newline at end of file
index ac65269..b3a30d3 100644 (file)
@@ -19,8 +19,36 @@ import osTimer
 import machine
 
 import _thread
-#服务器选择1,防走丢,2大锤
-server_type = 1 
+import usys
+
+
+def server_init(server_type = None):
+    #服务器选择1,防走丢,2大锤,3三基同创
+    if server_type == None:
+        server_type = 1
+    #print("server_init:server_type:{}".format(server_type))
+    d_server_addr = "api.xcloudtech.com"
+    d_server_port = 9000
+    d_md5_key = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
+    d_PID = "SZKW"
+    if server_type == 1:
+        pass
+        # server_addr = "api.xcloudtech.com"
+        # server_port = 9000
+        # md5_key = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
+        # PID = "SZKW"
+    elif server_type == 2:
+        
+        d_server_addr = "8.134.110.49"
+        d_server_port = 30346
+        d_md5_key = "3JyCjsw4ryXKzjzudayY"
+        d_PID = "qAELPTKmFanR4RHe"
+    elif server_type == 3:
+        d_server_addr = "tcp.zhihuixuexiao.com"
+        d_server_port = 2346
+        d_md5_key = ""
+        d_PID = "3G"
+    return [d_server_addr,d_server_port,d_md5_key,d_PID]
 from queue import Queue
 def unicode_to_utf8(src):
     ref = 0xe08080
@@ -76,12 +104,6 @@ def UnicodeHexStr_To_Utf8Str(str):
         i+=1
     return result.decode('utf-8') #返回utf8的str
 class SockManager(Abstract):
-    #END = "]"
-  
-    # server_addr = "api.xcloudtech.com"
-    # server_port = 9000
-    # server_addr = "8.134.68.15"
-    # server_port = 30346
     def __init__(self):
         self.sock = None
         self.resolver = None
@@ -93,35 +115,18 @@ class SockManager(Abstract):
         self.reconnect_time = 1000
         self.reconnect_flag = 0
         self.connect_tmp = 0
-        # self.server_addr = "tcptest.tx.kidxin.com"
-        # self.server_port = 11500
+        server_data = server_init()
+        print("SockManager:server_data:{}".format(server_data))
+        self.server_addr = server_data[0]
+        self.server_port = server_data[1]
+        ip_infor = {}
+        ip_infor = EventMesh.publish("get_new_ip")
+        print("ip_infor1:{} \n\n\n".format(ip_infor))
         
-        # self.server_addr = "8.134.110.49"
-        # self.server_port = 30346
-        if server_type == 1:
-            self.server_addr = "api.xcloudtech.com"
-            self.server_port = 9000
-            ip_infor = {}
-            ip_infor = EventMesh.publish("get_new_ip")
-            print("ip_infor1:{} \n\n\n".format(ip_infor))
-            
-            if ip_infor != None:
-                self.server_addr = ip_infor[0]
-                self.server_port = ip_infor[1]
-            print("server_addr:{} server_port:{}".format(self.server_addr,self.server_port))
-        elif server_type == 2:
-            self.server_addr = "8.134.110.49"
-            self.server_port = 30346
-        else :
-            self.server_addr = "api.xcloudtech.com"
-            self.server_port = 9000
-            ip_infor = {}
-            ip_infor = EventMesh.publish("get_new_ip")
-            print("ip_infor:{} ".format(ip_infor))
-            if ip_infor != None:
-                self.server_addr = ip_infor[0]
-                self.server_port = ip_infor[1]
-            print("server_addr:{} server_port:{}".format(self.server_addr,self.server_port))
+        if ip_infor != None: #已经改过服务器
+            self.server_addr = ip_infor[0]
+            self.server_port = ip_infor[1]
+        print("server_addr:{} server_port:{}".format(self.server_addr,self.server_port))
         
         _thread.start_new_thread(self.connect, ())
         
@@ -158,7 +163,7 @@ class SockManager(Abstract):
             self.publish_timer.start(1000, 0, self.publish_timer_cb)
             
         except Exception as e:
-            print(e)
+            usys.print_exception(e)
             self.run_flag = False
         else:
             self.run_flag = True
@@ -202,7 +207,8 @@ class SockManager(Abstract):
                     except Exception as e:
                         self.reconnect()
                         self.socket_send_queue.put(data)#重新把数据加回队列
-                        print("socket_send_queue_thread1:ERROR:{}".format(e))
+                        print("socket_send_queue_thread1:ERROR:")
+                        usys.print_exception(e)
             elif socketsta < 4:#正在连接,等待连接成功重新发送
                 count = 0
                 while True:
@@ -216,7 +222,8 @@ class SockManager(Abstract):
                         except Exception as e:
                             self.reconnect()
                             self.socket_send_queue.put(data)#重新把数据加回队列
-                            print("socket_send_queue_thread2:ERROR:{}".format(e))
+                            print("socket_send_queue_thread2:ERROR:")
+                            usys.print_exception(e)
                         break
             else :#连接错误
                 print("socket_send_queue_thread:ERROR:reconnect")
@@ -233,7 +240,8 @@ class SockManager(Abstract):
             try:
                 self.socket_send_queue.put(msg)
             except Exception as e:   
-                print("self.socket_send_queue.put:ERROR:{}".format(e)) 
+                print("self.socket_send_queue.put:ERROR:")
+                usys.print_exception(e) 
                 # self.run_flag = False
 
     def recv(self):
@@ -249,8 +257,8 @@ class SockManager(Abstract):
    
                 data = data + r
                 print("TCP recv: data:len:{}".format(len(data)))
-                if server_type == 2:
-                    print("TCP recv: data:{}".format(data))
+                
+                print("TCP recv: data:{}".format(data))
                 if data[-1] != 0x5d and len(data)<20*1024: #']':
                     continue
                 self.connect_tmp = 1 #有数据,就认为是连接状态
@@ -266,7 +274,8 @@ class SockManager(Abstract):
                 
                 data = b''
             except Exception as e:
-                print("TCP:ERROR:recv:{}".format(e))
+                print("TCP:ERROR:recv:")
+                usys.print_exception(e)
                 self.run_flag = False
                 self.reconnect()
                 
@@ -332,12 +341,10 @@ class ProtoCol(Abstract):
         self.imsi = EventMesh.publish(constants.EVENT.GET_IMSI)
         self.key = EventMesh.publish(constants.EVENT.GET_KEY)
         self.HEADER = self.HEADER.format(self.TYPE)
-        if server_type == 1:
-            self.md5_key = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
-            self.PID = "SZKW"
-        elif server_type == 2:
-            self.md5_key = "3JyCjsw4ryXKzjzudayY"
-            self.PID = "qAELPTKmFanR4RHe"
+        server_data = server_init()
+        self.md5_key = server_data[2]
+        self.PID = server_data[3]
+        
         
         # ip_infor = {}
         # ip_infor = EventMesh.publish("get_new_ip")
@@ -389,7 +396,8 @@ class ProtoCol(Abstract):
     
     def pack_MD5_head(self,data):                                                                                                                 
         #key = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
-        
+        if(self.md5_key == ""):
+            return ""
         MD5_head = ""
         hash_obj = uhashlib.md5(data+self.md5_key)
         res = hash_obj.digest()
@@ -1029,7 +1037,7 @@ class DLT_ProtoCol(ProtoCol):
         @param msg: 接收到的下行数据
         """
         # print("DLT_ProtoCol RECV msg:")
-        reset_factory(1)
+        
 
 #定位频率
 class UPLOAD_ProtoCol(ProtoCol):
@@ -1110,17 +1118,15 @@ class MONITOR_ProtoCol(ProtoCol):
         @param msg: 接收到的下行数据
         """
         # b'[SZKW*867387060319166*000A*MONITOR]'
-        self.read_data = {}
-        self.read_data = EventMesh.publish("get_storage_data")
-        if self.read_data != {}:
-            b = str("center_dial") in self.read_data.keys()
-            if b == True:
-                contact = self.read_data["center_dial"]
-                if len(contact) > 0:
-                    print("MONITOR RECV msg:{} {}".format(contact,type(contact)))
-                    EventMesh.publish("save_phonename", contact)  
-                    EventMesh.publish("save_phonenum", contact)  
-                    voiceCall.callStart(contact)
+        read_data = EventMesh.publish("set_storage_config","center_dial")
+
+        if read_data != None: 
+            contact = read_data
+            if len(contact) > 0:
+                print("MONITOR RECV msg:{} {}".format(contact,type(contact)))
+                EventMesh.publish("save_phonename", contact)  
+                EventMesh.publish("save_phonenum", contact)  
+                voiceCall.callStart(contact)
         EventMesh.publish(constants.PROTOCOL.MONITOR_SEND)  
 
 #定时开关机
@@ -1225,16 +1231,54 @@ class LOWBAT_ProtoCol(ProtoCol):
         EventMesh.publish("set_low_bat_btn",on_bt)
         EventMesh.publish(constants.PROTOCOL.LOWBAT_SEND)  
 
-#KEYBRD
-class KEYBRD_ProtoCol(ProtoCol):
-    """低电提醒"""
-    TYPE = "WLKEY"
+# 低电提醒
+#[XT*334588000000156*0008*LOWBAT,1]
+class Time_ProtoCol(ProtoCol):
+    """设置系统时间"""
+    TYPE = "Time"
     def send(self, event, msg):
         # [XT*334588000000156*0006*LOWBAT]
+        send_data = self.PID+"*%s*0004*Time"%(self.imei)
+        MD5_SIGN = self.pack_MD5_head(send_data)
+        data = "[%s%s]"%(str(MD5_SIGN),send_data)
+        print("Time:data:%s"%(data))
+        # 通过socket发送到服务器端
+        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+    def recv(self, event, msg):
+        """
+        @param event:
+        @param msg: 接收到的下行数据
+        """
+        # rtc = RTC()
+        msg = msg[1:-1]
+        msg_tmp = msg.decode('ascii')
+        msg_data = msg_tmp.split(',')
+        
+        timeSecond = int(msg_data[1])
+        #print("type {} timeSecond {}".format((msg_data[1]),timeSecond))
+        next_alarm_time = utime.localtime(timeSecond)
+        print("next_alarm_time",next_alarm_time)
+        #print("local time",msg)
+       # machine.RTC().datetime((tm[0], tm[1], tm[2], tm[6], tm[3], tm[4], tm[5], 0))
+
+        machine.RTC().datetime((next_alarm_time[0],next_alarm_time[1],next_alarm_time[2],next_alarm_time[6],next_alarm_time[3],next_alarm_time[4],next_alarm_time[5],0))
+        #next_alarm_time = utime.localtime(old_Timesec)#年月日时分秒星期365中的第几天
+
+        #EventMesh.publish(constants.PROTOCOL.TIME_SEND)  
+
+
+#拒接模式来电
+class WLKEY_ProtoCol(ProtoCol):
+    """"""
+    TYPE = "WLKEY"
+    def send(self, event, msg):
+        # [XT*334588000000156*0005*WLKEY]
         send_data = self.PID+"*%s*0005*WLKEY"%(self.imei)
         MD5_SIGN = self.pack_MD5_head(send_data)
         data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        print("KEYBRD:data:%s"%(data))
+        # print("WLKEY:data:%s"%(data))
+        # print("WLKEY!!!!!!!!!!!!!")
         # 通过socket发送到服务器端
         EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
 
@@ -1244,19 +1288,20 @@ class KEYBRD_ProtoCol(ProtoCol):
         @param msg: 接收到的下行数据
         """
         # b'[SZKW*867387060319166*000A*KEYBRD]'
-       
+        # print("WLKEY!!!!!!!!!!!!!",msg)
         EventMesh.publish(constants.PROTOCOL.WLKEY_SEND)  
 
-#SILENCETIME2
+#免打扰
 class SILENCETIME2_ProtoCol(ProtoCol):
-    """低电提醒"""
+    """免打扰"""
     TYPE = "SILENCETIME2"
     def send(self, event, msg):
-        # [XT*334588000000156*0006*LOWBAT]
+        # [XT*334588000000156*0006*SILENCETIME2]
         send_data = self.PID+"*%s*000C*SILENCETIME2"%(self.imei)
         MD5_SIGN = self.pack_MD5_head(send_data)
         data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        print("KEYBRD:data:%s"%(data))
+        # print("KEYBRD:data:%s"%(data))
+        # print("SILENCETIME2!!!!!!!!!!!!!",msg)
         # 通过socket发送到服务器端
         EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
 
@@ -1266,19 +1311,20 @@ class SILENCETIME2_ProtoCol(ProtoCol):
         @param msg: 接收到的下行数据
         """
         # b'[SZKW*867387060319166*000A*KEYBRD]'
-       
+        # print("SILENCETIME2!!!!!!!!!!!!!",msg)
         EventMesh.publish(constants.PROTOCOL.SILENCETIME2_SEND)  
-# 低电提醒
-#[XT*334588000000156*0008*LOWBAT,1]
-class Time_ProtoCol(ProtoCol):
-    """设置系统时间"""
-    TYPE = "Time"
+
+#键盘开关
+class KEYBRD_ProtoCol(ProtoCol):
+    """免打扰"""
+    TYPE = "KEYBRD"
     def send(self, event, msg):
-        # [XT*334588000000156*0006*LOWBAT]
-        send_data = self.PID+"*%s*0004*Time"%(self.imei)
+        # [XT*334588000000156*0006*SILENCETIME2]
+        send_data = self.PID+"*%s*0006*KEYBRD"%(self.imei)
         MD5_SIGN = self.pack_MD5_head(send_data)
         data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        print("Time:data:%s"%(data))
+        # print("KEYBRD:data:%s"%(data))
+        # print("KEYBRD!!!!!!!!!!!!!",msg)
         # 通过socket发送到服务器端
         EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
 
@@ -1287,26 +1333,9 @@ class Time_ProtoCol(ProtoCol):
         @param event:
         @param msg: 接收到的下行数据
         """
-        # rtc = RTC()
-        msg = msg[1:-1]
-        msg_tmp = msg.decode('ascii')
-        msg_data = msg_tmp.split(',')
-        
-        timeSecond = int(msg_data[1])
-        #print("type {} timeSecond {}".format((msg_data[1]),timeSecond))
-        next_alarm_time = utime.localtime(timeSecond)
-        print("next_alarm_time",next_alarm_time)
-        #print("local time",msg)
-       # machine.RTC().datetime((tm[0], tm[1], tm[2], tm[6], tm[3], tm[4], tm[5], 0))
-
-        machine.RTC().datetime((next_alarm_time[0],next_alarm_time[1],next_alarm_time[2],next_alarm_time[6],next_alarm_time[3],next_alarm_time[4],next_alarm_time[5],0))
-        #next_alarm_time = utime.localtime(old_Timesec)#年月日时分秒星期365中的第几天
-
-        #EventMesh.publish(constants.PROTOCOL.TIME_SEND)  
-
-
-
-
+        # b'[SZKW*867387060319166*000A*KEYBRD]'
+        # print("KEYBRD!!!!!!!!!!!!!",msg)
+        EventMesh.publish(constants.PROTOCOL.KEYBRD_SEND)  
 
 class ProtoColResolver(object):
     def __init__(self):
@@ -1338,5 +1367,6 @@ class ProtoColResolver(object):
                 # print("ProtoColResolver:ProtoCol_type:%s\r\ndata:%s"%(ProtoCol_type,data))
                 EventMesh.publish(ProtoCol_type, data) #返回协议read
         except Exception as e:
-            print("handler:ERROR:{}".format(e))
+            print("handler:ERROR:")
+            usys.print_exception(e)
             print("handler:error data:{}".format(len(data)))
index d2aed60..4f60e7d 100644 (file)
Binary files a/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/images/DBG.7z and b/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/images/DBG.7z differ
index 8e33eab..9863808 100644 (file)
Binary files a/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/images/firmware_base_release_pack.zip and b/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/images/firmware_base_release_pack.zip differ
index 1c39992..6a66077 100644 (file)
Binary files a/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/libraries/libHeliosAPI.lib and b/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/libraries/libHeliosAPI.lib differ
index 56a7438..39add78 100644 (file)
Binary files a/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/libraries/ql_common_api.lib and b/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/libraries/ql_common_api.lib differ
index b9d2662..3ef0cd5 100644 (file)
@@ -115,7 +115,7 @@ class Alipay(Abstract):
             if id2_st[0] == 1:
                 self.is_init = self.alipay.pay_init(90000, 90000,\
                                                     2000, 2000, \
-                                                    200, 40*1024, \
+                                                    100, 40*1024, \
                                                     self.upay_display_notify_cb, 0) 
                 #alipay.pay_init(90000, 90000,2000, 2000,200, 40*1024,upay_display_notify_cb, 0)                                    
                 
@@ -135,6 +135,7 @@ class Alipay(Abstract):
         userdata = arg[4]
         if EventMesh.publish("get_Alipay_Ui_isOpen") == 0:
             return
+        EventMesh.publish("system_sleep_rest")#防止黑屏
         print("upay_display_notify_cb:\r\ncmd:{}\r\nrsp_code:{}".format(cmd,rsp_code))
 
         if rsp_code == 4 :
@@ -655,14 +656,19 @@ class Alipay_inviting(Screen):
     def __init__(self):
         super().__init__()
         self.meta = alipay_inviting_screen
-        
+        self.timer_alipay_inviting = osTimer()
+
     def initialization(self):
         EventMesh.publish("set_Alipay_Ui_isOpen",1)
-   
+        self.timer_alipay_inviting.start(1000, 1, self.timeout_alipay_inviting)
     def post_processor_after_initialization(self):
         pass
-    
+
+    def timeout_alipay_inviting(self, *args):
+        EventMesh.publish("system_sleep_rest")#防止黑屏    
+
     def Close(self):
+        self.timer_alipay_inviting.stop()
         EventMesh.publish("set_Alipay_Ui_isOpen",0)
         pass
                 
index e74be1c..511b002 100644 (file)
@@ -187,6 +187,7 @@ class FactoryModeHsensorTestScreen(Screen):
         pass
 
     def HsensorCali_cb(self,e):
+        self.Hsensor.set_sar(1)
         self.Hsensor.open_test(255) #打开校准模式
         utime.sleep_ms(500)
         self.Hsensor.open_heart()
@@ -383,7 +384,7 @@ class FactoryModeLocationScreen(Screen):
         if len(msg[0]) > 1 : #GPS
             GNSS_DATA = "GNSS:------\n"
             
-            _DATA += "定位时间:{} {}秒\n".format(self.time_GNSS,time_tmp-self.time_count)   
+            _DATA += "定位时间:{};{}秒\n".format(self.time_GNSS,time_tmp-self.time_count)   
             rmc_data = msg[0][1].split("RMC")
             gsv_data = msg[0][1].split("GSV")
             if len(rmc_data) >= 2 :
@@ -395,6 +396,9 @@ class FactoryModeLocationScreen(Screen):
                         if self.GNSS_status == 0:
                             self.time_GNSS =  time_tmp-self.time_count
                         self.GNSS_status = 1
+                    else:
+                        self.GNSS_status = 0
+                        self.time_GNSS = 0
                         
             if len(gsv_data) >= 2 :  
                 gsv_data = gsv_data[1:]
index 5340f28..e8e398e 100644 (file)
@@ -120,25 +120,7 @@ class BtnDevice(Abstract):
         self.powerKey_status = status
         if self.pwk_press == 1: #按按钮时不处理
             return
-        if status == 1:#拔出
-            screen_NAME = EventMesh.publish("get_screen_NAME")
-            if screen_NAME != None:
-                if screen_NAME == "poweron" or screen_NAME == "system_init":
-                    return
-            bat_tmp = EventMesh.publish("screen_get_battery")
-            if bat_tmp !=  None:
-                if bat_tmp[0] == "1":
-                    EventMesh.publish("load_screen", {"screen": "charge_in"})
-            pass
-        elif status == 0:#插入usb
-            screen_NAME = EventMesh.publish("get_screen_NAME")
-            if screen_NAME != None:
-                if screen_NAME == "poweron" or screen_NAME == "system_init":
-                    return
-            bat_tmp = EventMesh.publish("screen_get_battery")
-            if bat_tmp !=  None:
-                if bat_tmp[0] == "0":
-                    EventMesh.publish("load_screen", {"screen": "charge_out"})
+        
 
     
 
index aeb9bfb..53af1bd 100644 (file)
@@ -216,7 +216,7 @@ def main_init():
         #print("init10:{}".format(utime.localtime()))
         
 
-        
+        EventMesh.publish("load_screen", {"screen": "poweron"})#开机画面
         app.append_manager(mgr.AlarmVolumeLevelManager()) \
             .append_manager(mgr.MsgVolumeLevelManager()) \
             .append_manager(mgr.PhoneVolumeLevelManager()) \
@@ -315,6 +315,6 @@ def main_init():
                 machine.RTC().datetime((next_alarm_time[0],next_alarm_time[1],next_alarm_time[2],next_alarm_time[6],next_alarm_time[3],next_alarm_time[4],next_alarm_time[5],0))
     except Exception as e:
         usys.print_exception(e)
-    EventMesh.publish("load_screen", {"screen": "poweron"})
+    
    
 
index e0459f1..7650f6f 100644 (file)
@@ -693,6 +693,7 @@ class DeviceInfoManager(Abstract):
         self.gsensor.set_callback(self.gsensor_cb)
         try :
             self.hsensor = HX3918()
+            
         except Exception as e:
             print("Hsensor none HX3918:{}".format(e))   
         try :
@@ -703,6 +704,10 @@ class DeviceInfoManager(Abstract):
         self.hsensor.activate()
         self.hsensor.init()
         self.hsensor.close()
+        try :
+            self.hsensor.set_sar(1)
+        except Exception as e:
+            print("Hsensor none set_sar:{}".format(e)) 
         self.old_temp_time = 0
         # #print("hsensor.open_heart:%d\r\n"%(self.hsensor.open_heart()))
         print("DeviceInfoManager:3")
@@ -1746,7 +1751,27 @@ class DeviceInfoManager(Abstract):
             return sim.switchCard(slot)
 
     def usb_event_cb(self, state):
-        EventMesh.publish("battery", self.get_battery())
+        status = state
+        if status == 1:#拔出
+            screen_NAME = EventMesh.publish("get_screen_NAME")
+            if screen_NAME != None:
+                if screen_NAME == "poweron" or screen_NAME == "system_init":
+                    return
+            bat_tmp = EventMesh.publish("screen_get_battery")
+            if bat_tmp !=  None:
+                if bat_tmp[0] == "1":
+                    EventMesh.publish("load_screen", {"screen": "charge_in"})
+            pass
+        elif status == 0:#插入usb
+            screen_NAME = EventMesh.publish("get_screen_NAME")
+            if screen_NAME != None:
+                if screen_NAME == "poweron" or screen_NAME == "system_init":
+                    return
+            bat_tmp = EventMesh.publish("screen_get_battery")
+            if bat_tmp !=  None:
+                if bat_tmp[0] == "0":
+                    EventMesh.publish("load_screen", {"screen": "charge_out"})
+        #EventMesh.publish("battery", self.get_battery())
 
     def get_usb_state(self):
         state = self.usb.getStatus()
@@ -1972,57 +1997,65 @@ class LocationManager(Abstract):
 
 
     def location_thread(self):
-        data = ""
         
+        gnss_r_data = ""
         while True:
-            try :
+            try :   
                 if self.location_flag == 1 :
+                    
                     if self.start_location_flag == 1 :
                         self.start_location_flag = 0
                         self.wifi_data = []
                         self.gps_data = []
                         self.cell_data = []
+                        gnss_r_data = ""
+                        print("location_thread:1")
                         EventMesh.publish(constants.EVENT.GPSOPEN)
+                        print("location_thread:2")
                         EventMesh.publish(constants.EVENT.WIFISCANOPEN)
+                        print("location_thread:3")
+                        utime.sleep_ms(1000)
+                        quecgnss.read(4096)#去掉第一次错误数据
                     match_gga_data = []
                     match_gsv_data = []
 
-                    if self.location_check_data_timer_count > 3 :#5秒查一次
+                    #检查GNSS数据
+                    if (self.gps_data == [] or self.location_type == 1) and quecgnss.get_state() == 2:
+                        self.gps.__gps_nmea_data_clean()
+                        gnss_r_data = quecgnss.read(4096)
+                        print("location gnss_r_data:{}".format(gnss_r_data[1].decode()))
+                        if gnss_r_data[0] > 0 : #有数据
+                            match_gga_data = self.match.GxGGA(gnss_r_data[1]).split(",")
+                            match_gsv_data = self.match.GxGSV(gnss_r_data[1]).split(",")
+                            if self.gps.__check_gps_valid(gnss_r_data[1].decode()): #数据齐全
+                                match_gmc_data = self.match.GxRMC(gnss_r_data[1]).split(",")
+                                match_vtg_data = self.match.GxVTG(gnss_r_data[1]).split(",")
+                                match_gga_data = self.match.GxGGA(gnss_r_data[1]).split(",")
+                                gps_data_tmp = self.gps.read_coordinates(gnss_r_data[1])
+                                latitude_tmp = str(gps_data_tmp[1]).split(".")
+                                if len(latitude_tmp) >= 2 and len(latitude_tmp[1])>=5:
+                                    latitude = "%s.%s"%(latitude_tmp[0],latitude_tmp[1][:6])
+                                latitude = "%s,%s"%(latitude,match_gmc_data[4] )
+                                longitude_tmp = str(gps_data_tmp[0]).split(".")
+                                if len(longitude_tmp) >= 2 and len(longitude_tmp[1])>=5:
+                                    longitude = "%s.%s"%(longitude_tmp[0],longitude_tmp[1][:6])
+                                longitude = "%s,%s"%(longitude,match_gmc_data[6] ) #match_gmc_data[6] + str(gnss_r_data[1])
+                                high = str(gps_data_tmp[2])
+                                self.gps_data = {
+                                    "latitude": latitude,
+                                    "longitude": longitude,
+                                    "high": high,
+                                    "direction": match_vtg_data[1],
+                                    "speed": match_vtg_data[5],
+                                    "number": match_gga_data[7],   
+                                }
+                    if self.location_check_data_timer_count > 5 :#5秒查一次基站数据和wifi数据
                         self.location_check_data_timer_count = 0
                         #print(self.location_timer_count)
                         #检查wifi数据
                         if self.wifi_data == [] or (self.wifi_data != [] and self.wifi_data[0] == 0):#and self.wifi_data[0] <= 0:
                             EventMesh.publish(constants.EVENT.WIFISCANOPEN)
-                        #检查GNSS数据
-                        if (self.gps_data == [] or self.location_type == 1) and quecgnss.get_state() == 2:
-                            self.gps.__gps_nmea_data_clean()
-                            data = quecgnss.read(4096)
-                            #print("location data:{}".format(data[1].decode()))
-                            if data[0] > 0 : #有数据
-                                match_gga_data = self.match.GxGGA(data[1]).split(",")
-                                match_gsv_data = self.match.GxGSV(data[1]).split(",")
-                                if self.gps.__check_gps_valid(data[1].decode()): #数据齐全
-                                    match_gmc_data = self.match.GxRMC(data[1]).split(",")
-                                    match_vtg_data = self.match.GxVTG(data[1]).split(",")
-                                    match_gga_data = self.match.GxGGA(data[1]).split(",")
-                                    gps_data_tmp = self.gps.read_coordinates(data[1])
-                                    latitude_tmp = str(gps_data_tmp[1]).split(".")
-                                    if len(latitude_tmp) >= 2 and len(latitude_tmp[1])>=5:
-                                        latitude = "%s.%s"%(latitude_tmp[0],latitude_tmp[1][:6])
-                                    latitude = "%s,%s"%(latitude,match_gmc_data[4] )
-                                    longitude_tmp = str(gps_data_tmp[0]).split(".")
-                                    if len(longitude_tmp) >= 2 and len(longitude_tmp[1])>=5:
-                                        longitude = "%s.%s"%(longitude_tmp[0],longitude_tmp[1][:6])
-                                    longitude = "%s,%s"%(longitude,match_gmc_data[6] ) #match_gmc_data[6] + str(data[1])
-                                    high = str(gps_data_tmp[2])
-                                    self.gps_data = {
-                                        "latitude": latitude,
-                                        "longitude": longitude,
-                                        "high": high,
-                                        "direction": match_vtg_data[1],
-                                        "speed": match_vtg_data[5],
-                                        "number": match_gga_data[7],   
-                                    }
+                        
                         #检查基站数据
                         if self.cell_data == []:   
                             data_tmp = net.getCellInfo()
@@ -2034,7 +2067,7 @@ class LocationManager(Abstract):
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
                         #break
                     if self.location_type == 1: #测试模式
-                        EventMesh.publish("PUSH_LOCATION_DATA", [data,self.wifi_data,self.cell_data]) 
+                        EventMesh.publish("PUSH_LOCATION_DATA", [gnss_r_data,self.wifi_data,self.cell_data]) 
                     elif self.location_type == 0: #正常模式     
                         if self.gps_data  != [] or self.location_timer_count > 70: #or( self.wifi_data != [] and self.cell_data != []): 
                             self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
@@ -2856,8 +2889,6 @@ class testSmsSetIPManager(Abstract):#
         #短信格式:SETIP:api.xcloudtech.com:9000:bZld0ALsZTt15tKEZhOlLPgbsO75BLTP 以冒号分隔 SETIP:ip地址:ip端口号:ip密钥key
 
         # self.read_data["set_new_md5"] = self.newmd5  #通过短信设置ip的key密钥
-       
-
         EventMesh.publish("set_storage_config",["set_new_ip_addr",self.newip])
         EventMesh.publish("set_storage_config",["set_new_com",self.newcom])
 
@@ -2869,9 +2900,10 @@ class testSmsSetIPManager(Abstract):#
         Power.powerRestart()
 
     def get_new_ip(self, event, msg):
-        
+        tmp_data = EventMesh.publish("get_storage_config","set_new_ip_addr")
         # return [self.newip,self.newcom,self.newmd5]
-        return [self.newip,self.newcom]
+        if(tmp_data != None):
+            return [self.newip,self.newcom]
 
 
     
\ No newline at end of file
index 85f106c..c8acbb0 100644 (file)
@@ -19,8 +19,36 @@ import osTimer
 import machine
 
 import _thread
-#服务器选择1,防走丢,2大锤
-server_type = 1 
+import usys
+
+
+def server_init(server_type = None):
+    #服务器选择1,防走丢,2大锤,3三基同创
+    if server_type == None:
+        server_type = 1
+    #print("server_init:server_type:{}".format(server_type))
+    d_server_addr = "api.xcloudtech.com"
+    d_server_port = 9000
+    d_md5_key = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
+    d_PID = "SZKW"
+    if server_type == 1:
+        pass
+        # server_addr = "api.xcloudtech.com"
+        # server_port = 9000
+        # md5_key = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
+        # PID = "SZKW"
+    elif server_type == 2:
+        
+        d_server_addr = "8.134.110.49"
+        d_server_port = 30346
+        d_md5_key = "3JyCjsw4ryXKzjzudayY"
+        d_PID = "qAELPTKmFanR4RHe"
+    elif server_type == 3:
+        d_server_addr = "tcp.zhihuixuexiao.com"
+        d_server_port = 2346
+        d_md5_key = ""
+        d_PID = "3G"
+    return [d_server_addr,d_server_port,d_md5_key,d_PID]
 from queue import Queue
 def unicode_to_utf8(src):
     ref = 0xe08080
@@ -76,12 +104,6 @@ def UnicodeHexStr_To_Utf8Str(str):
         i+=1
     return result.decode('utf-8') #返回utf8的str
 class SockManager(Abstract):
-    #END = "]"
-  
-    # server_addr = "api.xcloudtech.com"
-    # server_port = 9000
-    # server_addr = "8.134.68.15"
-    # server_port = 30346
     def __init__(self):
         self.sock = None
         self.resolver = None
@@ -93,35 +115,18 @@ class SockManager(Abstract):
         self.reconnect_time = 1000
         self.reconnect_flag = 0
         self.connect_tmp = 0
-        # self.server_addr = "tcptest.tx.kidxin.com"
-        # self.server_port = 11500
+        server_data = server_init()
+        print("SockManager:server_data:{}".format(server_data))
+        self.server_addr = server_data[0]
+        self.server_port = server_data[1]
+        ip_infor = {}
+        ip_infor = EventMesh.publish("get_new_ip")
+        print("ip_infor1:{} \n\n\n".format(ip_infor))
         
-        # self.server_addr = "8.134.110.49"
-        # self.server_port = 30346
-        if server_type == 1:
-            self.server_addr = "api.xcloudtech.com"
-            self.server_port = 9000
-            ip_infor = {}
-            ip_infor = EventMesh.publish("get_new_ip")
-            print("ip_infor1:{} \n\n\n".format(ip_infor))
-            
-            if ip_infor != None:
-                self.server_addr = ip_infor[0]
-                self.server_port = ip_infor[1]
-            print("server_addr:{} server_port:{}".format(self.server_addr,self.server_port))
-        elif server_type == 2:
-            self.server_addr = "8.134.110.49"
-            self.server_port = 30346
-        else :
-            self.server_addr = "api.xcloudtech.com"
-            self.server_port = 9000
-            ip_infor = {}
-            ip_infor = EventMesh.publish("get_new_ip")
-            print("ip_infor:{} ".format(ip_infor))
-            if ip_infor != None:
-                self.server_addr = ip_infor[0]
-                self.server_port = ip_infor[1]
-            print("server_addr:{} server_port:{}".format(self.server_addr,self.server_port))
+        if ip_infor != None: #已经改过服务器
+            self.server_addr = ip_infor[0]
+            self.server_port = ip_infor[1]
+        print("server_addr:{} server_port:{}".format(self.server_addr,self.server_port))
         
         _thread.start_new_thread(self.connect, ())
         
@@ -158,7 +163,7 @@ class SockManager(Abstract):
             self.publish_timer.start(1000, 0, self.publish_timer_cb)
             
         except Exception as e:
-            print(e)
+            usys.print_exception(e)
             self.run_flag = False
         else:
             self.run_flag = True
@@ -202,7 +207,8 @@ class SockManager(Abstract):
                     except Exception as e:
                         self.reconnect()
                         self.socket_send_queue.put(data)#重新把数据加回队列
-                        print("socket_send_queue_thread1:ERROR:{}".format(e))
+                        print("socket_send_queue_thread1:ERROR:")
+                        usys.print_exception(e)
             elif socketsta < 4:#正在连接,等待连接成功重新发送
                 count = 0
                 while True:
@@ -216,7 +222,8 @@ class SockManager(Abstract):
                         except Exception as e:
                             self.reconnect()
                             self.socket_send_queue.put(data)#重新把数据加回队列
-                            print("socket_send_queue_thread2:ERROR:{}".format(e))
+                            print("socket_send_queue_thread2:ERROR:")
+                            usys.print_exception(e)
                         break
             else :#连接错误
                 print("socket_send_queue_thread:ERROR:reconnect")
@@ -233,7 +240,8 @@ class SockManager(Abstract):
             try:
                 self.socket_send_queue.put(msg)
             except Exception as e:   
-                print("self.socket_send_queue.put:ERROR:{}".format(e)) 
+                print("self.socket_send_queue.put:ERROR:")
+                usys.print_exception(e) 
                 # self.run_flag = False
 
     def recv(self):
@@ -249,8 +257,8 @@ class SockManager(Abstract):
    
                 data = data + r
                 print("TCP recv: data:len:{}".format(len(data)))
-                if server_type == 2:
-                    print("TCP recv: data:{}".format(data))
+                
+                print("TCP recv: data:{}".format(data))
                 if data[-1] != 0x5d and len(data)<20*1024: #']':
                     continue
                 self.connect_tmp = 1 #有数据,就认为是连接状态
@@ -266,7 +274,8 @@ class SockManager(Abstract):
                 
                 data = b''
             except Exception as e:
-                print("TCP:ERROR:recv:{}".format(e))
+                print("TCP:ERROR:recv:")
+                usys.print_exception(e)
                 self.run_flag = False
                 self.reconnect()
                 
@@ -332,12 +341,10 @@ class ProtoCol(Abstract):
         self.imsi = EventMesh.publish(constants.EVENT.GET_IMSI)
         self.key = EventMesh.publish(constants.EVENT.GET_KEY)
         self.HEADER = self.HEADER.format(self.TYPE)
-        if server_type == 1:
-            self.md5_key = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
-            self.PID = "SZKW"
-        elif server_type == 2:
-            self.md5_key = "3JyCjsw4ryXKzjzudayY"
-            self.PID = "qAELPTKmFanR4RHe"
+        server_data = server_init()
+        self.md5_key = server_data[2]
+        self.PID = server_data[3]
+        
         
         # ip_infor = {}
         # ip_infor = EventMesh.publish("get_new_ip")
@@ -389,7 +396,8 @@ class ProtoCol(Abstract):
     
     def pack_MD5_head(self,data):                                                                                                                 
         #key = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
-        
+        if(self.md5_key == ""):
+            return ""
         MD5_head = ""
         hash_obj = uhashlib.md5(data+self.md5_key)
         res = hash_obj.digest()
@@ -469,15 +477,16 @@ class KA_ProtoCol(ProtoCol):
         old_step = 0
         step = 0
         step = EventMesh.publish("get_old_step_value")
-        if step != 0:
-            read_data = EventMesh.publish("get_storage_config","old_step_new")
-            if read_data != None:
-                old_step = read_data
-            
-            if old_step !=  step:
-                # print("old_step:send:%d %d"%(old_step,step))
-                EventMesh.publish("set_storage_config",["old_step_new",step+10])
-                EventMesh.publish("set_storage_config",["old_step_new",step])
+        if step != None:
+            if step != 0:
+                read_data = EventMesh.publish("get_storage_config","old_step_new")
+                if read_data != None:
+                    old_step = read_data
+                
+                if old_step !=  step:
+                    # print("old_step:send:%d %d"%(old_step,step))
+                    EventMesh.publish("set_storage_config",["old_step_new",step+10])
+                    EventMesh.publish("set_storage_config",["old_step_new",step])
 
         old_step = step
         # step = EventMesh.publish(constants.EVENT.GET_STEP)[0]
@@ -1358,5 +1367,6 @@ class ProtoColResolver(object):
                 # print("ProtoColResolver:ProtoCol_type:%s\r\ndata:%s"%(ProtoCol_type,data))
                 EventMesh.publish(ProtoCol_type, data) #返回协议read
         except Exception as e:
-            print("handler:ERROR:{}".format(e))
+            print("handler:ERROR:")
+            usys.print_exception(e)
             print("handler:error data:{}".format(len(data)))
index 9b1712e..e76358b 100644 (file)
Binary files a/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/DBG.7z and b/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/DBG.7z differ
index 60c26c0..b573d71 100644 (file)
Binary files a/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base_release_pack.zip and b/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base_release_pack.zip differ
index 1c4263b..52ae668 100644 (file)
Binary files a/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/libraries/libHeliosAPI.lib and b/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/libraries/libHeliosAPI.lib differ
index 2c7119b..466d7d7 100644 (file)
Binary files a/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/libraries/ql_common_api.lib and b/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/libraries/ql_common_api.lib differ