* 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);
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);
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
{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)},
#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;
//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)
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);
{
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
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);
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)
}
}
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);//打开佩戴检测
}
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[] = {
{ 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)},
};
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)
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")#防止黑屏
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()
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):
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
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__)
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)
data["func"](data["data"])
except Exception as e:
print("DeviceInfo_queue_thread:ERROR:{}".format(e))
+ usys.print_exception(e)
def gsensor_cb(self, para):
EventMesh.publish("publish_message_event_DeviceInfo",{"func":self.publish_event,"data":0})
def publish_event(self,data):
"""
- 主动推送事件
+ 定时事件处理
:param args:
:param kwargs:
:return:
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:
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()
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))
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()
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 = {}
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):
"""
获取设备运营商信息
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()
def location_thread(self):
- data = ""
+ gnss_r_data = ""
while True:
try :
if self.location_flag == 1 :
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()
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
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))
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
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
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
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, ())
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
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:
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")
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):
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 #有数据,就认为是连接状态
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()
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")
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()
@param msg: 接收到的下行数据
"""
# print("DLT_ProtoCol RECV msg:")
- reset_factory(1)
+
#定位频率
class UPLOAD_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)
#定时开关机
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)
@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)
@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)
@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):
# 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)))
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)
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 :
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
pass
def HsensorCali_cb(self,e):
+ self.Hsensor.set_sar(1)
self.Hsensor.open_test(255) #打开校准模式
utime.sleep_ms(500)
self.Hsensor.open_heart()
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 :
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:]
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"})
+
#print("init10:{}".format(utime.localtime()))
-
+ EventMesh.publish("load_screen", {"screen": "poweron"})#开机画面
app.append_manager(mgr.AlarmVolumeLevelManager()) \
.append_manager(mgr.MsgVolumeLevelManager()) \
.append_manager(mgr.PhoneVolumeLevelManager()) \
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"})
+
self.gsensor.set_callback(self.gsensor_cb)
try :
self.hsensor = HX3918()
+
except Exception as e:
print("Hsensor none HX3918:{}".format(e))
try :
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")
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()
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()
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])
#短信格式: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])
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
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
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
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, ())
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
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:
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")
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):
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 #有数据,就认为是连接状态
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()
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")
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()
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]
# 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)))