k5定位逻辑修改
authorp15692025051 <846603105@qq.com>
Thu, 31 Aug 2023 02:59:28 +0000 (10:59 +0800)
committerp15692025051 <846603105@qq.com>
Thu, 31 Aug 2023 02:59:28 +0000 (10:59 +0800)
12 files changed:
2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modGsensor_SC7A20.c
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/EventMesh.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/appFactoryMode.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/services/microPython/ports/quectel/core/sleep_test.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/ui.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 fca09ba..84c6c0b 100644 (file)
@@ -285,6 +285,7 @@ unsigned int SC7A20_XYZ_Buf_tmp_len =0;
 unsigned char Gsensor_init_flag = 0;
 float x,y,z;
 bool SC7A20_INT_STATUS = true;
+unsigned int SC7A20_STATUS_COUNT = 0;
 unsigned int  SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_L_ALGO(void)
 {
 #if SL_Sensor_Algo_Release_Enable==0x00
@@ -300,6 +301,8 @@ unsigned int  SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_L_ALGO(void)
 
     /*******read int status******/
        SC7A20_INT_STATUS=SL_INT_STATUS_READ();
+       if(SC7A20_INT_STATUS==1)
+               SC7A20_STATUS_COUNT++;
        if((SC7A20_INT_STATUS==1)||(SL_STEP_TEMP!= SL_STEP))
        {
                if(SL_INT_TIME_CNT>=SL_INT_TIME_TH)  SC7A20_ODR_SET(1);
@@ -690,13 +693,17 @@ STATIC mp_obj_t mp_SC7A20_poll(mp_obj_t self_in)
     return mp_const_none;
 }
 
-//获取运动状态
+//获取运动状态次数
 STATIC mp_obj_t mp_SC7A20_get_status(mp_obj_t self_in)
 {
-       if(SC7A20_INT_STATUS)
-       return mp_obj_new_int(1);
-       else
-               return mp_obj_new_int(0);
+
+    return mp_obj_new_int(SC7A20_STATUS_COUNT);
+}
+//清除运动状态次数
+STATIC mp_obj_t mp_SC7A20_clean_status(mp_obj_t self_in)
+{
+       SC7A20_STATUS_COUNT = 0;
+    return mp_obj_new_int(1);
 }
 //获取步数
 STATIC mp_obj_t mp_SC7A20_get_step(mp_obj_t self_in)
@@ -734,6 +741,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_deinit_SC7A20_obj, mp_SC7A20_deinit);//
 STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_activate_SC7A20_obj, mp_activate_SC7A20);//
 //STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_SC7A20_poll_obj, mp_SC7A20_poll);//
 STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_SC7A20_get_status_obj, mp_SC7A20_get_status);//
+STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_SC7A20_clean_status_obj, mp_SC7A20_clean_status);//
+
 STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_SC7A20_get_step_obj, mp_SC7A20_get_step);//
 STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_SC7A20_reset_step_obj, mp_SC7A20_reset_step);//
 STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_SC7A20_get_x_y_z_obj, mp_SC7A20_get_x_y_z);//
@@ -744,6 +753,8 @@ STATIC const mp_rom_map_elem_t SC7A20_locals_dict_table[] = {
     { MP_ROM_QSTR(MP_QSTR_activate), MP_ROM_PTR(&mp_activate_SC7A20_obj) },
        //{ MP_ROM_QSTR(MP_QSTR_poll), MP_ROM_PTR(&mp_SC7A20_poll_obj) },
        { MP_ROM_QSTR(MP_QSTR_get_status), MP_ROM_PTR(&mp_SC7A20_get_status_obj) },
+       { MP_ROM_QSTR(MP_QSTR_clean_status), MP_ROM_PTR(&mp_SC7A20_clean_status_obj) },
+       
        { MP_ROM_QSTR(MP_QSTR_get_step), MP_ROM_PTR(&mp_SC7A20_get_step_obj) },
        { MP_ROM_QSTR(MP_QSTR_reset_step), MP_ROM_PTR(&mp_SC7A20_reset_step_obj) }, 
        { MP_ROM_QSTR(MP_QSTR_get_x_y_z), MP_ROM_PTR(&mp_SC7A20_get_x_y_z_obj) },
index ff0911d..e53be13 100644 (file)
@@ -78,6 +78,14 @@ def set_log(log_adapter):
 
 def add_filter(flt):
     event_store.add_filter(flt)
+import utime
+Txt_Log = 0
+def txt_log(data):
+    if Txt_Log != 0 :
+        with open("/ext/log.txt","a",encoding="utf-8") as fd:
+            d_time = utime.localtime()
+            data_tmp = "{}-{} {}:{}:{} :".format(d_time[1],d_time[2],d_time[3],d_time[4],d_time[5])
+            fd.write(data_tmp+data+"\n")
 
 def callback_wrapper(callback):#按键回调
     def wrapped_callback(*args, **kwargs):
index 511b002..f097d1e 100644 (file)
@@ -11,6 +11,7 @@ from ui import style_screen,style_font_youyuan_20,style_btn,style_img,Screen,sty
 import audio
 import utime
 import ALIPAY
+import usys
 from misc import Power
 factorymode_cont_y = 0
 factorymode_screen = lv.obj()
@@ -95,6 +96,18 @@ factorymode_hsensor_test_label.set_style_text_color(lv.color_make(0xff, 0xff, 0x
 factorymode_hsensor_test_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 factorymode_hsensor_test.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
 
+factorymode_cont_y+=60
+factorymode_log = lv.btn(factorymode_cont)
+factorymode_log.set_pos(0, factorymode_cont_y)
+factorymode_log.set_size(240, 60)
+factorymode_log_label = lv.label(factorymode_log)
+factorymode_log_label.set_text("日志")
+factorymode_log.set_style_pad_all(0, lv.STATE.DEFAULT)
+factorymode_log_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+factorymode_log_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+factorymode_log_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+factorymode_log.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+
 factorymode_cont_y+=200
 factorymode_alipay_init = lv.btn(factorymode_cont)
 factorymode_alipay_init.set_pos(0, factorymode_cont_y)
@@ -117,7 +130,7 @@ class FactoryModeScreen(Screen):
         factorymode_alipay_init.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "FactoryModeAlipayInit"})), lv.EVENT.CLICKED, None)
         factorymode_bat_test.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "FactoryModeBatTest"})), lv.EVENT.CLICKED, None)
         factorymode_hsensor_test.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "FactoryModeHsensorTest"})), lv.EVENT.CLICKED, None)
-
+        factorymode_log.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "FactoryModeLog"})), lv.EVENT.CLICKED, None)
     def done_return(self):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
 
@@ -127,6 +140,110 @@ class FactoryModeScreen(Screen):
     def btn8_press(self):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
 
+#显示txt日志
+FactoryModeLog_screen = lv.obj()
+FactoryModeLog_screen.center()
+FactoryModeLog_screen.set_size(240, 320)
+FactoryModeLog_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+FactoryModeLog_label_obj = lv.obj(FactoryModeLog_screen)
+FactoryModeLog_label_obj.center()
+FactoryModeLog_label_obj.set_size(240, 290)
+FactoryModeLog_label_obj.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+FactoryModeLog_label_obj.set_pos(0, 0)
+
+FactoryModeLog_label = lv.label(FactoryModeLog_label_obj)
+FactoryModeLog_label.set_text("")
+FactoryModeLog_label.set_size(240, lv.SIZE.CONTENT)
+FactoryModeLog_label.set_pos(0, 0)
+FactoryModeLog_label.set_long_mode(lv.label.LONG.WRAP)
+FactoryModeLog_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+FactoryModeLog_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+FactoryModeLogClean_btn = lv.btn(FactoryModeLog_screen)
+FactoryModeLogClean_btn.set_pos(5, 290)
+FactoryModeLogClean_btn.set_size(110, 30)
+FactoryModeLogClean_btn.add_style(style_btn_1, lv.PART.MAIN | lv.STATE.DEFAULT)
+FactoryModeLogClean_btn.set_style_pad_all(0, lv.STATE.DEFAULT)
+FactoryModeLogClean_label = lv.label(FactoryModeLogClean_btn)
+FactoryModeLogClean_label.set_text("清空日志")
+FactoryModeLogClean_label.align(lv.ALIGN.CENTER, 0, 0)
+FactoryModeLogClean_label.add_style(style_font_W_B_28, lv.PART.MAIN | lv.STATE.DEFAULT)
+FactoryModeLogClean_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+FactoryModeLogClean_label.set_style_text_color(lv.color_make(0x16, 0x2c, 0xd4), lv.STATE.DEFAULT)
+#FactoryModeLogClean_label.set_style_bg_color(lv.color_make(0x00, 0xff, 0x2a), lv.PART.MAIN | lv.STATE.DEFAULT)
+
+FactoryModeLogNext_btn = lv.btn(FactoryModeLog_screen)
+FactoryModeLogNext_btn.set_pos(120, 290)
+FactoryModeLogNext_btn.set_size(110, 30)
+FactoryModeLogNext_btn.add_style(style_btn_1, lv.PART.MAIN | lv.STATE.DEFAULT)
+FactoryModeLogNext_btn.set_style_pad_all(0, lv.STATE.DEFAULT)
+FactoryModeLogNext_label = lv.label(FactoryModeLogNext_btn)
+FactoryModeLogNext_label.set_text("下一页")
+FactoryModeLogNext_label.align(lv.ALIGN.CENTER, 0, 0)
+FactoryModeLogNext_label.add_style(style_font_W_B_28, lv.PART.MAIN | lv.STATE.DEFAULT)
+FactoryModeLogNext_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+FactoryModeLogNext_label.set_style_text_color(lv.color_make(0x16, 0x2c, 0xd4), lv.STATE.DEFAULT)
+#FactoryModeLogNext_label.set_style_bg_color(lv.color_make(0x00, 0xff, 0x2a), lv.PART.MAIN | lv.STATE.DEFAULT)
+screen_log_len = 250
+class FactoryModeLogScreen(Screen):
+    NAME = "FactoryModeLog"
+    def __init__(self):
+        super().__init__()
+        self.meta = FactoryModeLog_screen
+        self.Log_timer_count = 0
+        self.Log_timer = osTimer()
+        self.log_data = ""
+        self.log_count = 0
+        FactoryModeLogClean_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.LogClean_cb(e)), lv.EVENT.CLICKED, None)
+        FactoryModeLogNext_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.LogNext_cb(e)), lv.EVENT.CLICKED, None)
+    def initialization(self):
+        print("FactoryModeLogScreen")
+        self.Log_timer.start(1000,1,self.Log_timer_cb) 
+        with open("/ext/log.txt","r",encoding="utf-8") as fd:
+            self.log_data = fd.read()
+            print(self.log_data)
+        if len(self.log_data) < screen_log_len:
+            FactoryModeLog_label.set_text("第1页\n"+self.log_data)
+        else:
+            FactoryModeLog_label.set_text("第1页 {}/{}\n".format(self.log_count+1,0,len(self.log_data))+self.log_data[:screen_log_len])
+        self.log_count = 0
+    def post_processor_after_initialization(self):
+        pass
+
+    def LogClean_cb(self,e):
+        self.log_data = ""
+        with open("/ext/log.txt","w",encoding="utf-8") as fd:
+            fd.write("")
+
+    def LogNext_cb(self,e):
+        self.log_count += 1
+        if self.log_count*screen_log_len > len(self.log_data):
+            if self.log_count != 1:
+                FactoryModeLog_label.set_text("末尾页\n".format(self.log_count+1)+self.log_data[(self.log_count-1)*screen_log_len:])
+            self.log_count = 0
+        else :
+            FactoryModeLog_label.set_text("第{}页 {}/{}\n".format(self.log_count+1,(self.log_count)*screen_log_len,len(self.log_data))+self.log_data[(self.log_count-1)*screen_log_len:(self.log_count)*screen_log_len])
+
+    def  Log_timer_cb(self,e):
+        EventMesh.publish("system_sleep_rest")#防止黑屏 
+ 
+
+    def Close(self):
+        self.Log_timer.stop()
+        self.log_data = ""
+        pass
+
+    def done_return(self):
+        EventMesh.publish("load_screen", {"screen": "factorymode"})
+
+    def btn1_release(self):
+        EventMesh.publish("load_screen", {"screen": "factorymode"})
+        
+    def btn8_press(self):
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+
 #hsensor测试
 FactoryModeHsensorTest_screen = lv.obj()
 FactoryModeHsensorTest_screen.center()
@@ -166,8 +283,6 @@ FactoryModeHsensorLeakLight_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
 FactoryModeHsensorLeakLight_label.set_style_text_color(lv.color_make(0x16, 0x2c, 0xd4), lv.STATE.DEFAULT)
 #FactoryModeHsensorLeakLight_label.set_style_bg_color(lv.color_make(0x00, 0xff, 0x2a), lv.PART.MAIN | lv.STATE.DEFAULT)
 
-
-
 class FactoryModeHsensorTestScreen(Screen):
     NAME = "FactoryModeHsensorTest"
     def __init__(self):
@@ -373,9 +488,9 @@ class FactoryModeLocationScreen(Screen):
         EventMesh.publish("system_sleep_rest")#防止黑屏    
 
     def GET_LOCATION_DATA(self, event, msg):
-        print("GPS:{}".format(msg[0]))
-        print("WIFI:{}".format(msg[1]))
-        print("CALL:{}".format(msg[2]))
+        # print("GPS:{}".format(msg[0]))
+        # print("WIFI:{}".format(msg[1]))
+        # print("CALL:{}".format(msg[2]))
         EventMesh.publish("system_sleep_rest")#防止黑屏
         _DATA = ""
         time_tmp = utime.mktime(utime.localtime())
@@ -413,23 +528,33 @@ class FactoryModeLocationScreen(Screen):
                     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]))
+                            #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))
+                try:
+                    for j in range(200):
+                        for key in GSV_dict :
+                            
+                            if(int(key) != j):
+                                continue
+                            #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 > 30:
+                            break
+                except Exception as e:
+                    usys.print_exception(e)
+            #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])
-            _DATA += "WIFI:------\n"
+            _DATA += "\nWIFI:------\n"
             if WIFI_len > 3:
                 WIFI_len = 3
             for i in range(WIFI_len) :
index 53af1bd..99eab48 100644 (file)
@@ -64,7 +64,7 @@ def main_init():
     from ui_main_menu import MainMenuScreen
     # from ui_WatchFaceScreen import WatchFaceScreen
     
-    from appFactoryMode import  FactoryModeLocationScreen,FactoryModeScreen ,FactoryModeAlipayInitScreen,FactoryModeBatTestScreen,FactoryModeHsensorTestScreen
+    from appFactoryMode import  FactoryModeLocationScreen,FactoryModeScreen ,FactoryModeAlipayInitScreen,FactoryModeBatTestScreen,FactoryModeHsensorTestScreen,FactoryModeLogScreen
     from mgr import setSmsIndexManager,ConfigStoreManager,testSmsSetIPManager,playPowerAudioManager,sosInfoCallManager,getBootOffManager,getSosFlagManager,CountdownManager, LocationManager, getVolumSizeManager,gethistoryDataManager,getUpLoadDataManager, getplayAudiodStateManager,\
     AddrBookManager,MsgdetailManager,PhoneCallingManager,getOldTimeManager,getStorageDataManager,getBrightnessManager,getHrTimeManager,getTempTimeManager,getLowBatManager
 
@@ -168,6 +168,7 @@ def main_init():
         ui.add_screen(FactoryModeAlipayInitScreen())
         ui.add_screen(FactoryModeBatTestScreen())
         ui.add_screen(FactoryModeHsensorTestScreen())
+        ui.add_screen(FactoryModeLogScreen())
         ui.add_screen(PopupAlarmScreen())
     except Exception as e:
         usys.print_exception(e)
index 7650f6f..0b00f13 100644 (file)
@@ -848,10 +848,11 @@ class DeviceInfoManager(Abstract):
         if self.upload_time != None :
             if  math.fabs(time_tmp - self.UD_time) > self.upload_time: #30分钟一次定位
                 self.UD_time = time_tmp
-                step_tmp = self.gsensor.get_step()
-                if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1 and step_tmp != self.GPS_step_t :
+                status_tmp = self.gsensor.get_status()#获取运动次数
+                EventMesh.txt_log("status_count:{}".format(status_tmp))
+                if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1 and status_tmp > 3 :
                     EventMesh.publish(constants.EVENT.START_LOCATION,constants.PROTOCOL.UD_SEND) #开始UD定位
-                    self.GPS_step_t = step_tmp#记录步数
+                    self.gsensor.clean_status()#清除运动次数
         EventMesh.publish(constants.EVENT.PUSH_STEP, self.get_step_count())
 
         """电池平均值"""
@@ -2008,79 +2009,113 @@ class LocationManager(Abstract):
                         self.wifi_data = []
                         self.gps_data = []
                         self.cell_data = []
-                        gnss_r_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)#去掉第一次错误数据
+                        self.location_timer_count
+                        #quecgnss.read(4096)#去掉第一次错误数据
                     match_gga_data = []
-                    match_gsv_data = []
-
-                    #检查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数据
+                    #match_gsv_data = []
+                    gnss_r_data = []
+                    if self.location_check_data_timer_count > 3 :#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)
+                        GSV_dict= {}
+                        GSV_sig_ok_count = 0
+                        #检查GNSS数据
+                        if (self.gps_data == [] or self.location_type == 1) and quecgnss.get_state() == 2:
+                            self.gps.__gps_nmea_data_clean()
+                            #gnss_r_data = [0,1]
+                            gnss_r_data = quecgnss.read(4096)
+                            #print("location gnss_r_data:{}".format(gnss_r_data[1].decode()))
+                            print("gnss_r_data len:{}".format(gnss_r_data[0]))
+                            if gnss_r_data[0] > 0 : #有数据
+                                gsv_data = gnss_r_data[1].split("GSV")           
+                                if len(gsv_data) >= 2 :  
+                                    gsv_data = gsv_data[1:]
+                                    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]
+                                                try:
+                                                    #print("gsv_tmp[i+3]:{}".format(gsv_tmp[i+3]))
+                                                    if gsv_tmp[i+3] != "" :
+                                                        if int(gsv_tmp[i+3])>=24:
+                                                            GSV_sig_ok_count+=1
+                                                except Exception as e:
+                                                    usys.print_exception(e)
+                                                #print("GSV_dict:{}:[{}]".format(gsv_tmp[i],gsv_tmp[i+3]))
+                                            if len(gsv_tmp)-i < 4:
+                                                break 
+                                #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],   
+                                    }
+                            #检查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)
                         
-                        #检查基站数据
-                        if self.cell_data == []:   
-                            data_tmp = net.getCellInfo()
-                            for cell in data_tmp:
-                                if cell and cell[0][0] == 0 and len(cell[0]) > 1:
-                                    self.cell_data = cell
-                                    break
-                    if self.location_timer_count >= 60*4 : #4分钟关闭
+                            #检查基站数据
+                            if self.cell_data == []:   
+                                data_tmp = net.getCellInfo()
+                                for cell in data_tmp:
+                                    if cell and cell[0][0] == 0 and len(cell[0]) > 1:
+                                        self.cell_data = cell
+                                        break
+                    if self.location_timer_count >= 60*7 : #4分钟关闭
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
                         #break
+                    #EventMesh.txt_log("GSV_sig_ok_count :{}".format(GSV_sig_ok_count))
                     if self.location_type == 1: #测试模式
-                        EventMesh.publish("PUSH_LOCATION_DATA", [gnss_r_data,self.wifi_data,self.cell_data]) 
+                        if len(gnss_r_data) >= 1:
+                            if gnss_r_data[0] > 0:
+                                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 != []): 
+                        if self.gps_data  != [] or self.location_timer_count > 180: #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)#关闭定位
+                            EventMesh.txt_log("CLOSE_LOCATION:location_timer_count:{}".format(self.location_timer_count))
+                            #break
+ 
+                        if len(GSV_dict) < 2 and GSV_sig_ok_count < 1 and self.wifi_data != [] and self.cell_data != [] and self.location_timer_count > 20: #超过20秒且卫星个数少于3
+                            self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
+                            EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位    
+                            EventMesh.txt_log("len(GSV_dict) < 2")
+                        if GSV_sig_ok_count < 3 and self.wifi_data != [] and self.cell_data != [] and self.location_timer_count > 40: #超过40秒且信号大于30的不足3个
+                            self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
+                            EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位   
+                            EventMesh.txt_log("GSV_sig_ok_count < 3")
                             #break
-                        if len(match_gsv_data) >= 3:
-                            #print("match_gsv_data[3]:{}".format(match_gsv_data[3]))
-                            #if  (self.wifi_data != [] and self.cell_data != [] and self.location_timer_count > 10): #超过10秒且卫星个数少于3  
-                            if (int(match_gsv_data[3]) < 3 and self.wifi_data != [] and self.cell_data != [] and self.location_timer_count > 20): #超过10秒且卫星个数少于3
-                                self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
-                                
-                                EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位    
-                                #break
                     utime.sleep_ms(1000)
                     #print("location_timer_count:{}".format(self.location_timer_count))
                 else :
index c8acbb0..641c964 100644 (file)
@@ -23,9 +23,9 @@ import usys
 
 
 def server_init(server_type = None):
-    #服务器选择1,防走丢,2大锤,3三基同创
+    #服务器选择1,防走丢,2大锤,3三基同创,4童信
     if server_type == None:
-        server_type = 1
+        server_type = 4
     #print("server_init:server_type:{}".format(server_type))
     d_server_addr = "api.xcloudtech.com"
     d_server_port = 9000
@@ -48,6 +48,9 @@ def server_init(server_type = None):
         d_server_port = 2346
         d_md5_key = ""
         d_PID = "3G"
+    elif  server_type == 4:
+         d_server_addr = "tcp.tx.kidxin.com"
+         d_server_port = 20500
     return [d_server_addr,d_server_port,d_md5_key,d_PID]
 from queue import Queue
 def unicode_to_utf8(src):
index 454a7c5..2604683 100644 (file)
@@ -6,49 +6,226 @@ if ql_fs.path_exists("/ext") == False:
 res = uos.statvfs("/ext")
 res = list(res)
 print('总ext空间:{} MB,剩余空间:{} MB'.format((((res[0] * res[2]) / 1024 / 1024)),((res[0] * res[3]) / 1024 / 1024)))
-from lcd import tp_cst816
-from btn_device_ec800m import BtnDevice
+# from lcd import tp_cst816
+# from btn_device_ec800m import BtnDevice
 
 import lvgl as lv
 import utime
 import osTimer
 import pm
 import ql_fs
-from machine import Pin
-from lcd import lcd,lcd_ctrl,tp_cst816,lcd_ctrl
-from misc import PWM
-import uos
-from machine import I2C
-from Hsensor import GH3018
-from Gsensor import SC7A20
-btn_device = BtnDevice(tp_cst816)
-btn_device.start()
-i2c0 = I2C(I2C.I2C0, I2C.FAST_MODE)
-WHO_AM_I = bytearray([0x01, 0])
-I2C_SLAVE_ADDR = 0x49
-r_data = bytearray(2)
-data = bytearray([0x60A0, 0])   #休眠
-i2c0.write(I2C_SLAVE_ADDR, WHO_AM_I, 1, data, 2)
-def gsensor_cb(self, para):
-        print("gsensor_cb:{}".format(para))
-gsensor = SC7A20()
-print("DeviceInfoManager:1.0")
-gsensor.activate()
-print("DeviceInfoManager:1.1")
-gsensor.init()
-print("DeviceInfoManager:2")
-gsensor.set_callback(gsensor_cb)
-hsensor = GH3018()
-hsensor.activate()
-hsensor.init()
-hsensor.open_blood_oxygen()
-utime.sleep(5)
-PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, 0, 1)
-PWM_backlight.open()
-hsensor.close()
-tp_cst816.suspend()
-lcd.lcd_display_off()
-#lcd_ctrl.write(0)
-lv.autoSleep(1)
-pm.autosleep(1)
-print("test end2")
\ No newline at end of file
+# from machine import Pin
+# from lcd import lcd,lcd_ctrl,tp_cst816,lcd_ctrl
+# from misc import PWM
+# import uos
+# from machine import I2C
+# from Hsensor import GH3018
+# from Gsensor import SC7A20
+# btn_device = BtnDevice(tp_cst816)
+# btn_device.start()
+# i2c0 = I2C(I2C.I2C0, I2C.FAST_MODE)
+# WHO_AM_I = bytearray([0x01, 0])
+# I2C_SLAVE_ADDR = 0x49
+# r_data = bytearray(2)
+# data = bytearray([0x60A0, 0])   #休眠
+# i2c0.write(I2C_SLAVE_ADDR, WHO_AM_I, 1, data, 2)
+# def gsensor_cb(self, para):
+#         print("gsensor_cb:{}".format(para))
+# gsensor = SC7A20()
+# print("DeviceInfoManager:1.0")
+# gsensor.activate()
+# print("DeviceInfoManager:1.1")
+# gsensor.init()
+# print("DeviceInfoManager:2")
+# gsensor.set_callback(gsensor_cb)
+# hsensor = GH3018()
+# hsensor.activate()
+# hsensor.init()
+# hsensor.open_blood_oxygen()
+# utime.sleep(5)
+# PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, 0, 1)
+# PWM_backlight.open()
+# hsensor.close()
+# tp_cst816.suspend()
+# lcd.lcd_display_off()
+# #lcd_ctrl.write(0)
+# lv.autoSleep(1)
+# pm.autosleep(1)
+# print("test end2")
+
+
+# import request
+# import ujson
+
+
+# def manual_url_encode(s: str) -> str:
+#     """Encodes a string for use in a URL query string."""
+#     safe_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-.*"
+#     encoded_str = ""
+
+#     for char in s:
+#         if char in safe_chars:
+#             encoded_str += char
+#         else:
+#             encoded_str += ''.join(['%' + hex(c)[2:].upper() for c in char.encode('utf-8')])
+#     return encoded_str
+
+# def generate_url(base_uri: str, params: dict) -> str:
+#     """Generates a full URL given a base URI and a dictionary of query parameters."""
+#     # Encode each key-value pair in the params dictionary
+#     encoded_params = "&".join([key + "=" + manual_url_encode(str(value)) for key, value in params.items()])
+#     return base_uri + "?" + encoded_params
+
+# # Test the function with the given example
+# base_uri = "http://ability.raisound.com:8096/bwtts"
+# params = {
+#     "text": "这是一个测试用例,一二三四五,上山打老虎",
+#     "voice_name": "xiaomu",
+#     "sample_rate": 16000,
+#     "audio_format": "mp3"
+# }
+# generated_url = generate_url(base_uri, params)
+# print("url:{}".format(generated_url))
+# response = request.get(generated_url)
+# print("status_code:{}".format(response.status_code))
+# play_flag = 2 # = 1流播放 =2保存文件播放
+# import audio
+# from machine import Pin
+# record_test = audio.Record()
+# record_test.gain(4,12)
+# aud = audio.Audio(0)
+# aud.set_pa(Pin.GPIO29)
+# aud.setVolume(11)
+# tmp = bytearray()
+# size = 10*1024
+# ret = 0
+# if play_flag == 1:
+#     for i in response.content:
+#         #print("type:{}".format(type(i)))
+#         tmp+= bytearray(i)
+#     print("data len:{}".format(len(tmp)))
+#     #print("data:{}".format(tmp))
+#     ret = aud.playStream(3, tmp)
+#     utime.sleep_ms(20)
+# else:
+#     len_tmp = 0
+#     with open('/ext/test.mp3', 'w+')as fp:
+#         for i in response.content:
+#             fp.write(i)
+#             len_tmp+=len(i)
+#     print("data len:{}".format(len_tmp))
+#     #ret = aud.play(1, 1, '/ext/test.mp3')
+#     with open("/ext/test.mp3", "rb")as f:   
+#         while 1:
+#             b = f.read(size)   # read
+#             if not b:
+#                 break
+#             ret =aud.playStream(3, b)
+#             utime.sleep_ms(20)
+# print("ret:{}".format(ret))
+
+
+
+
+import quecgnss
+import utime
+
+import quecgnss
+import utime
+import ure
+
+gnss_init_flag = 0
+ret = -1
+fix_num = 0
+
+def gnss_nmea_debug(gnss_data):
+    global fix_num
+    global gnss_init_flag
+    try:    
+        rmc_info = ure.search("GNRMC(.+?)M", gnss_data)
+        if rmc_info.group(0).split(",")[2] == 'A':
+            if fix_num > 1:
+                print("输出有效定位!\r\n")
+            else:
+                fix_num = fix_num + 1
+
+    except:
+        pass
+
+
+def gnss_nmea_get_sat(gnss_data):
+    try:    
+        nema_str_list = gnss_data.split('\r\n')
+        for i in range(len(nema_str_list)):
+            if(ure.search("GPGSV(.+?)", nema_str_list[i]) != None):
+                # print(nema_str_list[i].split(",")[3])
+                try:
+                    print('GPS SAT NUM:{},SAT1 {} SNR {},SAT2 {} SNR {},SAT3 {} SNR {},SAT4 {} SNR {}\r\n'.format(nema_str_list[i].split(",")[3], \
+                    nema_str_list[i].split(",")[4], nema_str_list[i].split(",")[7], nema_str_list[i].split(",")[8], \
+                    nema_str_list[i].split(",")[11], nema_str_list[i].split(",")[12], nema_str_list[i].split(",")[15], \
+                    nema_str_list[i].split(",")[16], nema_str_list[i].split(",")[19]))
+                
+                except:
+                    pass
+
+            elif(ure.search("GBGSV(.+?)", nema_str_list[i]) != None):
+                # print(nema_str_list[i].split(",")[3])
+                try:
+                    print('BDS SAT NUM:{},SAT1 {} SNR {},SAT2 {} SNR {},SAT3 {} SNR {},SAT4 {} SNR {}\r\n'.format(nema_str_list[i].split(",")[3], \
+                    nema_str_list[i].split(",")[4], nema_str_list[i].split(",")[7], nema_str_list[i].split(",")[8], \
+                    nema_str_list[i].split(",")[11], nema_str_list[i].split(",")[12], nema_str_list[i].split(",")[15], \
+                    nema_str_list[i].split(",")[16], nema_str_list[i].split(",")[19]))
+                except:
+                    pass
+
+            else:
+                pass    
+    except Exception as e:
+        print(str(e))
+
+
+def main():
+    global fix_num
+    global gnss_init_flag
+    global ret
+    if(gnss_init_flag == 0):
+        ret = quecgnss.init()
+        if ret == 0:
+            print('GNSS init ok.\r\n')
+            gnss_init_flag = 1
+        else:
+            print('GNSS init failed.\r\n')
+            return -1
+    else:
+        print('GNSS has been init.\r\n')
+        quecgnss.gnssEnable(1)
+
+    for i in range(60):
+        print("==========GNSS READTIME {}==========\r\n".format(i+1))
+        data = quecgnss.read(4096)
+        gnss_data = data[1].decode()
+        print(gnss_data)
+        gnss_nmea_get_sat(gnss_data)
+        utime.sleep(1)
+
+    quecgnss.gnssEnable(0)
+    fix_num = 0
+    utime.sleep(5)
+    quecgnss.gnssEnable(1)
+    print("==========GNSS RESTART==========\r\n")
+
+    for i in range(60):
+        print("==========GNSS READTIME {}==========\r\n".format(i+1))
+        data = quecgnss.read(4096)
+        gnss_data = data[1].decode()
+        print(gnss_data)
+        gnss_nmea_get_sat(gnss_data)
+        utime.sleep(1)
+
+    quecgnss.gnssEnable(0)
+    fix_num = 0
+
+
+
+if __name__ == '__main__':
+    main()
\ No newline at end of file
index f1a97ac..af96da3 100644 (file)
@@ -6232,7 +6232,7 @@ class restore_confirmScreen(Screen):
 
             self.meta = rrestor_confirm_n_screen
         self.timer1.start(1000,1,self.timer_cb_onescond)
-        self.timer2.start(3000,0,self.timer_cb_threescond)
+        
         ret = 0
         ret = ql_fs.path_exists("/ext/static/storage_file")#电话本
         if ret == True:
@@ -6241,7 +6241,7 @@ class restore_confirmScreen(Screen):
         EventMesh.publish("alipay_unbind")
         if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#已连接服务器发指令恢复出厂
             EventMesh.publish(constants.PROTOCOL.DLT_SEND)
-       
+        self.timer2.start(4000,0,self.timer_cb_threescond)
 
 
     def Close(self):
index e76358b..18d6dd3 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 b573d71..d080977 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 52ae668..e5de4d9 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 466d7d7..dc0d758 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