From: p15692025051 <846603105@qq.com> Date: Thu, 31 Aug 2023 02:59:28 +0000 (+0800) Subject: k5定位逻辑修改 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=46e82259100798df183da3839ff6e6cfa6ac4289;p=mirrors%2FASR1603_G5.git k5定位逻辑修改 --- diff --git a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modGsensor_SC7A20.c b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modGsensor_SC7A20.c index fca09ba5..84c6c0b5 100644 --- a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modGsensor_SC7A20.c +++ b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modGsensor_SC7A20.c @@ -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) }, diff --git a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/EventMesh.py b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/EventMesh.py index ff0911de..e53be139 100644 --- a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/EventMesh.py +++ b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/EventMesh.py @@ -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): diff --git a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/appFactoryMode.py b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/appFactoryMode.py index 511b0026..f097d1ed 100644 --- a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/appFactoryMode.py +++ b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/appFactoryMode.py @@ -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) : diff --git a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/main_init.py b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/main_init.py index 53af1bd6..99eab484 100644 --- a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/main_init.py +++ b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/main_init.py @@ -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) diff --git a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/mgr.py b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/mgr.py index 7650f6ff..0b00f135 100644 --- a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/mgr.py +++ b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/mgr.py @@ -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 : diff --git a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/protocol.py b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/protocol.py index c8acbb07..641c964d 100644 --- a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/protocol.py +++ b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/protocol.py @@ -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): diff --git a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/sleep_test.py b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/sleep_test.py index 454a7c5c..2604683b 100644 --- a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/sleep_test.py +++ b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/sleep_test.py @@ -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 diff --git a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/ui.py b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/ui.py index f1a97ac8..af96da3d 100644 --- a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/ui.py +++ b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/ui.py @@ -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): diff --git a/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/DBG.7z b/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/DBG.7z index e76358ba..18d6dd33 100644 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 diff --git a/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base_release_pack.zip b/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base_release_pack.zip index b573d711..d0809778 100644 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 diff --git a/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/libraries/libHeliosAPI.lib b/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/libraries/libHeliosAPI.lib index 52ae6682..e5de4d90 100644 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 diff --git a/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/libraries/ql_common_api.lib b/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/libraries/ql_common_api.lib index 466d7d70..dc0d758e 100644 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