)
:STEP1
-..\..\Helios_SDK\tools\ASR_1606\win32\mklfs.exe -c usr -b 4096 -r 4096 -p 4096 -s 1048576 -i .\images\customer_fs.bin
+..\..\Helios_SDK\tools\ASR_1606\win32\mklfs.exe -c usr -b 4096 -r 4096 -p 4096 -s 914400 -i .\images\customer_fs.bin
if errorlevel 1 (
echo "customer_fs.binÉú³Éʧ°Ü Çë¼ì²éusrĿ¼ÊÇ·ñ´óÓÚ316K!!!!!!!!!!!!!!!"
goto exit
# raise
return wrapped_callback
+
+import utime
+Txt_Log = 1
+def txt_log(data):
+ pass
+ # if Txt_Log != 0 :
+ # with open("/usr/log.txt","a",encoding="utf-8") as fd:
+ # d_time = utime.localtime()
+ # data_tmp = "%02d-%02d %02d:%02d:%02d :"%(d_time[1],d_time[2],d_time[3],d_time[4],d_time[5])
+ # fd.write(data_tmp+data+"\n")
+
$(BUILD)/uping.mpy \
$(BUILD)/ymodem.mpy \
$(BUILD)/alarm.mpy \
- $(BUILD)/appAlipay.mpy \
$(BUILD)/appFactoryMode.mpy \
$(BUILD)/appWechat.mpy \
$(BUILD)/btn_device_ec800m.mpy \
$(BUILD)/capacitive_hynitron_cst816d_update.mpy \
- $(BUILD)/code.mpy \
$(BUILD)/common.mpy \
$(BUILD)/constants.mpy \
$(BUILD)/EventMesh.mpy \
# self.wechat_recode_list = ujson.load(fd)#读取每一个amr音频文件的时长ui_setting.py
self.record_test = audio.Record()
+ import audio
+ from machine import Pin
self.aud = audio.Audio(0)
self.aud.set_pa(Pin.GPIO29)
check_volum = ql_fs.path_exists("/usr/static/storage_file/config.json")
self.volum_size = 8
else:
self.volum_size = 8
- self.aud.setVolume(self.volum_size)
- self.meta = wechat_screen
+ self.aud.setVolume(11)
+ #16点42分
+
wechat_press_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.talking_cb(e)),
lv.EVENT.LONG_PRESSED, None)
wechat_press_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.sending_cb(e)),
-# class TK_ProtoCol(ProtoCol):
-# """微聊"""
-# TYPE = "TK"
-
-
-# def send(self, event, msg):
-# # [SZKW*YYYYYYYYYYYYYYY*LEN*TK,AMR 格式音频数据]
-# #[XT*YYYYYYYYYYYYYYY*LEN*TKS,秒数(十进制),AMR 格式音频数据]
-# arm_data = msg[1]
-# arm_sec = msg[0]
-# Wechat_log("TK_ProtoCol:msgtype:{} arm_sec:{}".format(type(msg),arm_sec))
-
-# arm = bytearray()
-# for i in range(len(arm_data)):
-# if arm_data[i] == 0x7d:
-# arm.extend(b'\x7d\x01')
-# elif arm_data[i] == 0x5b :
-# arm.extend(b'\x7d\x02')
-# elif arm_data[i] == 0x5d :
-# arm.extend(b'\x7d\x03')
-# elif arm_data[i] == 0x2c :
-# arm.extend(b'\x7d\x04')
-# elif arm_data[i] == 0x2a :
-# arm.extend(b'\x7d\x05')
-# else :
-# arm.append(arm_data[i])
-
-# datalen = len(arm) + 4+len(str(arm_sec))+1
-# #Wechat_log("len(str(arm_sec)):{}".format(len(str(arm_sec))+1))
-# send_data = bytearray("SZKW*%s*%04X*TKS,%d,"%(self.imei,datalen,arm_sec))
-# send_data.extend(arm)
-# MD5_SIGN = self.pack_MD5_head(send_data)
-# data = bytearray('[')
-# data.extend(MD5_SIGN)
-# data.extend(send_data)
-# data.extend(']')
-# EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
-
-# def recv(self, event, msg):
-# """
-
-# @param event: 微聊
-# @param msg: 接收到的下行数据
-# [SZKW*860132060004322*20BD*TK,#!AMR...]
-# """
-# #Wechat_log("K_ProtoCol:recv:data:{}".format(msg))
-# msg_tmp = msg.decode('ascii')
-# str = msg_tmp.split('TK,')
-# # Wechat_log("TK_ProtoCol:recv:len:{} {} {}".format(len(msg),len(str),msg_tmp.find("#!AMR")))
-# if msg_tmp.find("#!AMR") != -1: #是否是服务器下发音频数据
-# # Wechat_log("TK_ProtoCol:recv:datalen{}".format(len(msg)))
-# arm_data = bytearray(str[1])#获取amr输出
-# get_wechat_data = EventMesh.publish("get_wechat_data")
-
-# MXA_MSG = get_wechat_data[0]
-# wechat_recode_list = get_wechat_data[1]
-# wechat_num = wechat_recode_list["num"]
-# # Wechat_log("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
-
-# if wechat_num >= MXA_MSG:
-# wechat_num = 0
-# if wechat_num == 0:
-# wechat_num += 1
-# elif wechat_num > 0:
-# wechat_num += 1
-
-
-# Wechat_log("num_total:datalen:{} {}".format(MXA_MSG,wechat_recode_list))
-# wechat_recode_list["%02d"%(wechat_num)] = "R:{}".format(3)
-# wechat_recode_list['num'] = wechat_num
-# EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
-# #写语音文件数据
-# screen_NAME = EventMesh.publish("get_screen_NAME")
-# get_lcd_state = EventMesh.publish("get_lcd_state")
-# if screen_NAME != "wechat" or get_lcd_state == 0:
-# EventMesh.publish("load_screen", {"screen": "wechat_popup"})
-# else:
-# EventMesh.publish("wechat_updata_list_show")
-# # path = "/usr/static/storage_file/audio_amr/amr/{}.amr".format(wechat_num)
-# path = "/usr/static/storage_file/{}.amr".format(wechat_num)
-# with open(path,"w") as fd:
-# arm = bytearray()
-# j = 0
-# for i in range(len(arm_data)):
-# if arm_data[j] == 0x7d and arm_data[j+1] == 0x01:
-# arm.extend(b'\x7d')
-# j+=1
-# elif arm_data[j] == 0x7d and arm_data[j+1] == 0x02:
-# arm.extend(b'\x5b')
-# j+=1
-# elif arm_data[j] == 0x7d and arm_data[j+1] == 0x03:
-# arm.extend(b'\x5d')
-# j+=1
-# elif arm_data[j] == 0x7d and arm_data[j+1] == 0x04:
-# arm.extend(b'\x2c')
-# j+=1
-# elif arm_data[j] == 0x7d and arm_data[j+1] == 0x05:
-# arm.extend(b'\x2a')
-# j+=1
-# else :
-# arm.append(arm_data[j])
-# j+=1
-# if j >= len(arm_data):
-# break
-# fd.write(arm)
-
-
-
-
-# class MESSAGE_ProtoCol(ProtoCol):
-# """微聊"""
-# TYPE = "MESSAGE"
-
-
-# def send(self, event, msg):
-
-# #[XT*334588000000156*0007*MESSAGE]
-# send_data = "SZKW*%s*0007*MESSAGE"%(self.imei)
-# MD5_SIGN = self.pack_MD5_head(send_data)
-# data = "[%s%s]"%(str(MD5_SIGN),send_data)
-# #Wechat_log("POWEROFF_ProtoCol:send:%s"%(data))
-# # 通过socket发送到服务器端
-# EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
-
-# def recv(self, event, msg):
-# """
-
-# @param event: 微聊文字
-# @param msg: 接收到的下行数据
-# """
-# msg = msg[1:-1]
-
-# msg_s = msg.decode('ascii')
-# msg_s = msg_s.split(',')
-# msg_s = msg_s[1]
-# # Wechat_log("msg_tmp:len:{}\r\n data:{}".format(len(msg_s),msg_s))
-
-
-# get_wechat_data = EventMesh.publish("get_wechat_data")
-
-# MXA_MSG = get_wechat_data[0]
-# wechat_recode_list = get_wechat_data[1]
-# wechat_num = wechat_recode_list["num"]
-# # Wechat_log("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
-
-# if wechat_num >= MXA_MSG:
-# wechat_num = 0
-# if wechat_num == 0:
-# wechat_num += 1
-# elif wechat_num > 0:
-# wechat_num += 1
-# msg_txt = {}
-# # 0 1 2 3
-# Wechat_log("wechat_num:init {}".format(wechat_num))
-# msg_txt = UnicodeHexStr_To_Utf8Str(msg_s)
-# # Wechat_log("msg_txt:{}".format(msg_txt))
-# wechat_recode_list["%02d"%(wechat_num)] = "T:{}".format(msg_txt)
-# wechat_recode_list['num'] = wechat_num
-# EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
-# # Wechat_log("wechat_recode_list:len data:{}".format(wechat_recode_list))
-# EventMesh.publish(constants.PROTOCOL.MESSAGE_SEND)
-# screen_NAME = EventMesh.publish("get_screen_NAME")
-# get_lcd_state = EventMesh.publish("get_lcd_state")
-# if screen_NAME != "wechat" or get_lcd_state == 0:
-# EventMesh.publish("load_screen", {"screen": "wechat_popup"})
-# else:
-# EventMesh.publish("wechat_updata_list_show")
import ujson
import voiceCall
from misc import Power
-from usr.led import red_green_light,green_light_fast,led_mode,open_led_red,close_led_red,open_led_green,close_led_green
-
-class powerOFFManager(Abstract):#关机
- def __init__(self):
- self.timer = osTimer()
-
- pass
-
+from led import red_green_light,green_light_fast,led_mode,open_led_red,close_led_red,open_led_green,close_led_green,close_led_white
+from machine import RTC
+from queue import Queue
+import _thread
+import usys
- def post_processor_after_instantiation(self):
- EventMesh.subscribe("long_press_power_off", self.long_press_power_off)#
+# motor_pin = Pin(Pin.GPIO20, Pin.OUT, Pin.PULL_PD, 0)
+motor_pin = 1
+def open_motor():
+ motor_pin.write(1)
+def close_motor():
+ motor_pin.write(0)
- def long_press_power_off(self, event, msg): #msg 1 开始测量 2 测量成功 3 测量失败未出值
- self.timer.start(5000,0,self.fun)
- EventMesh.publish("set_led_time_arg",[1000,500,6,led_mode.FLASH_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE])#測量失敗
-
+audio_buf =['audio_audio_haixiu', 'R_ALARM_3', 'R_CALL_mp3', 'R_CHARGE_FULL', 'R_CHARGE_IN', 'R_CHARGE_OUT', 'R_HSENSOR_RESULT_FAILE', 'R_HSENSOR_RESULT_HR_TITLE', 'R_HSENSOR_RESULT_OK', 'R_HSENSOR_SPO2_TITLE', 'R_HSENSOR_TEMP_TITLE', 'R_NO_SET_SOS_DIAL', 'R_NO_SIM', 'R_POWER_OFF_1', 'R_READ_STEP_0', 'R_READ_STEP_1', 'R_READ_STEP_2', 'R_READ_STEP_3', 'R_READ_STEP_4', 'R_READ_TIME_0', 'R_READ_TIME_1', 'R_READ_TIME_2', 'R_READ_TIME_3', 'R_READ_TIME_4', 'R_READ_TIME_5', 'R_READ_TIME_6', 'R_READ_TIME_7', 'R_READ_TIME_8', 'R_READ_TIME_9', 'R_READ_TIME_MIN', 'R_READ_TIME_ZHENG', 'R_SIM_CONNECT', 'R_SIM_FAILE', 'R_SOS_ALERT', 'R_TSENSOR_RESULT_VALUE_DOT', 'R_UNREAD_WECHAT']
+class call:
+ CALL_OUT = 1
+ CALL_IN = 2
+ ON_CALL = 3
- def fun(self, *args):
- Power.powerDown()
-class playCurStepManager(Abstract):#播报当前步数
+class intervManager(Abstract):
def __init__(self):
self.timer = osTimer()
- self.count = 0
- self.setp_old = 0
+
+ self.pwk_timer = osTimer()
self.aud = audio.Audio(0)
self.aud.set_pa(Pin.GPIO29)
self.aud.setVolume(11)
+ self.play_count = 0
+ self.count = 0
+
+ self.get_hr_state = 0
+ self.get_spo2_state = 0
+ self.timeSec = 0
+ self.timeTempSec = 0
+
+ self.hr_value = 0
+ self.spo2_value = 0
+ self.temp_value = 0
+
+ self.usbState = 0
+
+ self.setp_old = 0
self.step_tmp = ""
self.step_num = 0
- pass
+ self.power_off = 0
+ self.call_state = 0
+
+ self.find_state = 0
+ self.FIND_timer_count = 0
+
+ self.old_hour = 0
+ self.old_min = 0
+ self.interInfo_queue = Queue()
+ _thread.start_new_thread(self.interInfo_queue_thread, ())
+ EventMesh.subscribe("publish_message_event_interInfo",self.publish_message_event_interInfo)
+ self.record_test = audio.Record()
+ self.record_test.gain(4,12)
+
+ self.timeSecond = 0
+ self.wechat_show = 0
+ self.sort_new = {}
+ self.time_min = 0
+ self.press_btn = 0
+ self.countdown_old = 0
+ self.set_unread_wechat = 0
+ self.updateTime = 0
+
+ self.power_on_flag = 0
+
+ self.MXA_MSG = 3
+ self.wechat_recode_list = {}
+ self.wechat_num = 0
+ self.read_data = {}
+ self.volum_size = 8
+ self.msg_tmp = ""
+ check_txt = ql_fs.path_exists("/usr/static/storage_file/wechat_record.json")
+ if check_txt == True :
+ with open("/usr/static/storage_file/wechat_record.json","r") as fd:#音频文件编号
+ self.wechat_recode_list = ujson.load(fd)
+ if not self.wechat_recode_list:
+ self.wechat_recode_list = {"num":0}
+ self.wechat_num = 0
+ else:
+ self.wechat_recode_list = {"num":0}
+ with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:
+ ujson.dump(self.wechat_recode_list,fd)
+
def post_processor_after_instantiation(self):
- EventMesh.subscribe("play_cur_step_event", self.play_cur_step_event)#
+ EventMesh.subscribe("open_power_on", self.open_power_on)#开机关机
+ EventMesh.subscribe("play_imei_event", self.play_imei_event)#播報imei号
+ EventMesh.subscribe("play_center_phone", self.play_center_phone)#拨打快捷号码
+ EventMesh.subscribe("play_cur_time_event", self.play_cur_time_event)#播放当前时间
- def play_cur_step_event(self, event, msg): #msg 1 开始测量 2 测量成功 3 测量失败未出值
- self.count = 0
- self.timer.start(200,1,self.fun)
-
- def fun(self, *args):
- step = EventMesh.publish("get_old_step_value")
- play_state = EventMesh.publish("get_audio_state")#音频播放状态
- # print("step fun!!!!!!!!!!!")
- if self.setp_old != step:
- self.count = 0
- self.step_num = 0
- self.setp_old = step
- if step <= 10:#个
- if play_state != None:
- if play_state == 0:
- self.count+=1
- # print("step self.count!!!!!!!!!!",self.count)
- if self.count == 1:
- if step == 10:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_3.mp3') #播放imei号
- else:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(step)) #播放imei号
- elif self.count == 2:
- self.count = 0
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #播放imei号
- self.timer.stop()
-
- elif step <= 100:#十 90
- if step >= 100:
- if play_state != None:
- if play_state == 0:
- self.count+=1
- if self.count == 1:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_1.mp3') #1
- elif self.count == 2:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_2.mp3') #百
- elif self.count == 3:
- self.count = 0
- self.timer.stop()
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #播放步音频
- pass
- else:
- self.step_tmp = str(step)
- shi_value = int(self.step_tmp[0])#十
- ge_value = int(self.step_tmp[1])#个
- if play_state != None:
- if play_state == 0:
- if shi_value > 1:
- self.count+=1
- if self.count == 1:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(shi_value)) #9 90
- elif self.count == 2:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_3.mp3') #十
- elif self.count == 3 or self.count == 4:
- if ge_value == 0 or self.count == 4:
- self.count = 0
- self.timer.stop()
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #播放步音频
- else:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(ge_value)) #播放
- else:
- self.count+=1
- if self.count == 1:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_3.mp3') #十
- elif self.count == 2:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(ge_value)) #播放
- elif self.count == 3:
- self.count = 0
- self.timer.stop()
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #播放步音频放
- elif step <= 1000:#百
- if step >= 1000:
- if play_state != None:
- if play_state == 0:
- self.count+=1
- if self.count == 1:#1 109步 110步 114步
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_1.mp3') #播放
- elif self.count == 2:#百
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_1.mp3') #千
- elif self.count == 3:#1
- self.count = 0
- self.timer.stop()
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- else:
- self.step_tmp = str(step)
- bai_value = int(self.step_tmp[0])#百
- shi_value = int(self.step_tmp[1])#十
- ge_value = int(self.step_tmp[2])#个
- #101 110 1
- if shi_value > 0:#110
- if play_state != None:
- if play_state == 0:
- self.count+=1
- if self.count == 1:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(bai_value)) #2
- elif self.count == 2:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_2.mp3') #百
- elif self.count == 3:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(shi_value)) #1
- elif self.count == 4:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_3.mp3') #十
- elif self.count == 5 or self.count == 6:
- if ge_value == 0 or self.count == 6:
- self.count = 0
- self.timer.stop()
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- else:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(ge_value)) #1
- else:
- if play_state != None:
- if play_state == 0:
- self.count+=1
- if self.count == 1:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(bai_value)) #2
- elif self.count == 2:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_2.mp3') #百
- elif self.count == 3:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_0.mp3') #0
- elif self.count == 4 :
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(ge_value)) #1
- elif self.count == 5:
- self.count = 0
- self.timer.stop()
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- elif step <= 10000:#千
- if step >= 10000:
- if play_state != None:
- if play_state == 0:
- self.count+=1
- if self.count == 1:#1 109步 110步 114步
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_1.mp3') #播放
- elif self.count == 2:#百
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_0.mp3') #千
- elif self.count == 3:#1
- self.count = 0
- self.timer.stop()
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- pass
- else:
- one_thousand = step//1000 #千
- one_hundred = step%1000 #百
- baishu = step%100 #十
- shishu = step%10 #个
- print(one_thousand,one_hundred,baishu,shishu)
-
- if play_state != None:
- if play_state == 0:
- self.count += 1
- self.step_tmp = str(step)
- qian = int(self.step_tmp[0])#千
- bai_value = int(self.step_tmp[1])#百
- shi_value = int(self.step_tmp[2])#十
- ge_value = int(self.step_tmp[3])#个
- # 1009
- # 1010
- # 1109
- # 1110
- if bai_value <= 0:
- if shi_value <= 0:
- if self.count == 1:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(qian)) #1
- elif self.count == 2:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_1.mp3') #千
- elif self.count == 3:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_0.mp3') #0
- elif self.count == 4:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(ge_value)) #0
- elif self.count == 5:
- self.count = 0
- self.timer.stop()
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- pass
- else:
- if self.count == 1:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(qian)) #1
- elif self.count == 2:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_1.mp3') #千
- elif self.count == 3:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_0.mp3') #0
- elif self.count == 4:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(shi_value)) #0
- elif self.count == 5:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_3.mp3') #十
- elif self.count == 6:
- if ge_value == 0:
- self.count = 0
- self.timer.stop()
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- else:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(ge_value)) #0
- elif self.count == 7:
- self.count = 0
- self.timer.stop()
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- else:
- if shi_value <= 0:#11
- if self.count == 1:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(qian)) #1
- elif self.count == 2:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_1.mp3') #千
- elif self.count == 3:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(bai_value)) #0
- # self.aud.play(1, 1, 'U:/static/R_READ_TIME_0.mp3') #0
- elif self.count == 4:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_2.mp3') #百
- elif self.count == 5:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_0.mp3') #0
- elif self.count == 6:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(ge_value)) #0
- elif self.count == 7:
- self.count = 0
- self.timer.stop()
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- pass
- else:
- if self.count == 1:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(qian)) #1
- elif self.count == 2:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_1.mp3') #千
- elif self.count == 3:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(bai_value)) #0
- # self.aud.play(1, 1, 'U:/static/R_READ_TIME_0.mp3') #0
- elif self.count == 4:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_2.mp3') #百
- elif self.count == 5:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(shi_value)) #0
- # self.aud.play(1, 1, 'U:/static/R_READ_TIME_0.mp3') #0
- elif self.count == 6:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_3.mp3') #十
- # self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(ge_value)) #0
- elif self.count == 7 or self.count == 8:
- if ge_value == 0 or self.count == 8:
- self.count = 0
- self.timer.stop()
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- else:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(ge_value)) #0
+ EventMesh.subscribe("OPEN_FIND_WATCH", self.send_find_watch)#查找设备
+ EventMesh.subscribe("STOP_FIND_WATCH", self.stop_find_watch)#是否需要关闭查找设备
+ EventMesh.subscribe("close_timer_all", self.close_timer_all)#关闭相关定时器
+ EventMesh.subscribe("dial_sos_phone", self.dial_sos_phone)#长按3s拨打sos求助号码
- pass
- elif step <= 100000:#万
- if step >= 100000:#10万步
- if play_state != None:
- if play_state == 0:
- self.count += 1
- if self.count == 1:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_3.mp3') #十
- elif self.count == 2:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_0.mp3') #万
- elif self.count == 3:
- self.count = 0
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- self.timer.stop()
- else:
- if play_state != None:
- if play_state == 0:
- self.count += 1
- self.step_tmp = str(step)
- wang = int(self.step_tmp[0])#万
- qian = int(self.step_tmp[1])#千
- bai_value = int(self.step_tmp[2])#百
- shi_value = int(self.step_tmp[3])#十
- ge_value = int(self.step_tmp[4])#个
- if wang > 0 and qian > 0 and bai_value > 0:#11109 11111
- if shi_value <= 0:
- if self.count ==1:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(wang)) #1
- elif self.count == 2:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_0.mp3') #万
- elif self.count == 3:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(qian)) #1 self.aud.play(1, 1, 'U:/static/R_READ_STEP_0.mp3') #万
- elif self.count == 4:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_1.mp3') #千
- elif self.count == 5:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(bai_value))
- # self.aud.play(1, 1, 'U:/static/R_READ_TIME_0.mp3')#0
- elif self.count == 6:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_2.mp3')#百
- elif self.count == 7:
- if ge_value == 0:
- self.count = 0
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- self.timer.stop()
- else:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_0.mp3')
- elif self.count == 8:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(ge_value))
- elif self.count == 9:
- self.count = 0
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- self.timer.stop()
- else:
- if self.count ==1:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(wang)) #1
- elif self.count == 2:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_0.mp3') #万
- elif self.count == 3:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(qian)) #1 self.aud.play(1, 1, 'U:/static/R_READ_STEP_0.mp3') #万
- elif self.count == 4:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_1.mp3') #千
- elif self.count == 5:#1
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(bai_value))
- elif self.count == 6:#百
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_2.mp3')
- elif self.count == 7:#1
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(shi_value))
- elif self.count == 8 :#十
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_3.mp3')
- if self.count == 9 or self.count == 10:#十
- if ge_value == 0 or self.count == 10:
- self.count = 0
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- self.timer.stop()
- else:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(ge_value))
- elif wang > 0 and qian > 0:#11000 11010 11012
- if shi_value > 0:
- if self.count == 1:#
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(wang)) #1
- elif self.count == 2:#万
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_0.mp3') #万
- elif self.count == 3:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(qian)) #1
- elif self.count == 4:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_1.mp3') #千
- elif self.count == 5:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_0.mp3') #0
- elif self.count == 6:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(shi_value)) #9
- elif self.count == 7:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_3.mp3') #十
- elif self.count == 8 or self.count == 9:
- if ge_value == 0 or self.count == 9:
- self.count = 0
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- self.timer.stop()
- else:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(ge_value)) #个
- else:
- if self.count == 1:#
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(wang)) #1
- elif self.count == 2:#万
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_0.mp3') #万
- elif self.count == 3:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(qian)) #1
-
- elif self.count == 4:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_1.mp3') #千
- elif self.count == 5:
- if shi_value == 0 and ge_value == 0:
- self.count = 0
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- self.timer.stop()
- else:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_0.mp3') #0
- elif self.count == 6:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(ge_value)) #9
- elif self.count == 7:
- self.count = 0
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- self.timer.stop()
- pass
-
- elif wang > 0:#
- if bai_value > 0:#百
- if shi_value > 0:#10110
- if self.count == 1:#
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(wang)) #1
- elif self.count == 2:#万
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_0.mp3') #万
- elif self.count == 3:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_0.mp3') #0
- elif self.count == 4:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(bai_value)) #1
- elif self.count == 5:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_2.mp3') #百
- elif self.count == 6:
-
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(shi_value)) #9
- elif self.count == 7:
-
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_3.mp3') #十
- elif self.count == 8 or self.count == 9:
- if ge_value == 0 or self.count == 9:
- self.count = 0
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- self.timer.stop()
- else:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(ge_value)) #个
- else:#10109
- if self.count == 1:#
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(wang)) #1
- elif self.count == 2:#万
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_0.mp3') #万
- elif self.count == 3:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_0.mp3') #0
- elif self.count == 4:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(bai_value)) #1
- elif self.count == 5:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_2.mp3') #百
- elif self.count == 6:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_0.mp3') #0
-
- elif self.count == 7:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(ge_value)) #1
- # self.aud.play(1, 1, 'U:/static/R_READ_STEP_3.mp3') #十
- elif self.count == 8:
- self.count = 0
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- self.timer.stop()
- else:#10010
- if shi_value > 0:
- if self.count == 1:#
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(wang)) #1
- elif self.count == 2:#万
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_0.mp3') #万
- elif self.count == 3:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_0.mp3') #0
-
- elif self.count == 4:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(shi_value)) #9
-
- elif self.count == 5:
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_3.mp3') #十
- elif self.count == 6 or self.count == 7:
- if ge_value == 0 or self.count == 7:
- self.count = 0
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- self.timer.stop()
- else:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(ge_value)) #个
-
- else: #10008
- if self.count == 1:#
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(wang)) #1
- elif self.count == 2:#万
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_0.mp3') #万
- elif self.count == 3:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_0.mp3') #0
-
- elif self.count == 4:
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(ge_value)) #9
- elif self.count == 5:
- self.count = 0
- self.aud.play(1, 1, 'U:/static/R_READ_STEP_4.mp3') #步
- self.timer.stop()
- pass
-
+ EventMesh.subscribe("set_sim_mode", self.set_sim_mode)#sim检测
-class phonecallManager(Abstract):#是否正在电话呼叫中
- def __init__(self):
- self.call_state = 0
- self.timer = osTimer()
- self.aud = audio.Audio(0)
- self.aud.set_pa(Pin.GPIO29)
- self.aud.setVolume(11)
+ EventMesh.subscribe("close_hr_sop2", self.close_hr_sop2)#关闭健康测试
+ EventMesh.subscribe("set_manual_measure_mode", self.set_manual_measure_mode)#设置测试模式
+ EventMesh.subscribe("set_start_measure_time", self.set_start_measure_time)#设置开始测量的时间戳时间
+ EventMesh.subscribe("get_start_measure_time", self.get_start_measure_time)#获取开始测量的时间戳时间
+ EventMesh.subscribe("set_start_temp_measure_time", self.set_start_temp_measure_time)#设置体温开始测量的时间戳时间
+ EventMesh.subscribe("get_start_temp_measure_time", self.get_start_temp_measure_time)#获取体温开始测量的时间戳时间
+ EventMesh.subscribe("play_hr_value", self.play_hr_value)#播放心率数值
+ EventMesh.subscribe("play_spo2_value", self.play_spo2_value)#播放心率数值
+ EventMesh.subscribe("play_temp_value", self.play_temp_value)#播放体温数值
- def post_processor_after_instantiation(self):
- EventMesh.subscribe("set_call_state", self.set_call_state)#
+
+ EventMesh.subscribe("set_usb", self.set_usb)#
+ EventMesh.subscribe("get_usb", self.get_usb)#
+
+ EventMesh.subscribe("play_cur_step_event", self.play_cur_step_event)#
+
+ EventMesh.subscribe("set_call_state", self.set_call_state)#1是 拨出去呼叫中 2是播进来 3 是正在通话中 0是无效
EventMesh.subscribe("get_call_state", self.get_call_state)#
EventMesh.subscribe("interup_call_event", self.interup_call_event)#
EventMesh.subscribe("answer_call_event", self.answer_call_event)#接听电话
EventMesh.subscribe("dialin_call_event", self.dialin_call_event)#电话拨进响铃
- EventMesh.subscribe("call_test_event", self.call_test_event)#电话拨进响铃
+ EventMesh.subscribe("dialing_out_event", self.dialing_out_event)#电话呼叫中
+ EventMesh.subscribe("call_test_event", self.call_test_event)#电话拨进响铃测试
+
+ EventMesh.subscribe("dial_out_call_center_cb", self.dial_out_call_center_cb)#电话拨出去
+
+ EventMesh.subscribe("close_audio_play", self.close_audio_play)#关闭音频
+
+
+ EventMesh.subscribe("start_wechat_record", self.start_wechat_record)#手表开始录音
+ EventMesh.subscribe("send_wechat_record", self.send_wechat_record)#发送微聊语音文件to app
+ EventMesh.subscribe("play_wechat_last_amr", self.play_wechat_last_amr)#播放微聊语音最后一条语音文件
+ EventMesh.subscribe("get_wechat_data", self.get_wechat_data)
+ EventMesh.subscribe("set_wechat_data", self.set_wechat_data)
+ EventMesh.subscribe("play_unread_wechat_infor", self.play_unread_wechat_infor)#按键播放最近一条微聊语音
+ EventMesh.subscribe("set_unread_wechat_state", self.set_unread_wechat_state)#设置未读标识
+ EventMesh.subscribe("get_unread_wechat_state", self.get_unread_wechat_state)#获取未读标志
+ EventMesh.subscribe("get_wechat_time", self.get_wechat_time)#获取微聊时间戳
+ EventMesh.subscribe("get_wechat_state", self.get_wechat_state)#获取微聊时间戳
+
+
+ EventMesh.subscribe("get_power_on_state", self.get_power_on_state)#获取开机标识
+ EventMesh.subscribe("get_power_off_state", self.get_power_off_state)#获取关机标识
+
+ EventMesh.subscribe("play_audio_file", self.play_audio_file)#获取播放音频文件
+
+ def play_audio_file(self,event,str_data):#msg 拼接的路径文件
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ power_off = EventMesh.publish("get_power_off_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ if power_off != None:
+ if power_off == 1:
+ return
+ #str_data[0] 路径 str_data[1] 是否需要被打断
+ self.aud.montage_play('U:/static/audio.bin',1,str_data[1],str_data[0])
+
+
+
+
+ def interInfo_queue_thread(self):
+ while True:
+ data = self.interInfo_queue.get()
+ #print("interInfo_queue_thread:data = {}".format(data))
+ if data != None:
+ try:
+ data["func"](data["data"])
+ except Exception as e:
+ print("interInfo_queue_thread:ERROR:{}".format(e))
+ usys.print_exception(e)
+ def publish_message_event_interInfo(self,event,msg):
+ self.interInfo_queue.put(msg)
+
+ def publish_call_event_cb(self, *args, **kwargs):#拨打电话
+ EventMesh.publish("publish_message_event_interInfo",{"func":self.call_timer_cb,"data":0})
+
+ def publish_resatrt_down_event_cb(self, *args, **kwargs):#重启设备
+ EventMesh.publish("publish_message_event_interInfo",{"func":self.powe_resatrt_down_fun,"data":0})
+
+ def publish_power_down_event_cb(self, *args, **kwargs):#关机
+ EventMesh.publish("publish_message_event_interInfo",{"func":self.power_down_fun,"data":0})
+
+ def publish_find_watch_event_cb(self, *args, **kwargs):#查找设备
+ EventMesh.publish("publish_message_event_interInfo",{"func":self.FIND_timer_cb,"data":0})
+
+ def powe_resatrt_down_fun(self, *args):
+ EventMesh.publish("close_all_led")#关闭所有的灯
+ self.aud.stopPlayStream()
+ Power.powerRestart()
+
+ def power_down_fun(self, *args):
+ EventMesh.publish("close_all_led")#关闭所有的灯
+ self.aud.stopPlayStream()
+ Power.powerDown()
+
+
+
+ def close_audio_play(self, event, msg): #msg
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ power_off = EventMesh.publish("get_power_off_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ if power_off != None:
+ if power_off == 1:
+ return
+ self.aud.stopPlayStream()
+
+
+
+ def close_timer_all(self, event, msg):
+ EventMesh.publish("stop_led_timer")#设置参数
+ self.timer.stop()
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ power_off = EventMesh.publish("get_power_off_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ if power_off != None:
+ if power_off == 1:
+ return
+ self.aud.stopPlayStream()
+
+
def answer_call_event(self, event, msg): #
if self.call_state == 2:
- self.timer.stop()
- self.aud.stop()
+ EventMesh.publish("close_timer_all")#
voiceCall.callAnswer()
def set_call_state(self, event, msg): #
self.call_state = msg
def dialin_call_event(self, event, msg):
- self.timer.start(6000, 1, self.call_timer_cb)
- self.aud.play(1, 1, 'U:/static/R_CALL_mp3.mp3') #播放来电铃声
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ power_off = EventMesh.publish("get_power_off_state")#获取开机标识
+ if power_off != None:
+ if power_off == 1:
+ return
+ EventMesh.publish("close_timer_all")#
+ EventMesh.publish("close_wechat_btn_timer")#
+ self.timer.start(6000, 1, self.publish_call_event_cb)
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CALL_mp3"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ # EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
- def call_timer_cb(self,*agrs):
+ def call_timer_cb(self,data):
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ power_off = EventMesh.publish("get_power_off_state")#获取开机标识
+ if power_off != None:
+ if power_off == 1:
+ return
if self.call_state != 2:
- self.timer.stop()
- self.aud.stop()
+ EventMesh.publish("close_timer_all")#
return
- self.aud.play(1, 1, 'U:/static/R_CALL_mp3.mp3') #播放来电铃声
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CALL_mp3"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ # EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ def dial_out_call_center_cb(self, event, msg):#电话拨出去
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ power_off = EventMesh.publish("get_power_off_state")#获取开机标识
+ if power_off != None:
+ if power_off == 1:
+ return
+ print("dial_out_call_center_cb",msg)
+ if self.call_state == 0:
+ EventMesh.publish("close_timer_all")#
+ if msg == None:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ # EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SOS_ALERT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ voiceCall.callStart(str(msg))
+
+
def call_test_event(self, event, msg):
voiceCall.callStart(str("10086"))
def get_call_state(self, event, msg):
return self.call_state
- def interup_call_event(self, event, msg):
- flag = EventMesh.publish("get_call_state")
- if flag != 2:
+ def interup_call_event(self, event, msg):#侧边金属按钮挂断来电
+ flag = EventMesh.publish("get_call_state")
+ if flag == 2 or flag == 3:#电话通话中 或者呼叫中挂断中断
+ voiceCall.callEnd()
+
+ def dialing_out_event(self, event, msg):#侧边金属按键挂断电话呼叫中
+ flag = EventMesh.publish("get_call_state")
+ if flag == 1:#电话呼叫中
voiceCall.callEnd()
-class closeAudioManager(Abstract):#关闭音频文件
- def __init__(self):
- self.aud = audio.Audio(0)
- pass
+
+
+ def play_cur_step_event(self, event, msg): #msg 1 播放当前步数
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ step = EventMesh.publish("get_old_step_value")
+ print("step",step)
+ self.setp_old = step
+ if step <= 10:#
+ if step == 10:#十步
+ str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:# 9步
+ str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(step)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ elif step <= 100:#十 90
+ if step == 100:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_1"),audio_buf.index("R_READ_STEP_2"),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ step_tmp = str(step)
+ shi_value = int(step_tmp[0])#十
+ ge_value = int(step_tmp[1])#个
+ if shi_value > 1:#大于19步
+ if ge_value == 0:#9十步 70十步
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#9十2步
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\
+ audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#十9步
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ elif step <= 1000:
+ if step == 1000:#1千步
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_1"),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ step_tmp = str(step)
+ bai_value = int(step_tmp[0])#百
+ shi_value = int(step_tmp[1])#十
+ ge_value = int(step_tmp[2])#个
+ #101 110 1
+ if shi_value > 0:#110
+ if ge_value == 0:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\
+ audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+ elif step <= 10000:#千
+ if step == 10000:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_1"),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+ else:
+ one_thousand = step//1000 #千
+ one_hundred = step%1000 #百
+ baishu = step%100 #十
+ shishu = step%10 #个
+ step_tmp = str(step)
+ qian = int(step_tmp[0])#千
+ bai_value = int(step_tmp[1])#百
+ shi_value = int(step_tmp[2])#十
+ ge_value = int(step_tmp[3])#个
+ if bai_value <= 0:
+ if shi_value <= 0:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ if ge_value == 0:#1020 1040
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#1021
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ if shi_value <= 0:#1109
+ if ge_value == 0:#1110
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ if ge_value == 0:#1110
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#1117
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ pass
+ elif step <= 100000:#万
+ if step == 100000:#10万步
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3"),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ step_tmp = str(step)
+ wang = int(step_tmp[0])#万
+ qian = int(step_tmp[1])#千
+ bai_value = int(step_tmp[2])#百
+ shi_value = int(step_tmp[3])#十
+ ge_value = int(step_tmp[4])#个
+ if wang > 0 and qian > 0 and bai_value > 0:#11109 11111
+ if shi_value <= 0:#11109
+ if ge_value == 0:#11100
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#11108
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+ else:
+ if ge_value == 0:#11110
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#11116
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+ elif wang > 0 and qian > 0:#11000 11010 11012 11008
+ if shi_value > 0:
+ if ge_value == 0:#11010
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#11016
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ if ge_value == 0:#11000
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#11004
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ elif wang > 0:#1
+ if bai_value > 0:#百
+ if shi_value > 0:#10110
+ if ge_value == 0:#10150
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\
+ audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#10108
+ if ge_value == 0:#10100
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#10108
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ if shi_value > 0:
+ if ge_value == 0:#10090
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#10098
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ def set_usb(self, event, msg): #msg 1 正在充电 2充电已移出 3 充电已满 0
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ power_off = EventMesh.publish("get_power_off_state")#获取开机标识
+ if power_off != None:
+ if power_off == 1:
+ return
+ flag = EventMesh.publish("get_call_state")
+ if msg == 1:
+ self.usbState = msg
+
+ if flag == 3 or flag == 1 or flag == 0:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_IN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
- def post_processor_after_instantiation(self):
- EventMesh.subscribe("close_audio_play", self.close_audio_play)#
+ EventMesh.publish("set_led_time_arg",None)#
+ print("charge R_CHARGE_IN")
+
+
+ elif msg == 2:
+ self.usbState = msg
+ print("charge R_CHARGE_OUT")
+ if flag == 3 or flag == 1 or flag == 0:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_OUT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("stop_led_timer")#设置参数
+ # EventMesh.publish("set_led_time_arg",[0,1000,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.CHARGE_OUT_MODE])#測量成功
+ EventMesh.publish("set_led_time_arg",[1,1,0,led_mode.FLASH_LIGHT_GREEN,4,4,led_mode.CHARGE_OUT_MODE])#測量成功
- def close_audio_play(self, event, msg): #msg 1 开始测量 2 测量成功 3 测量失败未出值
- play_state = EventMesh.publish("get_audio_state")#音频播放状态
- if play_state != None:
- if play_state != 0:#在上一个界面在播放音频时切换界面则关闭 以免一直播放
- self.aud.stop()
+ elif msg == 3:
+ self.usbState = msg
+ print("charge full")
+
+ if flag == 3 or flag == 1 or flag == 0:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_FULL"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("set_led_time_arg",None)#
-class resetFactoryUnbindManager(Abstract):#按键按下恢复出厂设置解绑app
- def __init__(self):
- pass
-
+ def get_usb(self, event, msg):
+ return self.usbState
- def post_processor_after_instantiation(self):
- EventMesh.subscribe("reset_factor_setiing", self.reset_factor_setiing)#恢复出厂设置
-
- def reset_factor_setiing(self, event, msg):
- ret = 0
- ret = ql_fs.path_exists("/usr/static/storage_file")#电话本
- if ret == True:
- ql_fs.rmdirs("/usr/static/storage_file")
- ql_fs.mkdirs("/usr/static/storage_file")
- EventMesh.publish("alipay_unbind")
- if EventMesh.publish(constants.EVENT.GET_CONNECT) == 0:
+ def open_power_on(self, event, msg): #msg 1 开机 2 关机 3 重启 4恢复出厂设置
+ EventMesh.publish("close_timer_all")#
+ if msg == 1:
+ self.power_on_flag = 1
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))
+ EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("set_led_time_arg",[1,2,4*10,led_mode.FLASH_LIGHT_GREEN,4,2,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1000,200,10,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+ self.power_on_flag = 0
+ self.pwk_timer.start(5000,0,self.power_on_cb)
+ elif msg == 2:
+ flag = EventMesh.publish("get_call_state")
+ if flag != 0:#电话呼叫中
+ voiceCall.callEnd()
+ step = EventMesh.publish("get_old_step_value")
+ self.read_data = EventMesh.publish("get_storage_data")
+ if step != 0:
+ EventMesh.publish("set_storage_config",["old_step",step])
+ date_tmp = utime.localtime()
+ EventMesh.publish("set_storage_config",["old_timesecond",date_tmp])#关机保存一个是时间
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))
+ print("audio hecheng!!!!!")
+
+ EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("set_led_time_arg",[1,2,4*10,led_mode.FLASH_LIGHT_RED,4,2,led_mode.OTHER_MEASURE_MODE])#
+ self.power_off = 1
+ # EventMesh.publish("set_led_time_arg",[1000,200,10,led_mode.FLASH_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#
+ self.timer.start(6000,0,self.publish_power_down_event_cb)
+ elif msg == 3:
+ flag = EventMesh.publish("get_call_state")
+ if flag != 0:#电话呼叫中
+ voiceCall.callEnd()
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))
+ EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("stop_led_timer")#设置参数
+ self.power_off = 1
+ self.timer.start(8000,0,self.publish_resatrt_down_event_cb)
+ #EventMesh.publish("set_led_time_arg",[3000,4000,1,led_mode.LONG_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE])#
+ elif msg == 4:
+ flag = EventMesh.publish("get_call_state")
+ if flag != 0:#电话呼叫中
+ voiceCall.callEnd()
+ EventMesh.publish("stop_led_timer")#设置参数
+ self.power_off = 1
+ ret = 0
+ ret = ql_fs.path_exists("/usr/static/storage_file")#
+ if ret == True:
+ ql_fs.rmdirs("/usr/static/storage_file")
+ ql_fs.mkdirs("/usr/static/storage_file")
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:
+ EventMesh.publish(constants.PROTOCOL.DLT_SEND)
+ self.aud.stopPlayStream()
+ self.timer.start(6*1000,0,self.fun)
+
+ def fun(self,*argc):
+ self.aud.stopPlayStream()
Power.powerRestart()
- else:
- EventMesh.publish(constants.PROTOCOL.DLT_SEND)
-
-class hrandBloodOxgenManager(Abstract):#查找设备
- def __init__(self):
- self.timer = osTimer()
- self.get_hr_state = 0
- self.get_spo2_state = 0
- pass
-
-
- def post_processor_after_instantiation(self):
- EventMesh.subscribe("close_hr_sop2", self.close_hr_sop2)#
+
+ def power_on_cb(self, msg): #msg 开机标识
+ self.power_on_flag = 1
+ self.pwk_timer.stop()
+
+ def get_power_on_state(self, event, msg):
+ return self.power_on_flag
+
+ def get_power_off_state(self, event, msg):
+ return self.power_off
- def close_hr_sop2(self, event, msg): #msg 1 开始测量 2 测量成功 3 测量失败未出值
+ def close_hr_sop2(self, event, msg): #msg 关闭心率血氧测试
get_hr_state = EventMesh.publish("get_hr_state")
get_spo2_state = EventMesh.publish("get_spo2_state")
if get_hr_state != None and get_spo2_state != None:
EventMesh.publish("set_spo2_state",0)#2代表后台进入测试
EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
-#imei = EventMesh.publish(constants.EVENT.GET_IMEI)
-class playImeiManager(Abstract):
- def __init__(self):
- self.timer = osTimer()
- self.aud = audio.Audio(0)
- self.aud.set_pa(Pin.GPIO29)
- self.aud.setVolume(11)
- self.play_count = 0
+ def set_manual_measure_mode(self, event, msg): #手动测试 1心率 2 血氧 3 体温
+ if msg == 1:
+ get_hr_state = EventMesh.publish("get_hr_state")
+ if get_hr_state != 1:#不是手动测试直接打断
+ print("set_manual_measure_mode",msg)
+ EventMesh.publish("set_hr_state",1)
+ EventMesh.publish("set_start_measure_time")#设置开始测量的时间戳时间
+ EventMesh.publish(constants.EVENT.START_HEART) #手动心率测试
+ elif msg == 2:
+ get_spo2_state = EventMesh.publish("get_spo2_state")
+ if get_hr_state == 0:
+ if get_spo2_state != 1:
+ print("set_manual_measure_mode",msg)
+ EventMesh.publish("set_spo2_state",1)
+ EventMesh.publish("set_start_measure_time")#设置开始测量的时间戳时间
+ EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN) #手动血氧测试
+ elif msg == 3:
+ get_temp_state = EventMesh.publish("get_temp_state")
+ if get_temp_state != 1:
+ print("set_manual_measure_mode",msg)
+ EventMesh.publish("set_temp_state",1)
+ EventMesh.publish("set_start_temp_measure_time")#设置开始测量的时间戳时间
+ EventMesh.publish(constants.EVENT.START_TEMP)#手动体温测试
pass
-
- def post_processor_after_instantiation(self):
- EventMesh.subscribe("play_imei_event", self.play_imei_event)#播報imei号
-
+ def set_start_measure_time(self, event, msg): #手动测试 1心
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ self.timeSec = time_tmp
+ pass
- def play_imei_event(self, event, msg): #msg 1 开始测量 2 测量成功 3 测量失败未出值
- self.play_count = 0
- self.timer.start(1000,1,self.play_timer_cb)
-
- def play_timer_cb(self,*agrs):
- if self.play_count > 14:
- self.play_count = 0
- self.timer.stop()
- return
- imei = EventMesh.publish(constants.EVENT.GET_IMEI)
- play_state = EventMesh.publish("get_audio_state")#音频播放状态
- if play_state != None:
- if play_state == 0:
- num = int(imei[self.play_count])
- self.play_count+=1
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(num)) #播放imei号
-from machine import RTC
-class playCurTimeManager(Abstract):#播放当前时间
- def __init__(self):
- self.timer = osTimer()
- self.aud = audio.Audio(0)
- self.aud.set_pa(Pin.GPIO29)
- self.aud.setVolume(11)
- self.play_count = 0
- self.old_hour = 0
- self.old_min = 0
- self.hour_tmp = ""
- self.min_tmp = ""
+ def get_start_measure_time(self, event, msg): #手动测试
+
+ return self.timeSec
+
+ def set_start_temp_measure_time(self, event, msg): #
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ self.timeTempSec = time_tmp
pass
+
+ def get_start_temp_measure_time(self, event, msg): #
+ return self.timeTempSec
+
+ def mearsure_cb(self, event, msg):
+ if msg == 1:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ elif msg == 2:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ elif msg == 3:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_SPO2_TITLE"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ elif msg == 4:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+
+ def play_temp_value(self, event, msg): #播放体温数值
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ if msg != None:
+ EventMesh.publish("close_timer_all")#
+ if msg > 0:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("set_hr_blood_led",2)#测量成功
+ self.temp_value = msg
+ self.timer.start(2*1000,1,self.play_temp_fun)
+ else:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("set_hr_blood_led",3)#测量异常
+ def play_temp_fun(self,argc): #播放体温数值
+ data = self.temp_value
+ if data > 42:
+ data = 42
+ data_tmp = str(data)
+ if data_tmp.find(".") != -1:
+ temp_shi = data_tmp.split('.')[0]//10
+ temp_ge = data_tmp.split('.')[0]%10
+ dot_ge = data_tmp.split('.')[1]%10
+ if temp_ge > 0:#37.0
+ if dot_ge > 0:#37.5
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(temp_ge)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),\
+ audio_buf.index("R_READ_TIME_{}".format(dot_ge)))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ else:#37.0
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(temp_ge)))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#30.0 30.6
+ if dot_ge > 0:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(dot_ge)))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\
+ audio_buf.index("R_READ_STEP_3"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
- def post_processor_after_instantiation(self):
- EventMesh.subscribe("play_cur_time_event", self.play_cur_time_event)#播報imei号
+ else:
+ temp_shi = data_tmp//10
+ temp_ge = data_tmp%10
-
+ if temp_ge > 0:#45
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(temp_ge)))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\
+ audio_buf.index("R_READ_STEP_3"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
- def play_cur_time_event(self, event, msg): #msg 1 开始测量 2 测量成功 3 测量失败未出值
- self.play_count = 0
- self.timer.start(1000,1,self.play_timer_cb)
-
- def play_timer_cb(self,*agrs):
-
- data = RTC().datetime()
- hour = data[4]
- min = data[5]
- self.hour_tmp = str(hour)
- self.min_tmp = str(min)
- shi_value = int(self.step_tmp[0])#十
- ge_value = int(self.step_tmp[1])#个
-
- hour_tmp1 = hour//10
- hour_tmp2 = hour%10
- if hour != self.old_hour or min != self.old_min:
- self.play_count = 0
-
- self.old_hour = hour
- self.old_min = min
- play_state = EventMesh.publish("get_audio_state")#音频播放状态
- if play_state != None:
- if play_state == 0:
- self.play_count+=1
- self.hour_tmp = str(hour)
- self.min_tmp = str(min)
- shi_value = int(self.step_tmp[0])#十
- ge_value = int(self.step_tmp[1])#个
- if hour <= 9:
- if hour == 0:
- pass
+ def play_hr_value(self, event, msg): #播放心率数值
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ if msg != None:
+ EventMesh.publish("close_timer_all")#
+ if msg >= 50:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ self.hr_value = msg
+ EventMesh.publish("set_hr_blood_led",2)#测量成功
+ self.timer.start(2*1000,1,self.play_hr_fun)
+
+
+ else:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("set_hr_blood_led",3)#测量异常
+
+ def play_spo2_value(self, event, msg): #播放血样数值
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ if msg != None:
+ EventMesh.publish("close_timer_all")#
+ if msg >= 85:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("set_hr_blood_led",2)#测量成功
+ self.spo2_value = msg
+ self.timer.start(2*1000,1,self.play_spo2_fun)
+ else:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("set_hr_blood_led",3)#测量异常
+
+ def play_spo2_fun(self,argc):#播放血氧测试值
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ data = self.spo2_value
+ if data > 100:
+ data = 100
+ if data == 100:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_SPO2_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\
+ audio_buf.index("R_READ_STEP_2"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_SPO2_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(data%10)))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+
+ def play_hr_fun(self,argc):#播放心率测试值
+
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ data = self.hr_value
+ if data > 220:
+ data = 220
+ if data < 100:
+ if data%10 == 0:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\
+ audio_buf.index("R_READ_STEP_3"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(data%10)))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ shi = (data%100)//10 #210
+ ge = (data%100)%10
+ #210 234
+ if shi > 0:
+ if ge == 0:#210 230 120
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi)),audio_buf.index("R_READ_STEP_3"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
- if min // 10 != 0:#09:45
- if min % 10 > 0:
-
- pass
- else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi)),audio_buf.index("R_READ_STEP_3"),\
+ audio_buf.index("R_READ_TIME_{}".format(ge)))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ if ge == 0:#200 100 209 108
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\
+ audio_buf.index("R_READ_STEP_2"))
+ EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge)))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+
+ def set_sim_mode(self, event, msg): #mode 1 蓝灯闪烁 可识别卡 但未联网 2 可绑定appsim正常 3 手表不识别卡或者未插卡
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ mode = 0
+ signal = EventMesh.publish("screen_get_sig")
+ if signal != None:
+ if signal >= 0 and signal <= 31:#有卡
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网提示关机
+ mode = 2
+ else:
+ mode = 1
+ else:#未插卡
+ mode = 3
+ if mode == 1:#白色灯
+ EventMesh.publish("set_led_time_arg",[1,1,6,led_mode.FLASH_LIGHT_WHITE,4,2,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_WHITE,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SIM_FAILE"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+ elif mode == 2:#蓝灯色灯
+ EventMesh.publish("set_led_time_arg",[1,1,6,led_mode.FLASH_LIGHT_GREEN,4,2,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SIM_CONNECT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+ elif mode == 3:#红灯闪烁
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SIM"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("set_led_time_arg",[1,1,6,led_mode.FLASH_LIGHT_RED,4,2,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+ pass
+ pass
+
+ def dial_sos_phone(self, event, msg): #拨打紧急求助电话
+ flag = EventMesh.publish("get_call_state")
+ if flag == 0:
+
+ signal = EventMesh.publish("screen_get_sig")
+ if signal != None:
+ if signal >= 0 and signal <= 31:#有卡
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网提示关机
+ sos_number = EventMesh.publish("get_dial_sos_number")
+ if sos_number != None:
+ if len(sos_number) != 0:
+ EventMesh.publish("close_timer_all")#
+ EventMesh.publish("save_phonename",sos_number[0])
+ EventMesh.publish("save_phonenum",sos_number[0])
+ EventMesh.publish("set_sos_num",0)
+ EventMesh.publish("set_sos_flag",1)
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SOS_ALERT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ voiceCall.callStart(sos_number[0])
+ else:#未设置sos紧急求助号码
+ EventMesh.publish("close_timer_all")#
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
- else:
- pass
+ else:
+ EventMesh.publish("close_timer_all")#
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SIM_FAILE"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#未插卡
+ EventMesh.publish("close_timer_all")#
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SIM"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ def send_find_watch(self, event, msg): #发送查找设备指令
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ power_off = EventMesh.publish("get_power_off_state")#获取开机标识
+ if power_off != None:
+ if power_off == 1:
+ return
+ flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备
+ wechat_state = EventMesh.publish("get_wechat_state")
+ if flag == 0 and wechat_state == 0:
+ EventMesh.publish("close_timer_all")#
+ self.find_state = 1
+ self.FIND_timer_count = 0
+ self.timer.start(3000,1,self.publish_find_watch_event_cb)
+ EventMesh.publish("set_led_time_arg",[1,1,330,led_mode.LONG_LIGHT_GREEN,2,1,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1000,33000,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("audio_audio_haixiu"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ def stop_find_watch(self, event, msg):
+ if self.find_state == 1:
+ self.find_state = 0
+ self.FIND_timer_count = 0
+ EventMesh.publish("stop_led_timer")#设置参数
+ self.aud.stopPlayStream() #播放声音
+ self.timer.stop()
+
+ def FIND_timer_cb(self, data):
+ if self.find_state == 1:
+ print("self.FIND_timer_count:{}".format(self.FIND_timer_count))
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("audio_audio_haixiu"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ self.FIND_timer_count += 1
+ if self.FIND_timer_count > 10: #120秒30s
+ EventMesh.publish("STOP_FIND_WATCH")
+
+ def stop_FIND(self) :
+ self.timer.stop()
+
+
+ def play_cur_time_event(self, event, msg): #播放当前时间
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+
+ data = RTC().datetime()
+ hour = data[4]
+ min = data[5]
+ print("hour",hour,min)
+ self.old_hour = hour
+ self.old_min = min
+ if self.old_hour == 0:
+ if self.old_min <= 9:#00:09
+ if self.old_min == 0:#0点整
+ str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#0点09分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(self.old_min))\
+ ,audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
- elif hour <= 20:
- if hour % 10 != 0:
- if min // 10 != 0:#10:56
- if min % 10 > 0:
- pass
- else:
- pass
- else:
- pass
+
+ else:
+ if self.old_min % 10 == 0:#0点2十分 0点3十分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+ else:#0点2十8分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10)),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+
+ elif self.old_hour <= 9:#8:09 9:20 9:45
+ if self.old_min <= 9:#9点09分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(self.old_hour))\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(self.old_min))\
+ ,audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ else:
+ if self.old_min % 10 == 0:#9点2十分 9点4十分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(self.old_hour))\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min //10))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#9点2十4分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(self.old_hour))\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min //10))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10)),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+
+ else:#12:0
+ if self.old_min == 0:#12:00 13:00 15:00 20
+ self.play_count+=1
+ hour_shi = self.old_hour//10
+ hour_ge = self.old_hour%10
+ if self.old_hour == 10:#十点整
+ str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ elif self.old_hour == 20:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
else:
- if min // 10 != 0:#10:35
- if min % 10 > 0:
- pass
- else:
- pass
+ if hour_shi <= 1:#十3点整
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_READ_TIME_{}".format(hour_ge)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
else:
- pass
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
else:
- if min // 10 != 0:#23:34
- if min % 10 > 0:
- pass
+ if self.old_hour == 10:#10:09 10:10
+ if self.old_min <= 9:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0")\
+ ,audio_buf.index("R_READ_TIME_{}".format(self.old_min)),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
- pass
+ if self.old_min % 10 == 0:#十点2十分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min//10))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#十点2十1分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min//10))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(self.old_min%10))\
+ ,audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
else:
- pass
-
-
+ if self.old_hour < 20:#19:00
+ if self.old_min <= 9:#19:09
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT")\
+ ,audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10))\
+ ,audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ else:#19:18 19:40 19:56
+ if self.old_min % 10 == 0:#十9点2十分 十9点3十分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT")\
+ ,audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10)),audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#十9点2十1分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT")\
+ ,audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10)),audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10)),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ hour_shi = self.old_hour//10
+ hour_ge = self.old_hour%10
- # print("hour:{} min:{} week:{} date1:{} date2:{} data:{}".format(hour,min,week,date1,date2,data))
- if self.play_count > 14:
- self.play_count = 0
- self.timer.stop()
- return
- imei = EventMesh.publish(constants.EVENT.GET_IMEI)
- play_state = EventMesh.publish("get_audio_state")#音频播放状态
- if play_state != None:
- if play_state == 0:
- num = int(imei[self.play_count])
- self.play_count+=1
- self.aud.play(1, 1, 'U:/static/R_READ_TIME_{}.mp3'.format(num)) #播放imei号
+ min_shi = self.old_min//10
+ min_ge = self.old_min%10
+
+ #20:08 20:18 20:20
+ if hour_ge == 0:
+ if self.old_min <= 9:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0")\
+ ,audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ if min_ge == 0:#2十点2十分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#2十点2十1分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ else:#21:08 21:18
+ if self.old_min <= 9:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0")\
+ ,audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ if min_ge == 0:#2十3点3十分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#2十3点3十1分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+
+ def play_timer_cb_1(self,*agrs):
+ return
+
+ def play_center_phone(self, event, msg): #msg
+ flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许设备再次拨出
+ if flag == 0:
+ EventMesh.publish("close_timer_all")#
+ center_dial = EventMesh.publish("get_storage_config","center_dial")
+ if center_dial != None:
+ if len(center_dial) > 0:
+ voiceCall.callStart(str(center_dial))
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SOS_ALERT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#未设置号码
+ print("play_center_phone")
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+
-class wechatInforManager(Abstract):#微聊相关信息
- def __init__(self):
- self.MXA_MSG = 10
- self.wechat_recode_list = {}
- self.wechat_num = 0
- self.read_data = {}
- self.volum_size = 8
- self.msg_tmp = ""
- check_txt = ql_fs.path_exists("/usr/static/storage_file/wechat_record.json")
- if check_txt == True :
- with open("/usr/static/storage_file/wechat_record.json","r") as fd:#音频文件编号
- self.wechat_recode_list = ujson.load(fd)
- if not self.wechat_recode_list:
- self.wechat_recode_list = {}
- self.wechat_num = 0
- else:
- sort_tmp = {}
- sort_tmp = self.wechat_recode_list.values()
- sort_new = {}
- sort_new = sorted(sort_tmp, key = lambda i: i['timesec'],reverse = True)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条
- i = 0
- for sort_new_tmp in sort_new: #字典 key value
- i+=1 # 1
- if i >= 1:#
- self.wechat_num = sort_new_tmp["num"]
- break
- else :
- self.wechat_recode_list = {}
+ def play_imei_event(self, event, msg): #msg
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ imei = EventMesh.publish(constants.EVENT.GET_IMEI)
+ print(imei)
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(imei[0]))\
+ ,audio_buf.index("R_READ_TIME_{}".format(imei[1])),audio_buf.index("R_READ_TIME_{}".format(imei[2])),audio_buf.index("R_READ_TIME_{}".format(imei[3])),\
+ audio_buf.index("R_READ_TIME_{}".format(imei[4])),audio_buf.index("R_READ_TIME_{}".format(imei[5])),audio_buf.index("R_READ_TIME_{}".format(imei[6])),audio_buf.index("R_READ_TIME_{}".format(imei[7])),\
+ audio_buf.index("R_READ_TIME_{}".format(imei[8])),audio_buf.index("R_READ_TIME_{}".format(imei[9])),audio_buf.index("R_READ_TIME_{}".format(imei[10])),audio_buf.index("R_READ_TIME_{}".format(imei[11])),\
+ audio_buf.index("R_READ_TIME_{}".format(imei[12])),audio_buf.index("R_READ_TIME_{}".format(imei[13])),audio_buf.index("R_READ_TIME_{}".format(imei[14])))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
-
- self.record_test = audio.Record()
- self.aud = audio.Audio(0)
- self.aud.set_pa(Pin.GPIO29)
- self.timeSecond = 0
- self.wechat_show = 0
- self.sort_new = {}
- self.time_min = 0
+ def get_unread_wechat_state(self,event, msg):
- def post_processor_after_instantiation(self):
- EventMesh.subscribe("start_wechat_record", self.start_wechat_record)#手表开始录音
- EventMesh.subscribe("send_wechat_record", self.send_wechat_record)#发送微聊语音文件to app
- EventMesh.subscribe("play_wechat_last_amr", self.play_wechat_last_amr)#播放微聊语音最后一条语音文件
- EventMesh.subscribe("get_wechat_data", self.get_wechat_data)
- EventMesh.subscribe("set_wechat_data", self.set_wechat_data)
- EventMesh.subscribe("play_wechat_last_amr", self.play_unread_wechat_infor)#播放微聊语音最后一条语音文件
+ return self.set_unread_wechat
+
+ def set_unread_wechat_state(self, event, msg):
+ self.set_unread_wechat = msg
def get_wechat_data(self,event, msg):
- return [self.MXA_MSG ,self.wechat_num]
+ return [self.MXA_MSG ,self.wechat_recode_list]
def set_wechat_data(self, event, msg):
print("set_wechat_data1 ",msg,self.wechat_num)
- # self.MXA_MSG = msg[0]
- # self.wechat_recode_list = msg[1]
- # self.wechat_num = self.wechat_recode_list["num"]
- self.wechat_num = msg[1]
- tmp = {}
- date_tmp = utime.localtime()
- time_tmp = utime.mktime(date_tmp)
-
-
- tmp["timesec"] = time_tmp #时间戳 到时候按时间戳排序
- tmp["num"] = self.wechat_num
- tmp["read"] = 1#1 代表未读 0 代表已读
- self.wechat_recode_list[self.wechat_num] = tmp
-
- print("self.wechat_recode_list :{}".format(self.wechat_recode_list))
-
+ self.MXA_MSG = msg[0]
+ self.wechat_recode_list = msg[1]
+ self.wechat_num = self.wechat_recode_list["num"]
with open("/usr/static/storage_file/wechat_record.json","w",encoding="utf-8") as fd:
ujson.dump(self.wechat_recode_list,fd)
#写编号
print("set_wechat_data2:{} ".format(self.wechat_num))
+
+ def get_wechat_time(self, event, msg):
+ return [self.press_btn,self.timeSecond]
+
def start_wechat_record(self, event, msg): #开始录音相关配置
- date_tmp = utime.localtime()
- time_tmp = utime.mktime(date_tmp)
- self.timeSecond = time_tmp#保存按下的时间长s
- self.aud.setVolume(11)#设置音量最大
- print("talking1.0")
-
- self.record_test.start("/usr/static/storage_file/swechat.amr",16)
- pass
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网不需要录音
+
+ if self.press_btn == 0:
+ self.press_btn = 1
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ EventMesh.publish("set_led_time_arg",[1,1,160,led_mode.LONG_LIGHT_GREEN,4,2,led_mode.WECHAT_LED_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1000,1000,1,led_mode.LONG_LIGHT_GREEN,led_mode.OPEN_LONG_LIGHT_MODE,led_mode.WECHAT_LED_MODE])#測量成功
+
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ self.timeSecond = time_tmp#保存按下的时间长s
+ self.aud.setVolume(11)#设置音量最大
+
+ print("talking1.0")
+ if self.wechat_num >= self.MXA_MSG:
+ self.wechat_num = 0
+ self.wechat_num += 1
+ self.wechat_show = self.wechat_num
+ self.record_test.start("/usr/static/storage_file/{}.amr".format(self.wechat_show),16)
+ else:
+ self.timeSecond = 0
+ self.press_btn = 0
+ def get_wechat_state(self, event, msg):
+ return self.press_btn
def send_wechat_record(self, event, msg): #发送录音文件
- date_tmp = utime.localtime()
- time_tmp = utime.mktime(date_tmp)
- countdown = time_tmp - self.timeSecond
- if countdown <= 0:#使用时间错相减得到录音时间校准确
- countdown = 1
- EventMesh.publish("stop_led_timer")#设置参数
+ if self.press_btn == 1:
+ self.press_btn = 0
+ self.record_test.stop() #停止錄音
+ EventMesh.publish("stop_led_timer")#关闭灯
+ EventMesh.publish("set_led_time_arg",[1,1,0,led_mode.FLASH_LIGHT_GREEN,4,2,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[0,1000,1,led_mode.LONG_LIGHT_GREEN,led_mode.OPEN_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#測量成功
+ self.countdown_old = 0
+
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+
+ self.countdown_old = msg
+ if self.countdown_old >= 15:
+ self.countdown_old = 15
+ if self.countdown_old <= 0:
+ #录音时间太短
+ return
+ else:
+ self.wechat_recode_list["%02d"%(self.wechat_show)] = "read:1"
+ self.wechat_recode_list["num"] = self.wechat_show
+ print("self.wechat_recode_list :{}".format(self.wechat_recode_list))
+
+ with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:
+ ujson.dump(self.wechat_recode_list,fd)
+ print("send wechat data!!!!!!!!!!!!!!!!!!!!!")
+
+ check_txt = ql_fs.path_exists("/usr/static/storage_file/{}.amr".format(self.wechat_show))
+ if check_txt == True :
+ path = "/usr/static/storage_file/{}.amr".format(self.wechat_show)
+ with open(path,"rb") as fd:
+ buf = bytearray(ql_fs.path_getsize(path))
+ fd.readinto(buf)
+ senddata = [self.countdown_old,buf]
+ EventMesh.publish(constants.PROTOCOL.TK_SEND,senddata)
+
+
+ # check_txt = ql_fs.path_exists("/usr/static/storage_file/{}.amr".format(self.wechat_show))
+ # if check_txt == True :
+ # path = "/usr/static/storage_file/{}.amr".format(self.wechat_show)
+ # with open(path,"rb") as fd:
+ # buf = bytearray(ql_fs.path_getsize(path))
+ # fd.readinto(buf)
+ # senddata = [self.countdown_old,buf]
+ # EventMesh.publish(constants.PROTOCOL.TK_SEND,senddata)
- print("countdown!!!!!!!!!",countdown)
- self.record_test.stop() #停止录音
- print("send wechat data!!!!!!!!!!!!!!!!!!!!!")
- path = "/usr/static/storage_file/swechat.amr"
- with open(path,"rb") as fd:
- buf = bytearray(ql_fs.path_getsize(path))
- fd.readinto(buf)
- senddata = [countdown,buf]#发送录音二进制文件
- EventMesh.publish(constants.PROTOCOL.TK_SEND,senddata)
- pass
def play_wechat_last_amr(self, event, msg):#播放微聊最后一条语音文件
- if self.wechat_recode_list != {}:
- print("self.wechat_num",self.wechat_num)
- if self.wechat_num > 0:
- self.aud.setVolume(11)#设置音量最大
- self.aud.stop()
- self.aud.play(1, 1, '/usr/static/storage_file/{}.amr'.format(self.wechat_num)) #文件名前面要加上路径
- def play_unread_wechat_infor(self):#未读微聊语音
- sort_tmp = {}
- sort_tmp = self.wechat_recode_list.values()
- sort_new = {}
- sort_new = sorted(sort_tmp, key = lambda i: i['timesec'],reverse = True)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+
+ # check_amr = ql_fs.path_exists("/usr/static/storage_file/wechat.amr")
+ # if check_amr == True :
+ # self.aud.play(1, 1, '/usr/static/storage_file/wechat.amr') #文件名前面要加上路径
+ # return
+ if self.wechat_recode_list != None:
+ num = 0
+ play_state = 0
+ if len(self.wechat_recode_list) > 1:
+ num = self.wechat_recode_list["num"]
+ #print("self.wechat_recode_list1:{}".format(self.wechat_recode_list))
+ if num != 0:
+ last_num = str("%02d"%(num))
+ last_tmp = self.wechat_recode_list[last_num]
+ last_read = int(last_tmp.split(":")[1])
+ if last_read == 1:#如果最后一条没有读则读最新的一条
+ self.wechat_recode_list[last_num] = "read:0"
+ self.wechat_recode_list["num"] = num
+ with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:
+ ujson.dump(self.wechat_recode_list,fd)
+ else:
+ sotr_new = {}
+ sotr_new = sorted(self.wechat_recode_list.keys(), reverse=True)#降序排序
+ # print("sotr_new:{}".format(sotr_new))
+ for i in range(len(self.wechat_recode_list)-1):#1 01 02
+ key = sotr_new[i+1]
+ num_id = int(key)
+ #print("key:{} num_id:{}".format(key,num_id))
+ if key in self.wechat_recode_list:#
+ str_tmp = self.wechat_recode_list[key]
+ read = int(str_tmp.split(":")[1])
+ if read != 0:#未读是按一下播放下一条同时删除
+ check_amr = ql_fs.path_exists("/usr/static/storage_file/{}.amr".format(num_id))#还要检测这个文件是否存在
+ if check_amr == True:
+ self.wechat_recode_list[key] = "read:0"
+ self.wechat_recode_list["num"] = num
+ print("self.wechat_recode_list2:{} num_id:{} num:{}".format(self.wechat_recode_list,num_id,num))
+ self.aud.play(1, 1, '/usr/static/storage_file/{}.amr'.format(num_id)) #文件名前面要加上路径
+ play_state = 1
+ with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:
+ ujson.dump(self.wechat_recode_list,fd)
+ break
+ else:
+ continue
+ else:
+ continue
+ else:
+ continue
+ #print("play_state:{}".format(play_state))
+ if play_state == 0:
+ check_amr = ql_fs.path_exists("/usr/static/storage_file/{}.amr".format(num))#还要检测这个文件是否存在
+ if check_amr == True:
+ self.aud.play(1, 1, '/usr/static/storage_file/{}.amr'.format(num)) #文件名前面要加上路径
+
+ def play_unread_wechat_infor(self,event,msg):#未读微聊语音
+ if self.wechat_recode_list != None:
+ num = 0
+ play_state = 0
+ if len(self.wechat_recode_list) > 1:
+ num = self.wechat_recode_list["num"]
+ if num != 0:
+ for i in range(len(self.wechat_recode_list)-1):#1 01 02
+ key = "%02d"%(i+1)
+ if key in self.wechat_recode_list:#
+ str_tmp = self.wechat_recode_list[key]
+ read = int(str_tmp.split(":")[1])
+ if read == 1:#未读是按一下播放下一条同时删除
+ play_state = 1
+ else:
+ continue
+ else:
+ continue
+ if play_state == 1:#设置未读语音状态
+ EventMesh.publish("set_unread_wechat_state",1)
+ else:
+ EventMesh.publish("set_unread_wechat_state",0)
+ self.updateTime = 0
+
+
+ state = EventMesh.publish("get_unread_wechat_state")#
date_tmp = utime.localtime()
time_tmp = utime.mktime(date_tmp)
+ if state != None:
+ if state == 1:
+ EventMesh.publish("set_led_time_arg",[1,1,4,led_mode.FLASH_LIGHT_GREEN,2,1,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+ if self.updateTime == 0:
+ self.updateTime = time_tmp
+ if self.updateTime != 0:
+ if time_tmp - self.updateTime >= 10*60:
+ self.updateTime = time_tmp
+ #播放音频文件
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2 and self.press_btn == 0:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_UNREAD_WECHAT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ self.updateTime = 0
- unread = 0
- for sort_new_tmp in sort_new: #字典 key value
- read = sort_new_tmp["read"]
- if read == 1:#未读1标识只要遇到read标识为1则跳出
- unread = 1
- break
- if unread == 1:#未读提示语音和亮灯
- #每5s闪一下
- #每十分钟语音提醒一次
- EventMesh.publish("set_led_time_arg",[5000,400,2,led_mode.FLASH_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE])#红灯5s闪一次
- #self.time_min = 0 20 - 10 = 19
- #10 20-10 90-10 100-10
- if self.time_min == 0 or time_tmp - self.time_min >= 10*60:
- self.time_min = time_tmp
- #语音提示播放
- pass
-
- pass
- else:
- self.time_min = 0
- pass
-class FindWatchManager(Abstract):#查找设备
- def __init__(self):
- self.volum_size = 8
- check_volum = ql_fs.path_exists("/usr/static/storage_file/config.json")
- if check_volum == True :
- with open("/usr/static/storage_file/config.json","r") as fd:#音频文件编号
- self.read_data = ujson.load(fd)
- if self.read_data != {}:
- b = str("volum") in self.read_data.keys()
- if b == True:
- self.volum_size = self.read_data["volum"]
- else:
- self.volum_size = 8
- else:
- self.volum_size = 8
- else:
- self.volum_size = 8
- self.aud = audio.Audio(0)
- self.aud.set_pa(Pin.GPIO29)
- self.aud.setVolume(self.volum_size)
- self.timer = osTimer()
- self.find_state = 0
-
- def post_processor_after_instantiation(self):
- EventMesh.subscribe("OPEN_FIND_WATCH", self.send_find_watch)#
- EventMesh.subscribe("STOP_FIND_WATCH", self.stop_find_watch)#是否需要关闭查找设备
- def stop_find_watch(self, event, msg):
- if self.find_state == 1:
- self.find_state = 0
- self.FIND_timer_count = 0
- EventMesh.publish("stop_led_timer")#设置参数
- self.aud.stop() #播放声音
- self.timer.stop()
- def send_find_watch(self, event, msg):
- flag = EventMesh.publish("get_call_state")
- if flag != 2:
- self.find_state = 1
- self.FIND_timer_count = 0
- self.timer.start(3000,1,self.FIND_timer_cb)
- self.aud.play(1, 1, 'U:/static/audio_audio_haixiu.mp3') #播放声音
-
- def FIND_timer_cb(self, *args):
- if self.find_state == 1:
- print("self.FIND_timer_count:{}".format(self.FIND_timer_count))
- if EventMesh.publish("get_led_state") == 0:
- EventMesh.publish("set_led_time_arg",[(38000-self.FIND_timer_count*3),1000,1,led_mode.LONG_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE])#查找设备绿灯长亮37s
- self.aud.play(1, 1, 'U:/static/audio_audio_haixiu.mp3')
- self.FIND_timer_count += 1
- if self.FIND_timer_count > 10: #120秒30s
- EventMesh.publish("STOP_FIND_WATCH")
-
- def stop_FIND(self) :
- self.timer.stop()
-
-
+
+
+class wechatInforManager(Abstract):#微聊相关信息
+ pass
+
class BtnDevice(Abstract):
self.__tp = tp
self.pwk_press = 0
self.pwk_count = 0
- self.GPIO26_status = 0
+ self.GPIO26_status = 1#默认是低电平
self.powerKey_status = 0
self.pin_timer = osTimer()
self.sosKey = 0
self.wechatKey = 0
- self.sosKey_status = 0
- self.WeChatKey_status = 0
+ self.sosKey_status = 1#默认是低电平
+ self.WeChatKey_status = 1#默认是低电平
self.wechatKey_timer = osTimer()
self.wechatKey_count = 0
self.sosKey_timeout = osTimer()
self.sosKey_press_count = 0
+
+ self.pwkey_timer = osTimer()
+ self.pwKey_press_count = 0
+ self.pwkey_count = 0
+ self.pwkey_press = 0
+ self.led_state = 0
+
+ self.btnInfo_queue = Queue()
+ _thread.start_new_thread(self.btnInfo_queue_thread, ())
+ EventMesh.subscribe("publish_message_event_btnInfo",self.publish_message_event_btnInfo)
+ def btnInfo_queue_thread(self):
+ while True:
+ data = self.btnInfo_queue.get()
+ #print("Info_queue:data = {}".format(data))
+ if data != None:
+ try:
+ data["func"](data["data"])
+ except Exception as e:
+ print("btnInfo_queue:ERROR:{}".format(e))
+ usys.print_exception(e)
+ def publish_message_event_btnInfo(self,event,msg):
+ self.btnInfo_queue.put(msg)
+
+ def publish_wechat_btn_event_cb(self, *args, **kwargs):
+ EventMesh.publish("publish_message_event_btnInfo",{"func":self.wechatKey_press_cb,"data":0})
+
+ def publish_soskey_btn_event_cb(self, *args, **kwargs):
+ EventMesh.publish("publish_message_event_btnInfo",{"func":self.sosKey_press_cb,"data":0})
+
+ def publish_pwkKey_btn_event_cb(self, *args, **kwargs):
+ EventMesh.publish("publish_message_event_btnInfo",{"func":self.pwKey_press_cb,"data":0})
+
def post_processor_after_instantiation(self):
# self.keypad.init()
# self.keypad.set_callback(self.key_callback)
EventMesh.subscribe("sos_short_press", self.sos_short_press)#sos短按事件
+ EventMesh.subscribe("close_wechat_btn_timer", self.close_wechat_btn_timer)#来电强制关闭微聊语音
self.pk.powerKeyEventRegister(self.powerKey_callback)
self.extint = ExtInt(ExtInt.GPIO26, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_DISABLE, self.pwk_extint_cb)
key19 = Pin(Pin.GPIO19, Pin.OUT, Pin.PULL_PU, 0)
def sos_short_press(self,args,msg):
- EventMesh.publish("close_audio_play")#强制关闭音频文件播放
EventMesh.publish("interup_call_event")#如果在电话中强制挂断电话
- EventMesh.publish("stop_led_timer")#设置参数关闭led定时器 同时也关闭所有的灯再开相对应的灯
+ EventMesh.publish("close_audio_play")#强制关闭音频文件播放
+ EventMesh.publish("stop_led_timer")#设置参数关闭定时器 同时也关闭所有的灯再开相对应的灯
EventMesh.publish("STOP_FIND_WATCH")#停止查找设备
+ EventMesh.publish("play_cur_time_event")#播报当前时间
#播报当前时间
- def pwk_extint_cb(self,args):
+ def pwk_extint_cb(self,args):#侧边按键
+ power_off = EventMesh.publish("get_power_off_state")#获取关机标识
+ if power_off != None:
+ if power_off == 1:
+ return
self.GPIO26_status = self.extint.read_level()
print('### key20_extint_cb {} self.GPIO26_status :{}'.format(args,self.GPIO26_status)) # args[0]:gpio号 args[1]:上升沿或下降沿
+ if self.sosKey_status != 0 and self.WeChatKey_status != 0:
+ if self.GPIO26_status == 0:#按下
+ if self.pwkey_press == 0 :
+ self.pwkey_press = 1
+ self.pwkey_count = 0
+ self.led_state = 0
+ self.pwkey_timer.start(100, 1, self.publish_pwkKey_btn_event_cb)
+ print("key22_extint_cb:self.key22_timer.start!!!!\n")
+
+ def pwKey_press_cb(self, data):
+ '''KEY2:联动屏幕右下角或返回键长按关机'''
+ if self.pwkey_press == 1 :
+ self.pwkey_count += 1
+ if self.pwkey_count > 5:
+ # if self.led_state == 0:
+ # self.led_state = 1
+ # # print("self.pwkey_count {} self._state:{}",self.pwkey_count,self.led_state)
+ # EventMesh.publish("set_led_time_arg",[10000,1000,1,led_mode.LONG_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#
+ print("self.self.pwkey_count!!!!!!!!!!!!!!",self.pwkey_count)
+ if self.pwkey_count >= 10*10:
+ self.pwkey_timer.stop()
+ self.pwkey_count = 0
+ self.pwkey_press = 0
+ self.pwKey_press_count = 0
+ self.led_state = 0
+ if EventMesh.publish("get_sim_Status") != 1:
+ EventMesh.publish("open_power_on", 2)#
+ else:
+ EventMesh.publish("open_power_on", 3)#
+
+ return
+ else:
+ if self.GPIO26_status == 1:#松开
+ pass
+ # EventMesh.publish("stop_led_timer")#设置参数
+
+
+
+
+
+ if self.GPIO26_status == 1:#松开
+ if self.pwkey_count >= 1 and self.pwkey_count <= 5: #防抖100ms
+ self.pwkey_timer.stop()
+ self.pwkey_count = 0
+ self.pwkey_press = 0
+ self.led_state = 0
+ self.pwKey_press_count+=1
+ self.pwkey_timer.start(600, 0, self.pwKey_timeout_cb)#松手超时1s判断
+ else:
+ self.pwkey_timer.stop()
+ self.pwkey_count = 0
+ self.pwkey_press = 0
+ self.led_state = 0
+ self.pwKey_press_count = 0
+
+ print("self.pwKey_status!!!!!!!!!!!!!!")
+
+ def pwKey_timeout_cb(self, *args):#侧边按键
+ if self.pwKey_press_count >= 1:
+ self.pwKey_press_count = 0
+ # EventMesh.publish(constants.EVENT.START_LOCATION) #开始定位
+ sos_flag = EventMesh.publish("get_sos_flag")
+ if sos_flag == 1:
+ EventMesh.publish("set_sos_flag",0)
+ EventMesh.publish("set_sos_num",0)
+ EventMesh.publish("set_hangup_mode",0)
+ EventMesh.publish("dialing_out_event")#电话呼叫中
+ EventMesh.publish("close_hr_sop2")#
+ flag = EventMesh.publish("get_call_state")
+ if flag != 1:
+ EventMesh.publish("set_sim_mode")#播報imei号
def sosKey_extint_cb(self,args):
+ power_off = EventMesh.publish("get_power_off_state")#获取关机标识
+ if power_off != None:
+ if power_off == 1:
+ return
self.sosKey_status = self.sosKey.read_level()
print('### key22_extint_cb {} self.GPIO22_status:{}'.format(args,self.sosKey_status)) # args[0]:gpio号 args[1]:上升沿或下降沿
- if self.sosKey_status == 0:#按下
- if self.sosKey_press == 0 :
- self.sosKey_press = 1
- self.sosKey_count = 0
- self.sosKey_timer.start(100, 1, self.sosKey_press_cb)
- print("key22_extint_cb:self.key22_timer.start!!!!\n")
+ if self.WeChatKey_status != 0 and self.GPIO26_status != 0:
+ if self.sosKey_status == 0:#按下
+ if self.sosKey_press == 0 :
+ self.sosKey_press = 1
+ self.sosKey_long_press = 0
+ self.sosKey_count = 0
+ self.sosKey_timer.start(100, 1, self.publish_soskey_btn_event_cb)
+ print("key22_extint_cb:self.key22_timer.start!!!!\n")
- def sosKey_press_cb(self, *args):
+ def sosKey_press_cb(self, data):
'''KEY2:联动屏幕右下角或返回键长按关机'''
if self.sosKey_press == 1 :
-
+ # if self.sosKey_count <= 2:
+ # if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网不需要录音
+ # EventMesh.publish("set_led_time_arg",[1000,200,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+ # else:
+ # EventMesh.publish("set_led_time_arg",[1000,200,1,led_mode.FLASH_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
self.sosKey_count += 1
- print("self.sosKey_count {}",self.sosKey_count)
+ if self.sosKey_count >= 10*3: #长按3s sos拨号
+ self.sosKey_count = 0
+ self.sosKey_long_press = 1
+ self.sosKey_press = 0
+ self.sosKey_timer.stop()
+ EventMesh.publish_async("dial_sos_phone")#拨打sos号码
+ return
+
+ # print("self.sosKey_count {}",self.sosKey_count)
if self.sosKey_status == 1:#松开
- if self.sosKey_count >= 1: #防抖100ms
+ if self.sosKey_count >= 1 and self.sosKey_count <= 5: #防抖100ms
self.sosKey_timer.stop()
self.sosKey_count = 0
self.sosKey_press = 0
self.sosKey_press_count+=1
- self.sosKey_timeout.start(800, 0, self.sosKey_timeout_cb)#松手超时1s判断
+ self.sosKey_timer.start(600, 0, self.sosKey_timeout_cb)#松手超时1s判断
+ else:
+ self.sosKey_timer.stop()
+ self.sosKey_count = 0
+ self.sosKey_press = 0
+ self.sosKey_press_count=0
print("self.sosKey_status!!!!!!!!!!!!!!")
-
- # if self.sosKey_count > (self.__PowerDownTimeOut//100): #长按
- # self.sosKey_timer.stop()
- # self.sosKey_count = 0
- # self.key22_press = 0
- # print("sosKey_long_press!!!!!!!!!!!!!")
+ # import audio
+ # aud.montage_play('U:/mp3.bin',2,1,'mp3files=1.mp3+2.mp3+3.mp3')
def sosKey_timeout_cb(self, *args):#微聊键
print("sosKey_press_count!!!!!!!!!!!!!! ",self.sosKey_press_count)
- if self.sosKey_press_count >= 10:#短按十次解绑app
+ if self.sosKey_press_count >= 10:#
self.sosKey_press_count = 0
- EventMesh.publish("reset_factor_setiing")#恢复出厂设置
+ # EventMesh.publish("reset_factor_setiing")#
pass
- elif self.sosKey_press_count >= 6:#短按六次播报imei号
+ elif self.sosKey_press_count >= 6:#
self.sosKey_press_count = 0
- EventMesh.publish("play_imei_event")#播報imei号
+ EventMesh.publish("set_manual_measure_mode",2)#测量血氧
+ # EventMesh.publish("play_imei_event")#播報imei号
+ pass
+ elif self.sosKey_press_count >= 5:
+ self.sosKey_press_count = 0
+ EventMesh.publish("set_manual_measure_mode",3)#测量体温
pass
- elif self.sosKey_press_count >= 4:#拨打通讯录号码三
+ elif self.sosKey_press_count >= 4:#拨打app快捷号码
self.sosKey_press_count = 0
+ EventMesh.publish("play_center_phone")#拨打快捷号码
# EventMesh.publish("call_phonebook_three_call")
pass
- elif self.sosKey_press_count >= 3:#æ\8b¨æ\89\93é\80\9a讯å½\95å\8f·ç \81äº\8c
+ elif self.sosKey_press_count >= 3:#æµ\8bè¯\95å¿\83ç\8e\87
self.sosKey_press_count = 0
- # EventMesh.publish("call_phonebook_two_call")
+ EventMesh.publish("set_manual_measure_mode",1)#
pass
elif self.sosKey_press_count >= 2:#播报当前步数
self.sosKey_press_count = 0
pass
elif self.sosKey_press_count >= 1:#挂断来电 短语音播报
self.sosKey_press_count = 0
- #EventMesh.publish(constants.EVENT.START_LOCATION) #开始定位
+
+ # EventMesh.publish("call_test_event")
EventMesh.publish("sos_short_press")#sos短按事件
pass
self.sosKey_press_count = 0
def wechatKey_extint_cb(self,args):
+ power_off = EventMesh.publish("get_power_off_state")#获取关机标识
+ if power_off != None:
+ if power_off == 1:
+ return
self.WeChatKey_status = self.wechatKey.read_level()
print('### wechatKey_extint_cb {} self.WeChatKey_status:{}'.format(args,self.WeChatKey_status)) # args[0]:gpio号 args[1]:上升沿或下降沿
+ if self.sosKey_status != 0 and self.GPIO26_status != 0:
+ if self.WeChatKey_status == 0:#按下
+ if self.wechatKey_press == 0 :
+ self.wechatKey_press = 1
+ self.wechatKey_count = 0
+ self.wechat_state = 1
+ self.wechatKey_timer.start(100, 1, self.publish_wechat_btn_event_cb)
+
+ print("wechatKey_extint_cb:selfwechatKey_timer.start!!!!\n")
- if self.WeChatKey_status == 0:#按下
- if self.wechatKey_press == 0 :
- self.wechatKey_press = 1
+ def close_wechat_btn_timer(self,event,*argc):
+ tmp = EventMesh.publish("get_wechat_time")#获取微聊时间戳
+ wechat_time = 0
+ time_tmp = 0
+ time_sec = 0
+
+ if tmp != None:
+ if tmp[0] == 1:
+ self.wechatKey_timer.stop()
self.wechatKey_count = 0
- self.wechat_state = 1
- self.wechatKey_timer.start(100, 1, self.wechatKey_press_cb)
- self.wechatKey_timeout.stop()
- print("wechatKey_extint_cb:selfwechatKey_timer.start!!!!\n")
+ self.wechatKey_press = 0
+ self.wechatKey_press_count=0
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ time_sec = tmp[1]
+ wechat_time = time_tmp - time_sec
+ print("close_btn_timer",time_tmp,time_sec,wechat_time)
+ if wechat_time >= 15:
+ wechat_time = 15
+ if wechat_time <= 0:
+ wechat_time = 0
+ EventMesh.publish("send_wechat_record",wechat_time)#发送录音文件内容
+
- def wechatKey_press_cb(self, *args):
+ def wechatKey_press_cb(self,data):
+ wechat_time = 0
+ tmp = None
+ time_sec = 0
+ time_tmp = 0
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
'''KEY2:联动屏幕右下角或返回键长按关机'''
if self.wechatKey_press == 1 :#是否按下
-
+ tmp = EventMesh.publish("get_wechat_time")#获取微聊时间戳
self.wechatKey_count += 1
- print("self.wechatKey_count {}",self.wechatKey_count)
-
+ # print("self.wechatKey_count {}",self.wechatKey_count)
+ # if self.wechatKey_count <= 2:
+ # if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网不需要录音
+ # print("self.wechatKey_count1111")
+ # # EventMesh.publish("set_led_time_arg",[1000,500,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+ # else:
+ # print("self.wechatKey_count1111")
+ # # EventMesh.publish("set_led_time_arg",[1000,500,1,led_mode.FLASH_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+
if self.wechatKey_count >= 10: #长按1s进入微聊录音
- if self.wechat_state == 1:#按下超过s开始录音
- EventMesh.publish("start_wechat_record")#开始录音
- self.wechat_state = 0
- if EventMesh.publish("read_green_led_level") == 0:#读取绿灯的电平状态 不需要重复给高低平
- EventMesh.publish("set_led_time_arg",[1000,1000,1,led_mode.LONG_LIGHT_GREEN,led_mode.OPEN_LONG_LIGHT_MODE])#測量成功
-
+ if self.WeChatKey_status == 0:
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网不需要录音
+ if self.wechat_state == 1:#按下超过s开始录音
+ EventMesh.publish("start_wechat_record")#开始录音
+ self.wechat_state = 0
+ else:
+ EventMesh.publish("set_sim_mode")#播報imei号
+
+ if self.WeChatKey_status == 0:#未松手超过15s啧停止录音
+ if self.wechat_state == 0:
+ if tmp != None:
+ if tmp[0] != 0:
+ time_sec = tmp[1]
+ if time_tmp - time_sec >= 15:
+ wechat_time = time_tmp - time_sec
+ if wechat_time >= 15:
+ wechat_time = 15
+ EventMesh.publish("send_wechat_record",wechat_time)#发送录音文件内容
+
+ self.wechatKey_timer.stop()
+ self.wechatKey_count = 0
+ self.wechatKey_press = 0
+ self.wechatKey_press_count=0
+ return
+ else:
+ if self.WeChatKey_status == 1:
+ if self.wechat_state == 0:#如果按下时长超过1s且小于长按的时间也认为是录微聊
+ if tmp != None:
+ if tmp[0] != 0:
+ time_sec = tmp[1]
+ wechat_time = time_tmp - time_sec
+ print("WECHAT TIEM",time_tmp,time_sec,wechat_time)
+ if wechat_time >= 15:
+ wechat_time = 15
+
+ EventMesh.publish("send_wechat_record",wechat_time)#发送录音文件内容
+ self.wechatKey_timer.stop()
+
+ self.wechatKey_count = 0
+ self.wechatKey_press = 0
+ self.wechatKey_press_count=0
+ return
if self.WeChatKey_status == 1:#松开
- if self.wechatKey_count >= 1: #防抖100ms
+ if self.wechatKey_count >= 1 and self.wechatKey_count <= 5: #防抖100ms
# print("WeChat time!!!!!!!!!!!!!!")
- if self.wechat_state == 0:#如果按下时长超过1s且小于长按的时间也认为是录微聊
- # print("WeChat stop!!!!!!!!!!!!!!")
- EventMesh.publish("send_wechat_record")#发送录音文件内容
- self.wechatKey_timer.stop()
- self.wechatKey_timeout.stop()
- self.wechatKey_count = 0
- self.wechatKey_press = 0
- self.wechatKey_press_count=0
- return
-
self.wechatKey_timer.stop()
self.wechatKey_count = 0
self.wechatKey_press = 0
self.wechatKey_press_count+=1
- self.wechatKey_timeout.start(800, 0, self.wechatKey_timeout_cb)#松手超时1s判断
- # print("self.WeChatKey_status!!!!!!!!!!!!")
-
-
+ self.wechatKey_timer.start(600, 0, self.wechatKey_timeout_cb)#松手超时1s判断
+ else:
+ self.wechatKey_timer.stop()
+ self.wechatKey_count = 0
+ self.wechatKey_press = 0
+ self.wechatKey_press_count = 0
def wechatKey_timeout_cb(self, *args):#微聊键
print("wechatKey_timeout_cb!!!!!!!!!!!!!! ",self.wechatKey_press_count)
if self.wechatKey_press_count >= 10:#短按十次解绑app
self.wechatKey_press_count = 0
- EventMesh.publish("reset_factor_setiing")#恢复出厂设置
+ EventMesh.publish("open_power_on", 4)#恢复出厂
pass
elif self.wechatKey_press_count >= 6:#短按六次播报imei号
self.wechatKey_press_count = 0
pass
elif self.wechatKey_press_count >= 1:#播放最后收到的语音
self.wechatKey_press_count = 0
- #EventMesh.publish("call_test_event")#电话拨进响铃
call_state = EventMesh.publish("get_call_state")
if call_state == 2:#电话拨进需要接听
EventMesh.publish("answer_call_event")#接听电话
self.powerKey_status = status
if self.pwk_press == 1: #按按钮时不处理
return
- if status == 1:#拔出
- # if(self.GPIO26_status == 1):
- # EventMesh.publish("btn8_press")
- self.power_key.start(self.__PowerDownTimeOut, 0, self.power_key_press_cb)
- EventMesh.publish(constants.EVENT.SYSTEM_UP)
-
- EventMesh.publish("stop_led_timer")#设置参数#关闭led定时器
- # EventMesh.publish("set_led_time_arg",[1000,200,10,led_mode.LONG_LIGHT_RED,led_mode.CLOSE_LONG_LIGHT_MODE])#设置参数
- pass
- elif status == 0:#插入usb
- EventMesh.publish(constants.EVENT.SYSTEM_UP)
- # self.__pwk_timer.stop()
- # # print("btn_back:{}".format(mdls.screen_size_style[mdls.models][1]))
- # if self.pwk_press != 0:
- # self.pwk_press = 0
- # return
- # if(self.GPIO26_status == 1):
- # EventMesh.publish("btn8_press")
- #pass
- self.power_key.stop()
- EventMesh.publish("stop_led_timer")#设置参数关闭led定时器 同时也关闭所有的灯再开相对应的灯
- EventMesh.publish("set_led_time_arg",[1000,1000,30,led_mode.LONG_LIGHT_RED,led_mode.OPEN_LONG_LIGHT_MODE])#开启长亮绿灯
- EventMesh.publish("close_hr_sop2")##强制关闭心率血氧测试
- EventMesh.publish("close_audio_play")#强制关闭音频文件播放
- EventMesh.publish("interup_call_event")#如果在电话中强制挂断电话
+
def power_key_press_cb(self, *args):
- if EventMesh.publish(constants.EVENT.GET_CONNECT) == 0:#未插卡的情况下强制关机
- EventMesh.publish("long_press_power_off")#
+ pass
+ # if EventMesh.publish(constants.EVENT.GET_CONNECT) == 0:#未插卡的情况下强制关机
+ # EventMesh.publish("open_power_on", 2)#
def start(self):
TIME_SEND = "Time_SEND"
TIME_RECV = "Time_RECV"
+ WLKEY_SEND = "WLKEY_SEND"
+ WLKEY_RECV = "WLKEY_RECV"
+
+ SILENCETIME2_SEND = "SILENCETIME2_SEND"
+ SILENCETIME2_RECV = "SILENCETIME2_RECV"
+
+ KEYBRD_SEND = "KEYBRD_SEND"
+ KEYBRD_RECV = "KEYBRD_RECV"
+
class EVENT:
CHANNEL_SOCKET_SEND = "CHANNEL_SOCKET_SEND"
START_LOCATION = "START_LOCATION"
+ START_LOCATION_TEST = "START_LOCATION_TEST"
READ_LOCATION = "READ_LOCATION"
CLOSE_LOCATION = "CLOSE_LOCATION"
GPSOPEN = "GPSOPEN"
START_HEART = "START_HEART"
GET_HEART = "GET_HEART"
STOP_HEART = "STOP_HEART"
+ GET_WEAR = "GET_WEAR"
START_TEMP = "START_TEMP"
STOP_TEMP = "STOP_TEMP"
GET_TEMP = "GET_TEMP"
import atcmd
import net
import machine
-from usr.led import ledEventManager,led_mode
+from led import ledEventManager,led_mode
resp=bytearray(50)
# atcmd.sendSync('AT+log=52,1\r\n',resp,'',200)
# print("AT+log=52,1:{}".format(resp))
-#def main_init():
-if __name__ == '__main__':
+def main_init():
+# if __name__ == '__main__':
import uos
import ql_fs
import utime
print("init2:{}".format(utime.localtime()))
print("init3:{}".format(utime.localtime()))
- from usr.btn_device_ec800m import BtnDevice,playImeiManager,FindWatchManager,powerOFFManager,closeAudioManager,\
- phonecallManager,wechatInforManager,resetFactoryUnbindManager,playCurStepManager
+ from btn_device_ec800m import BtnDevice,intervManager,wechatInforManager
btn_device = BtnDevice()
btn_device.start()
print("init5:{}".format(utime.localtime()))
- ui.add_screen(_ui.UIFINDScreen())
+ # ui.add_screen(_ui.UIFINDScreen())
print("init6:{}".format(utime.localtime()))
- from protocol import LK_ProtoCol,PING_ProtoCol,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,HRSTART_ProtoCol,CENTER_ProtoCol,UPLOAD_ProtoCol,\
+ from protocol import MESSAGE_ProtoCol,TK_ProtoCol,LK_ProtoCol,PING_ProtoCol,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,HRSTART_ProtoCol,CENTER_ProtoCol,UPLOAD_ProtoCol,\
TEMP_ProtoCol,DLT_ProtoCol,WT_ProtoCol,UD_ProtoCol,REMIND_ProtoCol, CR_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,Time_ProtoCol,\
- ProtoColResolver,PHL_ProtoCol,MONITOR_ProtoCol,bootoff_ProtoCol,WDSTART_ProtoCol,LOWBAT_ProtoCol,sosHome_dial_ProtoCol,SockManager,NetManager,MESSAGE_ProtoCol,\
- TK_ProtoCol
+ ProtoColResolver,PHL_ProtoCol,MONITOR_ProtoCol,bootoff_ProtoCol,WDSTART_ProtoCol,LOWBAT_ProtoCol,sosHome_dial_ProtoCol,SockManager,NetManager
+
import mgr as mgr
print("init7:{}".format(utime.localtime()))
- from mgr import ConfigStoreManager,sosInfoCallManager,getBootOffManager,getSosFlagManager,CountdownManager, LocationManager, getVolumSizeManager,gethistoryDataManager,getUpLoadDataManager, getplayAudiodStateManager,\
+ from mgr import testSmsSetIPManager,ConfigStoreManager,sosInfoCallManager,getBootOffManager,getSosFlagManager,CountdownManager, LocationManager, getVolumSizeManager,gethistoryDataManager,getUpLoadDataManager, getplayAudiodStateManager,\
AddrBookManager,MsgdetailManager,PhoneCallingManager,getOldTimeManager,getStorageDataManager,getBrightnessManager,getHrTimeManager,getTempTimeManager,getLowBatManager
print("init8:{}".format(utime.localtime()))
- #from ui_WatchFaceScreen import WatchFaceScreen
+ # from appWechat import TK_ProtoCol,MESSAGE_ProtoCol
# from usr.test_sms import HRSTART_ProtoCol,getHrTimeManager,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,getBrightnessManager,\
.append_manager(mgr.PhoneVolumeLevelManager()) \
.append_manager(mgr.DeviceInfoManager()) \
.append_manager(mgr.BatteryManager()) \
- .append_manager(FindWatchManager())\
+ .append_manager(intervManager())\
.append_manager(ledEventManager())\
- .append_manager(powerOFFManager())\
- .append_manager(closeAudioManager())\
- .append_manager(phonecallManager())\
.append_manager(wechatInforManager())\
- .append_manager(resetFactoryUnbindManager())\
- .append_manager(playImeiManager())\
- .append_manager(playCurStepManager())
+ # .append_manager(playImeiManager())\
+ # .append_manager(playCurStepManager())\
+ # .append_manager(usbStateManager())\
+ # .append_manager(hrandBloodOxgenManager())\
+ # .append_manager(simManager())\
+ # .append_manager(PoweronManager())\
+ # .append_manager(sosManager())\
+ # .append_manager(playCurTimeManager())
# .append_manager(mgr.StopwatchManager()) \
# .append_manager(mgr.CountdownManager()) \
app.append_manager(getSosFlagManager())
app.append_manager(CountdownManager())
app.append_manager(sosInfoCallManager())
+ app.append_manager(testSmsSetIPManager())
print("init21:{}".format(utime.localtime()))
if timeSecond != 0:
next_alarm_time = utime.localtime(timeSecond)
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))
-
- EventMesh.publish("set_led_time_arg",[1000,500,10,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE])#设置参数
+ EventMesh.publish("open_power_on", 1)#
+
# EventMesh.publish("load_screen", {"screen": "main_menu"})
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
-from Hsensor import GH3018
+try :
+ from Hsensor import GH3018
+except Exception as e:
+ print("Hsensor none GH3018:{}".format(e))
+#
from machine import RTC
import quecgnss
import wifiScan
import math
import voiceCall
from misc import PWM
-from usr.led import led_mode,open_led_green,close_led_green,open_led_red,close_led_red,close_led_white
+from led import led_mode,open_led_green,close_led_green,open_led_red,close_led_red,close_led_white
from queue import Queue
class PhoneVolumeLevelManager(Abstract):
def __init__(self):
def reset(self, event, msg):
self.timer.stop()
+
self.sec_value = 0
self.min_value = 0
self.ms_value = 0
self.sec = 0
self.min = 0
self.hour = 0
+
EventMesh.publish("load_screen", {"screen": "countdown_end"})
return
self.total_sec = time_tmp
BATTERY_OCV_TABLE = {
"nix_coy_mnzo2": {
55: {
- 4152: 100, 4083: 95, 4023: 90, 3967: 85, 3915: 80, 3864: 75, 3816: 70, 3773: 65, 3737: 60, 3685: 55,
- 3656: 50, 3638: 45, 3625: 40, 3612: 35, 3596: 30, 3564: 25, 3534: 20, 3492: 15, 3457: 10, 3410: 5, 3380: 0,
+ 4270: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,
+ 3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3355: 0,
},
20: {
- 4143: 100, 4079: 95, 4023: 90, 3972: 85, 3923: 80, 3876: 75, 3831: 70, 3790: 65, 3754: 60, 3720: 55,
- 3680: 50, 3652: 45, 3634: 40, 3621: 35, 3608: 30, 3595: 25, 3579: 20, 3548: 15, 3511: 10, 3468: 5, 3430: 0,
+ 4270: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,
+ 3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3355: 0,
},
0: {
- 4147: 100, 4089: 95, 4038: 90, 3990: 85, 3944: 80, 3899: 75, 3853: 70, 3811: 65, 3774: 60, 3741: 55,
- 3708: 50, 3675: 45, 3651: 40, 3633: 35, 3620: 30, 3608: 25, 3597: 20, 3585: 15, 3571: 10, 3550: 5, 3500: 0,
+ 4270: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,
+ 3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3355: 0,
},
},
}
break
else:
pre_volt = volt
+ # print("__get_soc_from_dict:{}".format(soc2 - (soc2 - soc1) * (pre_volt - volt_arg) // (pre_volt - volt)))
if pre_volt == 0: # Input Voltarg > Highest Voltarg
return soc1
elif volt_not_under == 0:
else:
return self.__get_adc_vbatt()
- def get_energy(self):
+ def get_energy(self,volt_arg ):
"""Get battery energy"""
- self.__energy = self.__get_soc(self.__temp, self.get_voltage())
+ if( volt_arg == None) :
+ volt_arg = self.get_voltage()
+ self.__energy = self.__get_soc(self.__temp, volt_arg)
+ # print("get_energy:volt_arg {} __energy{}".format(volt_arg,self.__energy))
return self.__energy
def set_charge_callback(self, charge_callback):
EventMesh.subscribe("get_battery", self.get_battery)
def get_battery(self, event=None, msg=None):
- battery = self.battery.get_energy()
+ battery = self.battery.get_energy(msg)
return battery
def get_voltage(self, event=None, msg=None):
b = tmp[0].isdigit()#判断是否不是数字开头 暂时不用 因为截取了+判断不了
if b == True and size_len > 11:
tmp = tmp[size_len-11:]
- EventMesh.publish("set_call_state",1)
+ EventMesh.publish("set_call_state",3)
# EventMesh.publish("load_screen", {"screen": "on_call","meta":str(tmp)})
elif args[0] == 12:
EventMesh.publish("set_UI_high_priority",0)
- # screen_NAME = EventMesh.publish("get_screen_NAME")
- # if screen_NAME != None:
- # if screen_NAME != "dialing_noplay_popup":
- # EventMesh.publish("load_screen", {"screen": "main_menu"})
+
EventMesh.publish("set_sos_info_call")
+ flag = EventMesh.publish("get_call_state")
+ if flag == 2:
+ EventMesh.publish("close_timer_all")#
EventMesh.publish("set_call_state",0)
print('voicecall disconnect end')
EventMesh.publish("set_UI_high_priority",0)
EventMesh.publish("set_call_state",1)
# EventMesh.publish("load_screen", {"screen": "dialing"})
+
elif args[0] == 15:
print('voicecall alerting, PhoneNO.: ', args[6])
self.UD_time = 0
self.upload_time = 0
self.UD_timeout = 7*60
- self.curr_battery_level = 4200
+
self.temp_time = 0
self.temp_state = 0
self.temp_one_state = 0
- self.bat_full = 0
- self.usb_full = 0
+ self.vbat_count = 0
- self.bat_count =0
- self.vbat_buf = []
+ self.vbat_buf=[]
+
+ self.curr_battery_level = 4200
+ self.bat_count = 0
+ self.mearsure_btn = 0
+ self.mearsure_timer = 0
+
+ self.no_smi_count = 0
+ 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__)
self.gsensor.init()
print("DeviceInfoManager:2")
self.gsensor.set_callback(self.gsensor_cb)
- self.hsensor = GH3018()
+
+ try :
+ self.hsensor = GH3018()
+ except Exception as e:
+ print("Hsensor none GH3018:{}".format(e))
+ #
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")
self.i2c0 = I2C(I2C.I2C0, I2C.FAST_MODE)
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)
+ EventMesh.subscribe("get_curr_battery_level", self.get_curr_battery_level)
EventMesh.subscribe("get_fw_version", self.get_device_fw_version)
EventMesh.subscribe("get_standby_time", self.get_standby_time)
EventMesh.subscribe(constants.EVENT.GET_STEP, self.get_step_count)
EventMesh.subscribe(constants.EVENT.SET_CID, self.set_cid)
EventMesh.subscribe(constants.EVENT.GET_IMSI, self.get_imsi)
EventMesh.subscribe(constants.EVENT.GET_PASSWORD, self.get_password)
- EventMesh.subscribe(constants.EVENT.SET_PASSWORD, self.set_password)
- EventMesh.subscribe(constants.EVENT.READ_LOCATION, self.READ_LOCATION)
+ EventMesh.subscribe(constants.EVENT.SET_PASSWORD, self.set_password)
EventMesh.subscribe(constants.EVENT.SET_PING, self.set_ping)
EventMesh.subscribe(constants.EVENT.GET_PING, self.get_ping)
EventMesh.subscribe(constants.EVENT.SET_CONNECT, self.set_connect)
EventMesh.subscribe(constants.EVENT.STOP_HEART, self.stop_heart)
EventMesh.subscribe(constants.EVENT.GET_BLOOD_OXYGEN, self.get_blood_oxygen)
EventMesh.subscribe(constants.EVENT.GET_HEART, self.get_heart)
+ EventMesh.subscribe(constants.EVENT.GET_WEAR, self.get_wear)
+ EventMesh.subscribe("get_Hsensor", self.get_Hsensor)
EventMesh.subscribe("Hsensor_set_sleep", self.Hsensor_set_sleep)
EventMesh.subscribe(constants.EVENT.START_TEMP, self.start_temp)
#EventMesh.publish(constants.EVENT.START_HEART)
# 设备开机立刻更新一次参数
self.publish_event_cb()
+
print("post_processor_after_instantiation:3")
def publish_message_event_DeviceInfo(self,event,msg):
data["func"](data["data"])
except Exception as e:
print("DeviceInfo_queue_thread:ERROR:{}".format(e))
+ usys.print_exception(e)
def gsensor_cb(self, para):
print("gsensor_cb:{}".format(para))
+ flip_sw = EventMesh.publish("get_storage_config","flip_sw")
+
if para == 0: #跌倒报警
pass
#EventMesh.publish("load_screen", {"screen": "FIND"})
elif para == 1: #抬腕
- pass
- # EventMesh.publish(constants.EVENT.SYSTEM_UP)
+
+ if flip_sw == 1:
+ EventMesh.publish(constants.EVENT.SYSTEM_UP)
+
elif para == 2: #放手
pass
- # EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)
+ # if flip_sw == 1:
+ # EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)
def publish_event_cb(self, *args, **kwargs):
EventMesh.publish("publish_message_event_DeviceInfo",{"func":self.publish_event,"data":0})
def publish_event(self,data):
"""
- 主动推送事件
+ 定时事件处理
:param args:
:param kwargs:
:return:
# EventMesh.publish("time", self.get_time())
# EventMesh.publish("battery", self.get_battery())
# EventMesh.publish("signal", self.get_signal())
-
self.timer_push = 0
date_tmp = utime.localtime()
time_tmp = utime.mktime(date_tmp)
- print("date_tmp......01....{} time_tmp:{}\r\n".format(date_tmp,time_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: #7分钟一次定位
+ 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:
- EventMesh.publish(constants.EVENT.START_LOCATION) #开始定位
+ 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.gsensor.clean_status()#清除运动次数
EventMesh.publish(constants.EVENT.PUSH_STEP, self.get_step_count())
+ """电池平均值"""
+ temp = Power.getVbatt()
+ if self.bat_count < 10:
+ self.vbat_buf.append(temp)
+ self.bat_count += 1
+ else:
+ for i in range(9):
+ self.vbat_buf[i] = self.vbat_buf[i+1]
+ self.vbat_buf[9] = temp
+ curr_count = len(self.vbat_buf)
+ bat_total_value = 0
+ for i in range(curr_count):
+ bat_total_value += self.vbat_buf[i]
+ bat_total_value = bat_total_value//curr_count#一分钟更新一次电量 10个平均值
+ EventMesh.publish("set_curr_battery_level",bat_total_value)
+ # print("self.vbat_buf:{} curr_count :{} bat_total_value:{} temp:{}".format(self.vbat_buf,curr_count,bat_total_value,temp))
+ bat_tmp = EventMesh.publish("screen_get_battery")
+ self.vbat_count+=10
+ if self.vbat_count >= 60:
+ self.vbat_count = 0
+ if bat_tmp != None:
+ bat_value = bat_tmp[1]
+ if bat_value <= 0:
+ pass
+ # 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()
spo2 = EventMesh.publish("get_old_spo2_data")
if spo2 != 0:
EventMesh.publish("set_old_spo2_data", 0)
- EventMesh.publish("set_old_time_data",time_tmp)
-
+ EventMesh.publish("set_old_time_data",time_tmp)
if hour == 0:#清步数
if min <= 1:
if self.clear_step == 0:
step = EventMesh.publish("get_old_step_value")
+ EventMesh.publish("set_old_time_data",time_tmp)
if step > 0:
EventMesh.publish("set_old_step_value",0)
self.gsensor.reset_step()
if self.clear_step == 1:
self.clear_step = 0
- temp = Power.getVbatt()
- self.bat_count+=1
- self.vbat_buf.append(temp)
-
- curr_count = len(self.vbat_buf)
- bat_total_value = 0
- for i in range(curr_count):
- bat_total_value += self.vbat_buf[i]
-
- bat_total_value = bat_total_value//curr_count#一分钟更新一次电量 10个平均值
-
- EventMesh.publish("set_curr_battery_level",bat_total_value)
- # print("self.vbat_buf:{} curr_count :{} bat_total_value:{}".format(self.vbat_buf,curr_count,bat_total_value))
- if self.bat_count >= 10:
- self.bat_count = 0
- self.vbat_buf = []
-
- #电量小于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))
if self.bat_time > 5*60:
self.bat_time = 0
- if battery[1] == 20:
- EventMesh.publish("load_screen", {"screen": "LOW_POWER"})
+ if battery[1] <= 20 and battery[1] > 0:
+ pass
+ # EventMesh.publish("load_screen", {"screen": "LOW_POWER"})
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("long_press_power_off") #未检测到sim卡15分钟后关机
+ 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:#每十分钟提醒一次
+ # pass
+ # # 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):
- self.sms_full_flag+=10
- if self.sms_full_flag >= 120:
- self.sms_full_flag=0
- sms_data = sms.getSaveLoc()
- sms_max = sms_data[0][2]
- if msg_nums >= sms_max:
- EventMesh.publish("load_screen", {"screen": "message_full"})
+ sms_data = sms.getSaveLoc()
+ sms_max = sms_data[0][2]
+ if msg_nums >= sms_max-1:
+ self.sms_full_flag+=10
+ if self.sms_full_flag >= 120:
+ self.sms_full_flag=0
+ # EventMesh.publish("load_screen", {"screen": "message_full"})
+ 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 = {}
hr_time = EventMesh.publish("get_time_hr_spo2")#获取时间是否大于0
- if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1 and battery[0] == "0":
+ # if get_temp_state != None : #突然脱腕
+ # if get_temp_state > 1 and WEAR != 1:
+ # EventMesh.publish(constants.EVENT.STOP_TEMP)
+ # EventMesh.publish("set_temp_state",0)
+ # if (self.get_hr_state > 1 or self.get_spo2_state > 1) and WEAR != 1:
+ # if self.get_hr_state > 1 :
+ # EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率
+ # EventMesh.publish(constants.EVENT.STOP_HEART)
+ # elif self.get_spo2_state > 1:
+ # EventMesh.publish("set_spo2_state",0)#2代表后台进入测试
+ # EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1 and battery[0] != "1": #:
# print("get_temp_time:{} self.temp_one_state:{}".format(get_temp_time,self.temp_one_state))
if get_temp_time != None:#定时测量体温
if get_temp_time > 0:
self.temp_state = 0
self.temp_time = time_tmp
- if self.old_time != get_temp_time:#重复修改测量间隔时间
+ if self.old_temp_time != get_temp_time:#重复修改测量间隔时间
self.temp_one_state = 0
self.temp_time = time_tmp#防止改变时间的时候正在开启测量突然10s就停止测量
self.temp_state = 0
- self.old_time = get_temp_time
+ self.old_temp_time = get_temp_time
if (time_tmp-self.temp_time) == 0 and self.temp_state == 0:#一开始就测量 测量一分钟停止测量体温
self.temp_state = 1
self.temp_state = 0
self.temp_one_state = 0
temp = EventMesh.publish(constants.EVENT.GET_TEMP)
-
- tmp_f = str(temp).split('.')[0]
- tmp_f_tmp = int(tmp_f)
+ temp += 0.5
+ if temp < 25 or temp > 42:
+ temp = 0
+ EventMesh.publish("set_temp_state",0)
+ if temp > 0:
+ tmp_f = str(temp).split('.')[0]
+ tmp_f_tmp = int(tmp_f)
+
- tmp_d = str(temp).split('.')[1][:1]
- tmp_d_tmp = int(tmp_d)
+ tmp_d = str(temp).split('.')[1][:1]
+ tmp_d_tmp = int(tmp_d)
+ if temp != 0:
+ EventMesh.publish("set_history_temp_value",temp)
+ EventMesh.publish("play_temp_value",temp)#播放体温数值
+ EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
+ else:
+ EventMesh.publish("set_history_temp_value",0)
+ EventMesh.publish("play_temp_value",0)#播放体温数值
EventMesh.publish(constants.EVENT.STOP_TEMP)
print("AUTO temp:{} tmp_f:{} tmp_f_tmp:{} tmp_d:{} tmp_d_tmp:{}".format(temp,tmp_f,tmp_f_tmp,tmp_d,tmp_d_tmp))
- EventMesh.publish("set_temp_state",0)
- EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
+
+
if self.temp_state == 0 or get_temp_state == 3:#只有不在测量的时候才测单次的
if get_temp_state == 3:#单次测量
elif self.temp_one_state > 6:
self.temp_one_state = 0
temp = EventMesh.publish(constants.EVENT.GET_TEMP)
-
- tmp_f = str(temp).split('.')[0]
- tmp_f_tmp = int(tmp_f)
+ temp += 0.5
+ if temp < 25 or temp > 42:
+ temp = 0
+ EventMesh.publish("set_temp_state",0)
+ if temp > 0:
+ tmp_f = str(temp).split('.')[0]
+ tmp_f_tmp = int(tmp_f)
+
- tmp_d = str(temp).split('.')[1][:1]
- tmp_d_tmp = int(tmp_d)
+ tmp_d = str(temp).split('.')[1][:1]
+ tmp_d_tmp = int(tmp_d)
+ if temp != None:
+ if temp != 0:
+ EventMesh.publish("set_history_temp_value",temp)
+ EventMesh.publish("play_temp_value",temp)#播放体温数值
+ EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
+ else:
+ EventMesh.publish("set_history_temp_value",0)
+ EventMesh.publish("play_temp_value",0)#播放体温数值
EventMesh.publish(constants.EVENT.STOP_TEMP)
print("once temp:{} tmp_f:{} tmp_f_tmp:{} tmp_d:{} tmp_d_tmp:{}".format(temp,tmp_f,tmp_f_tmp,tmp_d,tmp_d_tmp))
- EventMesh.publish("set_temp_state",0)
- EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
+
else:
self.temp_one_state = 0
self.temp_state = 0
+ self.old_temp_time = 0
else:
+ self.old_temp_time = 0
+ get_temp_end_state = EventMesh.publish("get_temp_state")
if self.temp_state != 0:
if self.temp_state == 2:
self.temp_state = 0
EventMesh.publish(constants.EVENT.STOP_TEMP)
- if get_temp_state == 0 or get_temp_state == 1:
+ if get_temp_end_state == 1:
self.temp_one_state = 0
- if get_temp_state == 3:#单次测量
+ if get_temp_end_state == 3:#单次测量
self.temp_one_state+=1
if self.temp_one_state == 1:
print("AUTO one temp:2")
elif self.temp_one_state > 6:
self.temp_one_state = 0
temp = EventMesh.publish(constants.EVENT.GET_TEMP)
-
- tmp_f = str(temp).split('.')[0]
- tmp_f_tmp = int(tmp_f)
+ temp += 0.5
+ if temp < 25 or temp > 42:
+ temp = 0
+ EventMesh.publish("set_temp_state",0)
+ if temp > 0:
+ tmp_f = str(temp).split('.')[0]
+ tmp_f_tmp = int(tmp_f)
- tmp_d = str(temp).split('.')[1][:1]
- tmp_d_tmp = int(tmp_d)
+ tmp_d = str(temp).split('.')[1][:1]
+ tmp_d_tmp = int(tmp_d)
+ if temp != None:
+ if temp != 0:
+ EventMesh.publish("set_history_temp_value",temp)
+ EventMesh.publish("play_temp_value",temp)#播放体温数值
+ EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
+ else:
+ EventMesh.publish("set_history_temp_value",0)
+ EventMesh.publish("play_temp_value",temp)#播放体温数值
+ else:
+ EventMesh.publish("set_history_temp_value",0)
+ EventMesh.publish("play_temp_value",0)#播放体温数值
EventMesh.publish(constants.EVENT.STOP_TEMP)
print("AUTO once temp:{} tmp_f:{} tmp_f_tmp:{} tmp_d:{} tmp_d_tmp:{}".format(temp,tmp_f,tmp_f_tmp,tmp_d,tmp_d_tmp))
- EventMesh.publish("set_temp_state",0)
- EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
- if hr_time != None:
- # print("hr......01....{}\r\n".format(hr_time))
- if hr_time > 0:
- #print("get_hr_state:{} get_spo2_state:{} self.old_time:{} hr_time:{}".format(self.get_hr_state,self.get_spo2_state,self.old_time,hr_time))
- if self.get_hr_state != 1 and self.get_spo2_state != 1:
- if self.get_hr_state == 0 and self.get_spo2_state == 0:
- if self.HR_state == 0 or self.HR_state == 3:
+
+
+ self.mearsure_btn = int(hr_time[0])
+ self.mearsure_timer = int(hr_time[1])
+ if self.mearsure_btn != None and self.mearsure_timer != None:
+ print("hr......01....{} {}\r\n".format(hr_time[0],hr_time[1]))
+ if self.mearsure_btn > 0:
+ if self.mearsure_timer > 0:
+ #print("get_hr_state:{} get_spo2_state:{} self.old_time:{} mearsure_timer:{}".format(self.get_hr_state,self.get_spo2_state,self.old_time,mearsure_timer))
+ if self.get_hr_state != 1 and self.get_spo2_state != 1:
+ if self.get_hr_state == 0 and self.get_spo2_state == 0:
+ if self.HR_state == 0 or self.HR_state == 3:
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+
+ if self.old_time != self.mearsure_timer:#重复修改测量间隔时间
+ self.SENSOR_time = time_tmp#防止改变时间的时候正在开启测量突然10s就停止测量
+ if self.get_hr_state == 2 and self.HR_state == 1:#自动检测的心率还在测量立马关了测试
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish("play_hr_value",heart_value)#测量成功
+ EventMesh.publish("set_history_hr_value",heart_value)
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)
+ else:
+ EventMesh.publish("play_hr_value",0)#测量失败
+ print("stop debug1")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ self.HR_state = 0
+ elif self.get_spo2_state == 2 and self.HR_state == 2:
+ self.HR_state = 0
+ spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish("play_spo2_value",spo2_value)
+ EventMesh.publish("set_history_spo2_value",spo2_value)
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ else:
+ EventMesh.publish("play_spo2_value",0)
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+ self.old_time = self.mearsure_timer
+
+ if self.HR_state == 3 or self.HR_state == 0:#
+ if (time_tmp - self.SENSOR_time) >= self.mearsure_timer:
+ if self.get_spo2_state == 3 or self.get_hr_state == 3:#单次测量没有完毕优先测量间隔时间测量的
+ if self.get_hr_state == 3:
+ print("stop debug2")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish("play_hr_value",heart_value)
+ EventMesh.publish("set_history_hr_value",heart_value)
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)
+ else:
+ EventMesh.publish("play_hr_value",0)
+
+ elif self.get_spo2_state == 3:
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+ spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish("set_history_spo2_value",spo2_value)
+ EventMesh.publish("set_old_spo2_data",spo2_value)
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ else:
+ EventMesh.publish("play_hr_value",0)
+
+ self.HR_state = 0
+ self.SENSOR_time = time_tmp
+ self.SENSOR_time = time_tmp
+ self.HR_state = 0
+
+ #print("time_tmp :{} self.SENSOR_time :{} time_tmp - self.SENSOR_time:{} self.HR_state:{}".format(time_tmp,self.SENSOR_time,time_tmp - self.SENSOR_time,self.HR_state))
+ if (time_tmp - self.SENSOR_time) == 0 and self.HR_state == 0:
+ print("START_HEART:1")
+ EventMesh.publish("set_hr_state",2)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_HEART)
+ self.HR_state = 1
self.HR_Onestate = 0
self.HR_OneTime = 0
-
- if self.old_time != hr_time:#重复修改测量间隔时间
- self.SENSOR_time = time_tmp#防止改变时间的时候正在开启测量突然10s就停止测量
- if self.get_hr_state == 2 and self.HR_state == 1:#自动检测的心率还在测量立马关了测试
+ elif (time_tmp - self.SENSOR_time) >= 60 and self.HR_state == 1:
+ EventMesh.publish("set_hr_state",0)#2代表后台进入测试
+ print("stop debug3")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
- EventMesh.publish("set_old_hr_data",heart_value)
+ print("heart_value:{}".format(heart_value))
if heart_value > 50 and heart_value != None:
- EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)
- print("stop debug1")
+ EventMesh.publish("play_hr_value",heart_value)
+ EventMesh.publish("set_history_hr_value",heart_value)
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
+ else:
+ EventMesh.publish("play_hr_value",0)
+ #获取心率数据上传数据app
+ print("STOP_HEART:")
+
+ self.HR_state = 3
+ # EventMesh.publish("set_spo2_state",2)#2代表后台进入血氧测试
+ # EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
+ # print("START_BLOOD_OXYGEN:")
+ # elif (time_tmp - self.SENSOR_time) >= 120 and self.HR_state == 2:#有需要再打开
+ # print("STOP_BLOOD_OXYGEN:")
+ # EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ # EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#停止血氧测试
+ # spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ # print("spo2_value:{}".format(spo2_value))
+ # if spo2_value > 85 and spo2_value != None:
+ # EventMesh.publish("set_old_spo2_data",spo2_value)
+ # EventMesh.publish("set_history_spo2_value",spo2_value)
+ # EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ # self.HR_state = 3
+ else:
+ self.HR_state = 0
+ self.old_time = self.mearsure_timer
- EventMesh.publish(constants.EVENT.STOP_HEART)
+ if self.HR_state == 3 or self.HR_state == 0:#只有不在测量的时候才测单次的
+ if self.get_spo2_state == 3 or self.get_hr_state == 3:#单次测量
self.HR_state = 0
- elif self.get_spo2_state == 2 and self.HR_state == 2:
- self.HR_state = 0
- spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
-
- EventMesh.publish("set_old_spo2_data",spo2_value)
-
- if spo2_value >= 85 and spo2_value != None:
- EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
- EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
- self.old_time = hr_time
-
- if self.HR_state == 3 or self.HR_state == 0:#
- if (time_tmp - self.SENSOR_time) >= hr_time:
- if self.get_spo2_state == 3 or self.get_hr_state == 3:#单次测量没有完毕优先测量间隔时间测量的
+ self.HR_OneTime+=1
+ if self.HR_OneTime == 1 and self.HR_Onestate == 0:
+ print("hr..........\r\n")
if self.get_hr_state == 3:
- print("stop debug2")
+ self.Hr_Need_Open = 1
+ EventMesh.publish("set_hr_state",3)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_HEART)
+ else:
+ self.Hr_Need_Open = 0
+
+ if self.get_spo2_state == 3 and self.Hr_Need_Open == 0:
+ self.Spo2_Need_Open = 1
+ EventMesh.publish("set_spo2_state",3)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
+ else:
+ self.Spo2_Need_Open = 0
+ self.HR_Onestate = 1
+ # print("self.HR_Onestate....3..:{} {} {} {} {}".format(self.HR_Onestate,self.get_hr_state,self.get_spo2_state,self.Hr_Need_Open,self.Spo2_Need_Open))
+ elif self.HR_OneTime > 6 and self.HR_Onestate == 1:
+ # print("self.HR_Onestate...4....:{} {} {} {} {}".format(self.HR_Onestate,self.get_hr_state,self.get_spo2_state,self.Hr_Need_Open,self.Spo2_Need_Open))
+ if self.Hr_Need_Open == 1:#需要关闭心率测量
+ print("stop debug4")
EventMesh.publish(constants.EVENT.STOP_HEART)
heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
- EventMesh.publish("set_old_hr_data",heart_value)
if heart_value > 50 and heart_value != None:
- EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)
-
- elif self.get_spo2_state == 3:
- EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
- spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
-
- EventMesh.publish("set_old_spo2_data",spo2_value)
- if spo2_value > 85 and spo2_value != None:
- EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
-
- self.HR_state = 0
- self.SENSOR_time = time_tmp
- self.SENSOR_time = time_tmp
- self.HR_state = 0
-
- #print("time_tmp :{} self.SENSOR_time :{} time_tmp - self.SENSOR_time:{} self.HR_state:{}".format(time_tmp,self.SENSOR_time,time_tmp - self.SENSOR_time,self.HR_state))
- if (time_tmp - self.SENSOR_time) == 0 and self.HR_state == 0:
- print("START_HEART:1")
- EventMesh.publish("set_hr_state",2)#2代表后台进入测试
- EventMesh.publish("set_hr_blood_led",1)#
- EventMesh.publish(constants.EVENT.START_HEART)
-
- self.HR_state = 1
- self.HR_Onestate = 0
- self.HR_OneTime = 0
- elif (time_tmp - self.SENSOR_time) >= 60 and self.HR_state == 1:
- EventMesh.publish("set_hr_state",0)#2代表后台进入测试
- print("stop debug3")
- EventMesh.publish(constants.EVENT.STOP_HEART)
- heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
- print("heart_value:{}".format(heart_value))
- EventMesh.publish("set_old_hr_data",heart_value)
- if heart_value > 50 and heart_value != None:
- EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
-
- #获取心率数据上传数据app
- print("STOP_HEART:")
- EventMesh.publish("set_spo2_state",2)#2代表后台进入血氧测试
- EventMesh.publish("set_hr_blood_led",1)#
- EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
- print("START_BLOOD_OXYGEN:")
- self.HR_state = 2
- elif (time_tmp - self.SENSOR_time) >= 120 and self.HR_state == 2:
- print("STOP_BLOOD_OXYGEN:")
- EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
- EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#停止血氧测试
- spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
- print("spo2_value:{}".format(spo2_value))
- EventMesh.publish("set_old_spo2_data",spo2_value)
- if spo2_value > 85 and spo2_value != None:
- EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
-
- self.HR_state = 3
- else:
- self.HR_state = 0
- self.old_time = hr_time
-
- if self.HR_state == 3 or self.HR_state == 0:#只有不在测量的时候才测单次的
- if self.get_spo2_state == 3 or self.get_hr_state == 3:#单次测量
- self.HR_state = 0
- self.HR_OneTime+=1
- if self.HR_OneTime == 1 and self.HR_Onestate == 0:
- print("hr..........\r\n")
- if self.get_hr_state == 3:
- self.Hr_Need_Open = 1
- EventMesh.publish("set_hr_state",3)#2代表后台进入测试
- EventMesh.publish("set_hr_blood_led",1)#
- EventMesh.publish(constants.EVENT.START_HEART)
- else:
- self.Hr_Need_Open = 0
-
- if self.get_spo2_state == 3 and self.Hr_Need_Open == 0:
- self.Spo2_Need_Open = 1
- EventMesh.publish("set_spo2_state",3)#2代表后台进入测试
- EventMesh.publish("set_hr_blood_led",1)#
- EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
- else:
- self.Spo2_Need_Open = 0
- self.HR_Onestate = 1
- # print("self.HR_Onestate....3..:{} {} {} {} {}".format(self.HR_Onestate,self.get_hr_state,self.get_spo2_state,self.Hr_Need_Open,self.Spo2_Need_Open))
- elif self.HR_OneTime > 6 and self.HR_Onestate == 1:
- # print("self.HR_Onestate...4....:{} {} {} {} {}".format(self.HR_Onestate,self.get_hr_state,self.get_spo2_state,self.Hr_Need_Open,self.Spo2_Need_Open))
- if self.Hr_Need_Open == 1:#需要关闭心率测量
- print("stop debug4")
- EventMesh.publish(constants.EVENT.STOP_HEART)
- heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
- EventMesh.publish("set_old_hr_data",heart_value)
- if heart_value > 50 and heart_value != None:
- EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
-
-
- if self.Spo2_Need_Open == 0 and self.get_spo2_state == 3:
- EventMesh.publish("set_spo2_state",3)#2代表后台进入血氧测试
- EventMesh.publish("set_hr_blood_led",1)#
- EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
+ EventMesh.publish("set_history_hr_value",heart_value)
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
+ EventMesh.publish("play_hr_value",heart_value)
+ else:
+ EventMesh.publish("play_hr_value",0)
+
+ if self.Spo2_Need_Open == 0 and self.get_spo2_state == 3:
+ EventMesh.publish("set_spo2_state",3)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
+
+ self.HR_Onestate = 2
+ self.set_hsenor_crt = 2#血氧关闭
+ else:
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+ self.set_hsenor_crt = 0#
- self.HR_Onestate = 2
- self.set_hsenor_crt = 2#血氧关闭
+ EventMesh.publish("set_hr_state",0)#2代表后台进入血氧测试
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
else:
- self.HR_Onestate = 0
- self.HR_OneTime = 0
- self.set_hsenor_crt = 0#
-
- EventMesh.publish("set_hr_state",0)#2代表后台进入血氧测试
- EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
- else:
- if self.Spo2_Need_Open == 1:#停止测试血氧
+ if self.Spo2_Need_Open == 1:#停止测试血氧
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#K开血氧
+ spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+
+ if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ EventMesh.publish("play_spo2_value",spo2_value)
+ EventMesh.publish("set_history_spo2_value",spo2_value)
+ else:
+ EventMesh.publish("play_spo2_value",0)
+
+ if self.Hr_Need_Open == 0 and self.get_hr_state == 3:
+ EventMesh.publish("set_hr_state",3)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_HEART)
+ self.HR_Onestate = 2
+ self.set_hsenor_crt = 1#心率
+ else:
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+ self.set_hsenor_crt = 2#血氧关闭
+
+
+ elif self.HR_OneTime > 6+6 and self.HR_Onestate == 2:
+ print("HR_OneTime:....05")
+ if self.set_hsenor_crt == 2:
EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
- EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#K开血氧
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#停止血氧测试
spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
-
if spo2_value > 85 and spo2_value != None:
- EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ EventMesh.publish("set_history_spo2_value",spo2_value)
EventMesh.publish("set_old_spo2_data",spo2_value)
- EventMesh.publish("set_hr_blood_led",2)#
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
else:
- EventMesh.publish("set_hr_blood_led",3)#
- if self.Hr_Need_Open == 0 and self.get_hr_state == 3:
- EventMesh.publish("set_hr_state",3)#2代表后台进入测试
- EventMesh.publish("set_hr_blood_led",1)#
- EventMesh.publish(constants.EVENT.START_HEART)
- self.HR_Onestate = 2
- self.set_hsenor_crt = 1#心率
+ EventMesh.publish("play_hr_value",0)
+
+ elif self.set_hsenor_crt == 1:
+ EventMesh.publish("set_hr_state",0)#0代表g关闭测试
+ print("stop debug5")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish("set_history_hr_value",heart_value)
+ EventMesh.publish("play_hr_value",heart_value)
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
else:
- self.HR_Onestate = 0
- self.HR_OneTime = 0
- self.set_hsenor_crt = 2#血氧关闭
-
-
- elif self.HR_OneTime > 6+6 and self.HR_Onestate == 2:
- print("HR_OneTime:....05")
- if self.set_hsenor_crt == 2:
- EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
- EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#停止血氧测试
- spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
- EventMesh.publish("set_old_spo2_data",spo2_value)
- if spo2_value > 85 and spo2_value != None:
- EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
-
- elif self.set_hsenor_crt == 1:
- EventMesh.publish("set_hr_state",0)#0代表g关闭测试
- print("stop debug5")
- EventMesh.publish(constants.EVENT.STOP_HEART)
- heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
- EventMesh.publish("set_old_hr_data",heart_value)
- if heart_value > 50 and heart_value != None:
- EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
-
+ EventMesh.publish("play_hr_value",0)
+ self.HR_Onestate = 0
+ else:
+ if self.get_spo2_state == 2 or self.get_hr_state == 2:#单次测量
+ if self.get_hr_state == 2:
+ EventMesh.publish("set_hr_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ elif self.get_spo2_state == 2:
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+ self.HR_state = 0
self.HR_Onestate = 0
- else:
- self.HR_Onestate = 0
- self.HR_OneTime = 0
+ self.HR_OneTime = 0
+ self.set_hsenor_crt = 0
else:
#print("hr......01....{} {} self.HR_Onestate {} {}".format(self.get_hr_state,self.get_spo2_state,self.HR_OneTime,self.HR_Onestate))
self.SENSOR_time = time_tmp#进入最后一次的时间戳
+ self.old_time = 0
+ self.set_hsenor_crt = 0
if self.get_hr_state != 1 and self.get_spo2_state != 1:#没有设置间隔时间单次测量
if self.get_spo2_state == 3 or self.get_hr_state == 3:#单次测量
self.HR_state = 0
if self.get_hr_state == 3:
self.Hr_Need_Open = 1
EventMesh.publish("set_hr_state",3)#2代表后台进入测试
- EventMesh.publish("set_hr_blood_led",1)#
EventMesh.publish(constants.EVENT.START_HEART)
else:
self.Hr_Need_Open = 0
if self.get_spo2_state == 3 and self.Hr_Need_Open == 0:
self.Spo2_Need_Open = 1
EventMesh.publish("set_spo2_state",3)#2代表后台进入测试
- EventMesh.publish("set_hr_blood_led",1)#
EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
else:
self.Spo2_Need_Open = 0
EventMesh.publish(constants.EVENT.STOP_HEART)
heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
print("stop_heart heart_value:{}".format(heart_value))
- EventMesh.publish("set_old_hr_data",heart_value)
if heart_value > 50 and heart_value != None:
+ EventMesh.publish("play_hr_value",heart_value)
+ EventMesh.publish("set_history_hr_value",heart_value)
EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
-
+ else:
+ EventMesh.publish("play_hr_value",0)
if self.Spo2_Need_Open == 0 and self.get_spo2_state == 3:
EventMesh.publish("set_spo2_state",3)#2代表后台进入血氧测试
- EventMesh.publish("set_hr_blood_led",1)#
EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
self.HR_Onestate = 2
self.set_hsenor_crt = 2#血氧关闭
EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#K开血氧
spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
print("spo2_value:{}.......01..".format(spo2_value))
- EventMesh.publish("set_old_spo2_data",spo2_value)
if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish("play_spo2_value",spo2_value)
+ EventMesh.publish("set_history_spo2_value",spo2_value)
EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
-
+ else:
+ EventMesh.publish("play_spo2_value",0)
+
if self.Hr_Need_Open == 0 and self.get_hr_state == 3:
EventMesh.publish("set_hr_state",3)#2代表后台进入测试
- EventMesh.publish("set_hr_blood_led",1)#
EventMesh.publish(constants.EVENT.START_HEART)
self.HR_Onestate = 2
self.set_hsenor_crt = 1#心率
EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#停止血氧测试
spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
- EventMesh.publish("set_old_spo2_data",spo2_value)
if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish("play_spo2_value",spo2_value)
+ EventMesh.publish("set_history_spo2_value",spo2_value)
EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
-
+ else:
+ EventMesh.publish("play_spo2_value",0)
elif self.set_hsenor_crt == 1:
EventMesh.publish("set_hr_state",0)#0代表g关闭测试
print("stop debug7")
EventMesh.publish(constants.EVENT.STOP_HEART)
heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
- EventMesh.publish("set_old_hr_data",heart_value)
if heart_value > 50 and heart_value != None:
+ EventMesh.publish("play_hr_value",heart_value)
+ EventMesh.publish("set_history_hr_value",heart_value)
EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
-
+ else:
+ EventMesh.publish("play_hr_value",0)
self.HR_Onestate = 0
else:
+ if self.get_spo2_state == 2 or self.get_hr_state == 2:#单次测量
+ if self.get_hr_state == 2:
+ EventMesh.publish("set_hr_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ elif self.get_spo2_state == 2:
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
self.HR_Onestate = 0
self.HR_OneTime = 0
+ self.old_time = 0
else:
- print("stop hrself.get_hr_state:{} {}".format(self.get_hr_state,self.get_spo2_state))
- if battery[0] == "1":#接上充电座 如果是灯亮着就关闭心里灯
+ self.old_temp_time = 0
+ self.old_time = 0
+ if battery[0] == "1":
get_hr_state = EventMesh.publish("get_hr_state")
get_spo2_state = EventMesh.publish("get_spo2_state")
if get_hr_state != None and get_spo2_state != None:
- if get_hr_state == 2 or get_hr_state == 3:
- EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率
- print("sstop hr")
- EventMesh.publish(constants.EVENT.STOP_HEART)
- elif get_spo2_state == 2 or get_spo2_state == 3:
- print("stop spo2")
- EventMesh.publish("set_spo2_state",0)#2代表后台进入测试
- EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
-
+ if get_hr_state == 2 or get_hr_state == 3:
+ EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率
+ print("stop debug8")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ elif get_spo2_state == 2 or get_spo2_state == 3:
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+
if get_temp_time != None:
get_temp_state = EventMesh.publish("get_temp_state")
- if get_temp_state != 0:
+ if get_temp_state == 2 or get_temp_state == 3:
self.temp_one_state = 0
self.temp_state = 0
- temp = EventMesh.publish(constants.EVENT.GET_TEMP)
- tmp_f = str(temp).split('.')[0]
- tmp_f_tmp = int(tmp_f)
-
- tmp_d = str(temp).split('.')[1][:1]
- tmp_d_tmp = int(tmp_d)
+ temp = EventMesh.publish(constants.EVENT.GET_TEMP)
+ temp += 0.5
+ if temp < 25 or temp > 42:
+ temp = 0
EventMesh.publish("set_temp_state",0)
- EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
+ if temp > 0:
+ tmp_f = str(temp).split('.')[0]
+ tmp_f_tmp = int(tmp_f)
+
+ tmp_d = str(temp).split('.')[1][:1]
+ tmp_d_tmp = int(tmp_d)
+
+ if temp != None:
+ if temp != 0:
+ EventMesh.publish("set_history_temp_value",temp)
+ EventMesh.publish("play_temp_value",temp)#播放体温数值
+ EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
+ else:
+ EventMesh.publish("set_history_temp_value",0)
+ EventMesh.publish("play_temp_value",0)#播放体温数值
EventMesh.publish(constants.EVENT.STOP_TEMP)
+
self.SENSOR_time = time_tmp
self.HR_Onestate = 0
self.HR_OneTime = 0
self.old_time = 0
self.set_hsenor_crt = 0
- print("battery[0] :{} battery[1]:{}".format(battery[0],battery[1]))
+
+ hr_state = EventMesh.publish("get_hr_state")
+ spo2_state = EventMesh.publish("get_spo2_state")
+ temp_state = EventMesh.publish("get_temp_state")
+ if hr_state != None or spo2_state != None or temp_state != None:#手动测试
+ if hr_state == 1:
+ time_s = EventMesh.publish("get_start_measure_time")#设置开始测量的时间戳时间
+ if time_s != None:
+ if time_s != 0:
+ if (time_tmp - time_s) >= 60:#大于60s关闭测试
+ EventMesh.publish("set_hr_state",0)#0代表g关闭测试
+ print("stop debug7")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish("play_hr_value",heart_value)
+ EventMesh.publish("set_history_hr_value",heart_value)
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
+ else:
+ EventMesh.publish("play_hr_value",0)
+
+ pass
+ if spo2_state == 1:#手动测试血氧
+ time_s = EventMesh.publish("get_start_measure_time")#设置开始测量的时间戳时间
+ if time_s != None:
+ if time_s != 0:
+ if (time_tmp - time_s) >= 60:#大于60s关闭测试
+ EventMesh.publish("set_spo2_state",0)#0代表g关闭测试
+ print("stop spo2 debug7")
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+ spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish("play_spo2_value",spo2_value)
+ EventMesh.publish("set_old_spo2_data",spo2_value)
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ else:
+ EventMesh.publish("play_spo2_value",0)
+ pass
+
+ if temp_state == 1:#手动测试体温
+ time_s = EventMesh.publish("get_start_temp_measure_time")#设置开始测量的时间戳时间
+ if time_s != None:
+ if time_s != 0:
+ if (time_tmp - time_s) >= 60:#大于60s关闭测试
+ print("体温测量结束")
+ temp = EventMesh.publish(constants.EVENT.GET_TEMP)
+ temp += 0.5
+ if temp < 25 or temp > 42:
+ temp = 0
+ print("temp",temp)
+ EventMesh.publish("set_temp_state",0)
+ if temp > 0:
+ tmp_f = str(temp).split('.')[0]
+ tmp_f_tmp = int(tmp_f)
+
+ tmp_d = str(temp).split('.')[1][:1]
+ tmp_d_tmp = int(tmp_d)
+
+ if temp != None:
+ if temp != 0:
+ EventMesh.publish("set_history_temp_value",temp)
+ EventMesh.publish("play_temp_value",temp)#播放体温数值
+ EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
+ else:
+ EventMesh.publish("set_history_temp_value",0)
+ EventMesh.publish("play_temp_value",0)#播放体温数值
+
+ EventMesh.publish(constants.EVENT.STOP_TEMP)
+ pass
+
+ EventMesh.publish("play_unread_wechat_infor")#每10s检测是否有未读语音数据
+
if battery[0] == "1":
- if battery[1] >= 100:
- EventMesh.publish("set_led_time_arg",[1000,1000,30,led_mode.LONG_LIGHT_GREEN,led_mode.OPEN_LONG_LIGHT_MODE])#开启长亮绿灯
- self.bat_full = 1
- self.usb_full = 0
+ if battery[1] >= 100:#充电已满
+ if self.charge_full_count == 0:
+ EventMesh.publish("set_usb",3)#
+ print("charge R_CHARGE_full")
+ self.charge_full_count = 1
else:
- self.bat_full = 0
- timer_flag = EventMesh.publish("get_led_state")#设置参数
- if timer_flag != 1:
- self.usb_full = 1
- EventMesh.publish("set_led_time_arg",[1000,1000,30,led_mode.LONG_LIGHT_RED,led_mode.OPEN_LONG_LIGHT_MODE])#開始測量
- else:
- self.usb_full = 0
- EventMesh.publish("stop_led_timer")#设置参数
+ self.charge_full_count = 0
else:
- if self.bat_full == 1:
- self.bat_full = 0
- EventMesh.publish("stop_led_timer")#设置参数
- if self.usb_full == 1:
- self.usb_full = 0
- EventMesh.publish("stop_led_timer")#设置参数
-
- pass
- low_power = battery[1]
- if low_power <= 5:#小于5%红色灯慢闪
- EventMesh.publish("set_led_time_arg",[1000,1000,30,led_mode.FLASH_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE])#開始測量
-
-
-
- get_hr_state = EventMesh.publish("get_hr_state")
- get_spo2_state = EventMesh.publish("get_spo2_state")
- # print("stop get_hr_state :{} get_spo2_state:{}".format(get_hr_state,get_spo2_state))
- if get_hr_state != 0 or get_spo2_state != 0:
- EventMesh.publish("set_hr_blood_led",1)#设置参数
+ self.charge_full_count = 0
+ low_power = battery[1]
+ if low_power <= 5:#小于5%红色灯慢闪
+ EventMesh.publish("set_led_time_arg",[1,2,10*11,led_mode.FLASH_LIGHT_RED,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1000,400,52,led_mode.FLASH_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#開始測量
+
+
+ # self.charge_full_count+=1
+ # print("self.charge_full_count",self.charge_full_count)
+ # if self.charge_full_count == 6:
+ # EventMesh.publish("set_usb", 1)#
+ # elif self.charge_full_count == 7:
+ # EventMesh.publish("set_usb", 2)#
+ # elif self.charge_full_count >= 8:
+ # self.charge_full_count = 0
+ # EventMesh.publish("set_usb", 2)#
- voiceCall.setCallback(voice_callback)
-
- #quecgnss.gnssEnable(0)
-
- def READ_LOCATION(self, event, msg) :
- #print("READ_LOCATIO",msg)
- EventMesh.publish(constants.PROTOCOL.UD_SEND,msg)
-
+ def get_sim_Status(self, event, msg):
+ return sim.getStatus()
def get_device_ope(self, event, msg):
"""
获取设备运营商信息
else:
charge_state = '0'
- vbat = 0
#temp = Power.getVbatt()
temp = EventMesh.publish("get_curr_battery_level")
- if temp != None :
- if temp <= 3505:
- vbat = 0
- elif temp <= 3699:
- vbat = 20 #"U:/vbat_20.jpg"
- elif temp <= 3772:
- vbat = 40 #"U:/vbat_40.jpg"
- elif temp <= 3882:
- vbat = 60 #"U:/vbat_60.jpg"
- elif temp <= 4070:
- vbat = 80 #"U:/vbat_80.jpg"
- else:
- vbat = 100 #"U:/vbat_100.jpg"
- else:
+ vbat = EventMesh.publish("get_battery",temp)
+ if vbat == None:
vbat = 100
+ # print("vbat",vbat)
+ # if temp != None :
+ # if temp <= 3505:
+ # vbat = 0
+ # elif temp <= 3699:
+ # vbat = 20 #"E:/vbat_20.jpg"
+ # elif temp <= 3772:
+ # vbat = 40 #"E:/vbat_40.jpg"
+ # elif temp <= 3882:
+ # vbat = 60 #"E:/vbat_60.jpg"
+ # elif temp <= 4070:
+ # vbat = 80 #"E:/vbat_80.jpg"
+ # elif temp <= 4200:
+ # vbat = 90 #
+ # else:
+ # vbat = 100 #"E:/vbat_100.jpg"
+ # else:
+ # vbat = 100
result = [charge_state, vbat]
return result
-
+ #Set the current average battery level
def set_curr_battery_level(self, event=None, msg=None):
self.curr_battery_level = msg
def get_curr_battery_level(self, event=None, msg=None):
return self.curr_battery_level
-
+
def get_device_fw_version(self, *args):
'''
获取设备固件版本号
data = self.hsensor.get_all_data()
return data[0]
+ def get_wear(self, topic, msg):
+ pass
+ # return self.hsensor.get_wear()
+
+ def get_Hsensor(self, topic, msg):
+ return self.hsensor
+
def Hsensor_set_sleep(self, topic, msg):
self.hsensor.set_sleep()
def start_temp(self, topic, msg):
+ print("start_temp!!!!!!!")
WHO_AM_I = bytearray([0x01, 0])
I2C_SLAVE_ADDR = 0x49
r_data = bytearray(2)
data = bytearray([0x61A0, 0]) # 唤醒
return self.i2c0.write(I2C_SLAVE_ADDR, WHO_AM_I, 1, data, 2)
def stop_temp(self, topic, msg):
+ print("stop_temp!!!!!!!")
WHO_AM_I = bytearray([0x01, 0])
I2C_SLAVE_ADDR = 0x49
r_data = bytearray(2)
return sim.switchCard(slot)
def usb_event_cb(self, state):
- EventMesh.publish("battery", self.get_battery())
+ status = state
+
+ if status == 1:#插入USB
+ print("charge R_CHARGE_in")
+ EventMesh.publish("set_usb", 1)#
+ pass
+ elif status == 0:#拨出usbs
+ EventMesh.publish("set_usb", 2)#
+ print("charge R_CHARGE_out")
+
+
+
+
def get_usb_state(self):
state = self.usb.getStatus()
self.start_location_flag = 0
self.location_thread_id = 0
self.location_thread_id = _thread.start_new_thread(self.location_thread, ())
+ self.location_queue = Queue(100)
#quecgnss.init()
#quecgnss.gnssEnable(0)
@staticmethod
EventMesh.subscribe(constants.EVENT.GPSOPEN, self.gps_open)
EventMesh.subscribe(constants.EVENT.GPSCLOSE, self.gps_close)
EventMesh.subscribe(constants.EVENT.START_LOCATION, self.start_location)
+ EventMesh.subscribe(constants.EVENT.START_LOCATION_TEST, self.start_location_test)
EventMesh.subscribe(constants.EVENT.WIFIINFO, self.WIFI_INFO)
EventMesh.subscribe(constants.EVENT.WIFISCANOPEN,self.WIFI_scan_open)
EventMesh.subscribe(constants.EVENT.CLOSE_LOCATION,self.close_location)
def get_location_flag(self, event, msg):
return self.location_flag
def start_location(self, event, msg):
- print("start_location")
+ self.location_queue.put(msg)#测试类型入队
+ print("start_location:{}".format(msg))
self.timer_read_GPS_info.start(1000, 1, self.location_timer)
if( self.location_flag == 1):
return
self.location_timer_count = 0
self.location_flag = 1
#self.gps_open(event, msg)
-
- if msg != None :
- self.location_type = msg
- else :
- self.location_type = 0
+
self.start_location_flag = 1
-
+
+ def start_location_test(self, event, msg):
+ print("start_location_test")
+ self.timer_read_GPS_info.start(1000, 1, self.location_timer)
+ if( self.location_flag == 1):
+ return
+ self.location_timer_count = 0
+ self.location_flag = 1
+ #self.gps_open(event, msg)
+ self.location_type = 1
+ self.start_location_flag = 1
+
def close_location(self, event, msg):
self.location_flag = 0
+ self.location_type = 0
self.gps.power_switch(0)
wifiScan.control(0)
self.timer_read_GPS_info.stop()
#print("wifiScan.asyncStart")
else :
print("WIFI_scan_open:error1")
-
-
-
def gps_open(self, event, msg):
#print("publish:gps_open")
#quecgnss.init()
quecgnss.gnssEnable(1)
self.gps.__gps_nmea_data_clean()
-
-
def gps_close(self, event, msg):
quecgnss.gnssEnable(0)
-
-
def location_timer(self, *args, **kwargs):
self.location_timer_count = self.location_timer_count +1
self.location_check_data_timer_count = self.location_check_data_timer_count+1
+ def Location_send(self, msg) :
+ #print("Location_send1")
+ date = "{:04d}{:02d}{:02d},{:02d}{:02d}{:02d}".format(*utime.localtime()[0:6])
+ date = date[2:]
+ GPS_type = "V"
+ latitude = "0.000000,N"
+ longitude = "0.000000,E"
+ speed = "0.00"
+ direction = "0.0"
+ high = "100.0"
+ number = "0"
+ if msg[0] != [] :#有GPS数据
+ GPS_type = "A"
+ # 纬度
+ latitude = msg[0]["latitude"]
+ # 经度
+ longitude = msg[0]["longitude"]
+ # 速度
+ speed = msg[0]["speed"]
+ # 方向
+ direction = "0"
+ if msg[0]["direction"] :
+ direction = msg[0]["direction"]
+ # 高度
+ high = msg[0]["high"]
+ high_tmp = high.split(".")
+ if len(high_tmp) >= 2 :
+ high = "%s"%(high_tmp[0])
+ # 讯号质量:搜索到的卫星数目
+ number = msg[0]["number"]
+ #gsm 信号强度
+ gsm_sig = str((100//31)*EventMesh.publish("screen_get_sig"))
+ # 电池电量百分比
+ bat_tmp = EventMesh.publish("screen_get_battery")
+ battery_caption = str(bat_tmp[1])
+ #步数
+ old_step = 0
+ step = 0
+ step = EventMesh.publish("get_old_step_value")
+ if step != 0:
+ tmp_data = EventMesh.publish("get_storage_config","old_step_new")
+ if tmp_data != None:
+ old_step = tmp_data
+ if old_step != step:
+ EventMesh.publish("set_storage_config",["old_step",step])
+ EventMesh.publish("set_storage_config",["old_step_new",step])
+
+ old_step = step
+ # step = str(EventMesh.publish(constants.EVENT.GET_STEP)[0])
+ #翻转次数
+ turn_count = "0"
+ #终端状态
+ state = "00000000"
+ #基站数据
+ CELL_num = len(msg[2])
+ CELL_data = "1," #时延
+ if msg[2] != []:
+ for CELL in msg[2] :
+ if CELL[0] == 0 :
+ CELL_data += "%X,"%(int(CELL[2])) #MCC
+ CELL_data += str(CELL[3]) +","#MNC
+ CELL_data += str(CELL[5]) +","#tac,区域码
+ CELL_data += str(CELL[1]) +","#基站编号 CID
+ CELL_data += str(int(CELL[7]+140)) +","#信号强度 rssi
+ else :
+ CELL_data += str(CELL[5]) +","#tac,区域码
+ CELL_data += str(CELL[1]) +","#基站编号 CID
+ CELL_data += str(int(CELL[7]+140)) +","#信号强度 rssi
+ CELL_data = CELL_data[:(len(CELL_data)-1)]
+ #WIFI数据
+ WIFI_num = 0
+ WIFI_data = ""
+ if msg[1] :
+ WIFI_num = msg[1][0]
+ i = 0
+ for MAC in msg[1][1] :
+ WIFI_data += "wifi%d,%s,%d,"%(i,str(MAC[0]),MAC[1])
+ i += 1
+ WIFI_data = WIFI_data[:(len(WIFI_data)-1)]
+ WIFI_data = WIFI_data.lower()
+ #send_data = "UD ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%d ,%s ,%d ,%s"\
+ # %(date,GPS_type,latitude,longitude,speed,direction,high,number,gsm_sig,battery_caption,step,turn_count,state,CELL_num,CELL_data,WIFI_num,WIFI_data)
+ #定位数据
+ send_data = "%s,%s,%s"%(date,GPS_type,latitude)
+ send_data += ",%s,%s,%s"%(longitude,speed,direction)
+ send_data += ",%s,%s,%s"%(high,number,gsm_sig,)
+ send_data += ",%s,%s,%s"%(battery_caption,step,turn_count)
+ send_data += ",%s,%d,%s"%(state,CELL_num,CELL_data)
+ send_data += ",%d,%s"%(WIFI_num,WIFI_data)
+ #print("Location_send2:{} q_size:{}".format(send_data,self.location_queue.size()))
+ while True:
+ if self.location_queue.empty() == False:
+ TYPE = self.location_queue.get()
+ #print("Location_send3:{}".format(TYPE))
+ EventMesh.publish(TYPE,send_data)
+ else :
+ break
+
+
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)
+ self.location_timer_count
+ #quecgnss.read(4096)#去掉第一次错误数据
match_gga_data = []
- match_gsv_data = []
-
- if self.location_check_data_timer_count > 3 :#5秒查一次
+ #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()
- 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])
+ #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])
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])
+ 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,
"speed": match_vtg_data[5],
"number": match_gga_data[7],
}
- #检查基站数据
- 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分钟关闭
+ #检查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*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", [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 > 40: #or( self.wifi_data != [] and self.cell_data != []):
- #print("publish:READ_LOCATION")
- EventMesh.publish(constants.EVENT.READ_LOCATION, [self.gps_data,self.wifi_data,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 > 10): #超过10秒且卫星个数少于3
- #print("publish:READ_LOCATION")
- EventMesh.publish(constants.EVENT.READ_LOCATION, [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 :
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))
- EventMesh.publish(constants.EVENT.READ_LOCATION, [self.gps_data,self.wifi_data,self.cell_data])
+ self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
-
-
-# class AddrBookManager(Abstract):
-# # 通讯录
-# def post_processor_after_instantiation(self):
-# EventMesh.subscribe("get_addr_book_list", self.get)
-# # 可通过此push_addr_book_list主动推送
-
-# def get(self, event, msg):
-# print("phonebook %s"%(msg))
-# return {
-# "张三": "15692025051",
-# "李四": "15692025051",
-# "崔崔": "15692025051",
-# "鱼鱼": "15692025051",
-# "坤坤": "15692025051",
-# }
-# def set(self, event, msg):
-# print("phonebook %s"%(msg))
class AddrBookManager(Abstract):
# 通讯录
def __init__(self):
return [self.check_json,self.read_phonebook]
def call_phonebook_one_call(self, event, msg):
+ name = ''
+ key_tmp = ''
if self.read_phonebook != {}:
if len(self.read_phonebook) >= 1:
phonebook_keys = sorted(self.read_phonebook.keys())
name = self.read_phonebook[phonebook_keys[0]]
key_tmp = phonebook_keys[0]
if len(name) != 0:
- voiceCall.callStart(str(name))
- print("call_phonebook_one_call name:{} key_tmp:{}".format(name,key_tmp))
+ EventMesh.publish("save_phonename",str(name))
+ EventMesh.publish("save_phonenum",str(name))
+ EventMesh.publish("dial_out_call_center_cb",str(name))#电话拨出去
+ else:
+ EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
+ else:
+ EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
+ else:
+ EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
+ print("call_phonebook_one_call name:{} key_tmp:{} len:{}".format(name,key_tmp,len(self.read_phonebook)))
def call_phonebook_two_call(self, event, msg):
+ name = ''
+ key_tmp = ''
if self.read_phonebook != {}:
if len(self.read_phonebook) >= 2:
phonebook_keys = sorted(self.read_phonebook.keys())
name = self.read_phonebook[phonebook_keys[1]]
key_tmp = phonebook_keys[1]
if len(name) != 0:
- voiceCall.callStart(str(name))
- print("call_phonebook_two_call name:{} key_tmp:{}".format(name,key_tmp))
+ #voiceCall.callStart(str(name))
+ EventMesh.publish("save_phonename",str(name))
+ EventMesh.publish("save_phonenum",str(name))
+ EventMesh.publish("dial_out_call_center_cb",str(name))#电话拨出去
+ else:
+ EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
+
+ else:
+ EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
+ else:
+ EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
+ print("call_phonebook_two_call name:{} key_tmp:{}".format(name,key_tmp))
def call_phonebook_three_call(self, event, msg):
+ name = ''
+ key_tmp = ''
if self.read_phonebook != {}:
if len(self.read_phonebook) >= 3:
phonebook_keys = sorted(self.read_phonebook.keys())
name = self.read_phonebook[phonebook_keys[2]]
key_tmp = phonebook_keys[2]
if len(name) != 0:
- voiceCall.callStart(str(name))
- print("call_phonebook_three_call name:{} key_tmp:{}".format(name,key_tmp))
-
+ EventMesh.publish("save_phonename",str(name))
+ EventMesh.publish("save_phonenum",str(name))
+ EventMesh.publish("dial_out_call_center_cb",str(name))#电话拨出去
+ # voiceCall.callStart(str(name))
+ else:
+ EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
+
+ else:
+ EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
+ print("call_phonebook_three_call name:{} key_tmp:{}".format(name,key_tmp))
def set(self, event, msg):
self.check_json = msg[0]
def save_msg_name(self, event, msg):
self.msg_name = str(msg)
+ print("save_msg_name:msg".format(msg))
def save_msg_content(self, event, msg):
self.msg_content = str(msg)
+ print("save_msg_content:msg".format(msg))
def get_msg_content(self, event, msg):
return self.msg_content
return [self.check_json,self.read_call_log]
def set(self, event, msg):
+ return
self.check_json = msg[0]
self.read_call_log = msg[1]
-
+ with open("/usr/static/storage_file/Call_log.json","w+",encoding="utf-8") as fd:
+ ujson.dump(self.read_call_log,fd)
# def call_usr(self,event,msg):
# content = self.log[msg]
# # 参数1 姓名 参数2 电话 参数3 1/主动呼叫 0别人呼叫
self.oldspo2 = 0
self.oldstep = 0
self.old_step = 0
- self.read_data = {}
- self.read_histroy_hr_data = {}
- self.read_histroy_temp_data = {}
- self.read_histroy_spo2_data = {}
- check_json= ql_fs.path_exists("/usr/static/storage_file/config.json")
- if check_json == True :
- with open("/usr/static/storage_file/config.json","r") as fd:#音频文件编号
- self.read_data = ujson.load(fd)
- if self.read_data != {}:
- b = str("old_hr") in self.read_data.keys()
- if b == True:
- self.oldHr = self.read_data["old_hr"]
- else:
- self.oldHr = 0
- old_spo2 = str("old_spo2") in self.read_data.keys()
- if old_spo2 == True:
- self.oldspo2 = self.read_data["old_spo2"]
- else:
- self.oldspo2 = 0
- old_step = str("old_step") in self.read_data.keys()
- if old_step == True:
- self.oldstep = self.read_data["old_step"]
- else:
- self.oldstep = 0
- else:
- self.oldHr = 0
- self.oldspo2 = 0
- self.oldstep = 0
+ self.read_histroy_hr_data = []
+ self.read_histroy_temp_data = []
+ self.read_histroy_spo2_data = []
+
+ oldHr = EventMesh.publish("get_storage_config","old_hr")
+ if oldHr != None:
+ self.oldHr = oldHr
+ old_spo2 = EventMesh.publish("get_storage_config","old_spo2")
+ if old_spo2 != None:
+ self.oldspo2 = old_spo2
+ old_step = EventMesh.publish("get_storage_config","old_step")
+ if old_step != None:
+ self.oldstep = old_step
+
+
check_hr= ql_fs.path_exists("/usr/static/storage_file/history_hr.json")
if check_hr == True :
with open("/usr/static/storage_file/history_hr.json","r") as fd:#音频文件编号
if check_spo2 == True :
with open("/usr/static/storage_file/history_spo2.json","r") as fd:#音频文件编号
self.read_histroy_spo2_data = ujson.load(fd)
+ self.temp_value = 0
+
+ # self.read_histroy_hr_data=[{"timeSec":16789890,"value":90},{"timeSec":16789888,"value":78},{"timeSec":16789688,"value":68},{"timeSec":16789898,"value":58},\
+ # {"timeSec":16789897,"value":88},{"timeSec":16789867,"value":77},{"timeSec":16789895,"value":70}]
def post_processor_after_instantiation(self):
EventMesh.subscribe("set_old_hr_data", self.save_hr_value)
EventMesh.subscribe("get_history_spo2_value", self.get_history_spo2_value)
EventMesh.subscribe("set_history_spo2_value", self.set_history_spo2_value)
- def get_history_spo2_value(self, event, msg): #近7次体温历史数据统计显示
+
+
+ def get_history_spo2_value(self, event, msg): #近7次血氧历史数据统计显示
return self.read_histroy_spo2_data
def set_history_spo2_value(self, event, msg):
return self.read_histroy_temp_data
def set_history_temp_value(self, event, msg):
- count = len(self.read_histroy_temp_data)
- print(count)
- if count >= 7:
- for i in range(6):
- self.read_histroy_temp_data["0{}".format(i+1)] = self.read_histroy_temp_data["0{}".format(i+2)]
- self.read_histroy_temp_data["07"] = msg
+ self.temp_value = msg
+ if self.temp_value > 0:
+ # date_tmp = utime.localtime()
+ # time_tmp = utime.mktime(date_tmp)
+ # if len(self.read_histroy_temp_data) >= 7:
+ # sort_new = {}
+ # sort_new = sorted(self.read_histroy_temp_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条
+ # print(sort_new)
+ # for i in range(len(self.read_histroy_temp_data)-1):
+ # sort_new[i] = sort_new[i+1]#0==1 1== 2 2== 3 3==4 4==5 5==6 6==7
+ # self.read_histroy_temp_data[i] = sort_new[i]
+ # pass
+ # self.read_histroy_temp_data[6] = {"timeSec": time_tmp, "temp": self.temp_value}
+ # else:
+ # self.read_histroy_temp_data.append({"timeSec": time_tmp, "temp": self.temp_value})
+
+ # with open("/usr/static/storage_file/history_temp.json","w",encoding="utf-8") as fd:
+ # ujson.dump(self.read_histroy_temp_data,fd)
+ #print(self.read_histroy_temp_data)
+ pass
else:
- self.read_histroy_temp_data["0{}".format(count+1)] =msg
- # with open("/usr/static/storage_file/history_temp.json","w",encoding="utf-8") as fd:
- # ujson.dump(self.read_histroy_temp_data,fd)
-
-
+ pass
def get_history_hr_value(self, event, msg): #近7次心率历史数据统计显示
return self.read_histroy_hr_data
def save_hr_value(self, event, msg):
if msg >= 50:
- EventMesh.publish("set_hr_blood_led",2)#
- self.read_data = EventMesh.publish("get_storage_data")
- self.read_data["old_hr"] = msg
+ EventMesh.publish("set_storage_config",["old_hr",msg])
+ self.oldHr = msg
- EventMesh.publish("set_storage_data", self.read_data)
-
- count = len(self.read_histroy_hr_data)
- if count >= 7:
- for i in range(6):
- self.read_histroy_hr_data["0{}".format(i+1)] = self.read_histroy_hr_data["0{}".format(i+2)]
- self.read_histroy_hr_data["07"] = msg
+
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ if len(self.read_histroy_hr_data) >= 7:
+ sort_new = {}
+ sort_new = sorted(self.read_histroy_hr_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条
+ print(sort_new)
+ for i in range(len(self.read_histroy_hr_data)-1):
+ sort_new[i] = sort_new[i+1]#0==1 1== 2 2== 3 3==4 4==5 5==6 6==7
+ self.read_histroy_hr_data[i] = sort_new[i]
+ pass
+ self.read_histroy_hr_data[6] = {"timeSec": time_tmp, "hr": self.oldHr}
else:
- self.read_histroy_hr_data["0{}".format(count+1)] = msg
+ self.read_histroy_hr_data.append({"timeSec": time_tmp, "hr": self.oldHr})
- with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
- ujson.dump(self.read_data,fd)
- # with open("/usr/static/storage_file/history_hr.json","w",encoding="utf-8") as fd:
- # ujson.dump(self.read_histroy_hr_data,fd)
- # print(self.read_histroy_temp_data)
+ with open("/usr/static/storage_file/history_hr.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_histroy_hr_data,fd)
+ pass
else:
- EventMesh.publish("set_hr_blood_led",3)#
- if msg != None:
- self.oldHr = msg
+ pass
+
+
def get_hr_value(self, event, msg):
return self.oldHr
def save_spo2_value(self, event, msg):
if msg >= 85:
- EventMesh.publish("set_hr_blood_led",2)#
- self.read_data = EventMesh.publish("get_storage_data")
- self.read_data["old_spo2"] = msg
-
- EventMesh.publish("set_storage_data", self.read_data)
-
- count = len(self.read_histroy_spo2_data)
- if count >= 7:
- for i in range(6):
- self.read_histroy_spo2_data["0{}".format(i+1)] = self.read_histroy_spo2_data["0{}".format(i+2)]
- self.read_histroy_spo2_data["07"] = msg
- else:
- self.read_histroy_spo2_data["0{}".format(count+1)] = msg
-
- with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
- ujson.dump(self.read_data,fd)
+ # EventMesh.publish("set_storage_config",["old_spo2",msg])
+ # self.oldspo2 = msg
+
+
+ # date_tmp = utime.localtime()
+ # time_tmp = utime.mktime(date_tmp)
+ # if len(self.read_histroy_spo2_data) >= 7:
+ # sort_new = {}
+ # sort_new = sorted(self.read_histroy_spo2_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条
+ # print(sort_new)
+ # for i in range(len(self.read_histroy_spo2_data)-1):
+ # sort_new[i] = sort_new[i+1]#0==1 1== 2 2== 3 3==4 4==5 5==6 6==7
+ # self.read_histroy_spo2_data[i] = sort_new[i]
+ # pass
+ # self.read_histroy_spo2_data[6] = {"timeSec": time_tmp, "spo2": self.oldspo2}
+ # else:
+ # self.read_histroy_spo2_data.append({"timeSec": time_tmp, "spo2": self.oldspo2})
# with open("/usr/static/storage_file/history_spo2.json","w",encoding="utf-8") as fd:
# ujson.dump(self.read_histroy_spo2_data,fd)
+ # #print(self.read_histroy_spo2_data)
+ #播放语音
+ # EventMesh.publish("set_hr_blood_led",2)#测量成功
+ pass
else:
- EventMesh.publish("set_hr_blood_led",3)#测量失败长亮3s红灯
- if msg != None:
- self.oldspo2 = msg
+ pass
+ pass
def get_spo2_value(self, event, msg):
return self.oldspo2
step = EventMesh.publish(constants.EVENT.GET_STEP)
self.old_step = self.oldstep + step[0]
return self.old_step
-
-
#获取旧的时间戳
class getOldTimeManager(Abstract):
# 获取天气数据
def __init__(self):
self.time_sec = 0
- self.read_data = {}
- check_json= ql_fs.path_exists("/usr/static/storage_file/config.json")
- if check_json == True :
- with open("/usr/static/storage_file/config.json","r") as fd:#音频文件编号
- self.read_data = ujson.load(fd)
- if self.read_data != {}:
- b = str("old_time") in self.read_data.keys()
- if b == True:
- self.time_sec = self.read_data["old_time"]
-
+ tmp_data = EventMesh.publish("get_storage_config","old_time")
+ if tmp_data !=None :
+ self.time_sec = tmp_data
+
def post_processor_after_instantiation(self):
EventMesh.subscribe("get_old_time_data", self.get_old_time_data)
EventMesh.subscribe("set_old_time_data", self.set_old_time_data)
def set_old_time_data(self, event, msg):
self.time_sec = msg
- self.read_data = EventMesh.publish("get_storage_data")
- self.read_data["old_time"] = msg
- EventMesh.publish("set_storage_data", self.read_data)
- with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
- ujson.dump(self.read_data,fd)
+ EventMesh.publish("set_storage_config",["old_time",msg])
+
+
self.set_time = 0
self.set_hr = 0 #0关闭 1手动 2 自动测量按照时间间隔测试心率
self.set_spo2 = 0
- self.get_temp = 0
- check = ql_fs.path_exists("/usr/static/storage_file/config.json")
- if check == True:
- with open("/usr/static/storage_file/config.json","r") as fd:
- self.read_data = ujson.load(fd)
- if self.read_data != {}:
- b = str("measure_time") in self.read_data.keys()
- if b == True:
- self.set_time = self.read_data["measure_time"]
+ self.open_btn = 0
+ read_data = EventMesh.publish("get_storage_config","measure_time")
+ if read_data != None:
+ self.set_time = read_data
+ read_data = EventMesh.publish("get_storage_config","open_hr_btn")
+
+ if read_data != None:
+ self.open_btn = read_data
+
+
def post_processor_after_instantiation(self):
EventMesh.subscribe("set_time_hr_spo2", self.set_time_hr_spo2)
def set_time_hr_spo2(self, event, msg):
- self.set_time = msg
+ self.open_btn = msg[0]
+ self.set_time = msg[1]
+ EventMesh.publish("set_storage_config",["measure_time",self.set_time])
+ EventMesh.publish("set_storage_config",["open_hr_btn",self.open_btn])
def get_time_hr_spo2(self, event, msg):
-
- return self.set_time
+ return [self.open_btn,self.set_time]
def set_hr_state(self, event, msg):
+ if msg != 0:
+ EventMesh.publish("set_hr_blood_led",1)#红绿灯交替闪烁
self.set_hr = msg
+
def get_hr_state(self, event, msg):
return self.set_hr
def set_spo2_state(self, event, msg):
+ if msg != 0:
+ EventMesh.publish("set_hr_blood_led",1)##红绿灯交替闪烁
self.set_spo2 = msg
+
def get_spo2_state(self, event, msg):
return self.set_spo2
def __init__(self):
self.set_time = 0
self.get_temp = 0
- check = ql_fs.path_exists("/usr/static/storage_file/config.json")
- if check == True:
- with open("/usr/static/storage_file/config.json","r") as fd:
- self.read_data = ujson.load(fd)
- if self.read_data != {}:
- b = str("temp_time") in self.read_data.keys()
- if b == True:
- self.set_time = self.read_data["temp_time"]
+ read_data = EventMesh.publish("get_storage_config","temp_time")
+
+ if read_data != None:
+ self.set_time = read_data
+
def post_processor_after_instantiation(self):
EventMesh.subscribe("set_temp_time", self.set_temp_time)
def set_temp_time(self, event, msg):
self.set_time = msg
+ EventMesh.publish("set_storage_config",["set_temp_time",self.set_time])
def get_temp_time(self, event, msg):
-
return self.set_time
def set_temp_state(self, event, msg):
class getBrightnessManager(Abstract):#获取亮度级别
def __init__(self):
self.level = 6#默认值6
- self.read_data = {}
+ # self.read_data = {}
self.time = 5
self.PWM_backlight = None
- check = ql_fs.path_exists("/usr/static/storage_file/config.json")
- if check == True:
- with open("/usr/static/storage_file/config.json","r") as fd:
- self.read_data = ujson.load(fd)
+
def post_processor_after_instantiation(self):
EventMesh.subscribe("get_brightness_level", self.get_brightness_level)
def set_brightness_level(self, event, msg):
self.level = msg
-
+ EventMesh.publish("set_storage_config", ["brightness_level",self.level])
+
def get_brightness_level(self, event, msg):
- if self.read_data != {}:
- b = str("brightness_level") in self.read_data.keys()
- if b == True:
- self.level = self.read_data["brightness_level"]
+ tmp = EventMesh.publish("get_storage_config","brightness_level")
+ if tmp != None:
+ self.level = tmp
return self.level
def set_brightness_time(self, event, msg):
self.time = msg
+ EventMesh.publish("set_storage_config", ["brightness_time",self.time])
def get_brightness_time(self, event, msg):
- # print("get_brightness_time self.read_data:{} self.time:{}".format(self.read_data,self.time))
- if self.read_data != {}:
- b = str("brightness_time") in self.read_data.keys()
- if b == True:
- self.time = self.read_data["brightness_time"]
+ tmp = EventMesh.publish("get_storage_config","brightness_time")
+ if tmp != None:
+ self.time = tmp
return self.time
self.level = self.level + 2
self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, self.level, 10)
self.PWM_backlight.open()
-
- self.read_data = EventMesh.publish("get_storage_data")
- self.read_data["brightness_level"] = self.level
+ EventMesh.publish("set_storage_config", ["brightness_level",self.level])
- EventMesh.publish("set_storage_data", self.read_data)
- with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
- ujson.dump(self.read_data,fd)
def reduce(self, event, msg):
if self.level > 0:
self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS,self.level, 10)
self.PWM_backlight.open()
- self.read_data = EventMesh.publish("get_storage_data")
- self.read_data["brightness_level"] = self.level
- EventMesh.publish("set_storage_data", self.read_data)
- with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
- ujson.dump(self.read_data,fd)
+ EventMesh.publish("set_storage_config", ["brightness_level",self.level])
+
class getStorageDataManager(Abstract):#获取内存数据
def __init__(self):
- self.read_data = {}
+ self.config_data = {}
check = ql_fs.path_exists("/usr/static/storage_file/config.json")
if check == True:
with open("/usr/static/storage_file/config.json","r") as fd:
- self.read_data = ujson.load(fd)
+ self.config_data = ujson.load(fd)
+ else :
+ self.config_data = {'old_time': 0, 'flip_sw': 0}
+ pass
def post_processor_after_instantiation(self):
EventMesh.subscribe("set_storage_data", self.set_storage_data)
+ EventMesh.subscribe("set_storage_config", self.set_storage_config)
EventMesh.subscribe("get_storage_data", self.get_storage_data)
+ EventMesh.subscribe("get_storage_config", self.get_storage_config)
def set_storage_data(self, event, msg):
+ # print("set_storage_data:{}".format(msg))
if msg != None:
- self.read_data = msg
-
- def get_storage_data(self, event, msg):
- return self.read_data
+ self.config_data = msg
+ with open("/usr/static/storage_file/config.json",'w+',encoding="utf-8") as fd:
+ ujson.dump(self.config_data,fd)
+ def set_storage_config(self,event,msg):
+ # print("set_storage_key_data1:{}".format(msg))
+ if len(msg) >= 2:
+ self.config_data[msg[0]]=msg[1]
+ # print("set_storage_key_data2:{}".format(self.config_data[msg[0]]))
+ EventMesh.publish("publish_message_event_ui",{"func":self.set_storage_save,"data":0})
+ def set_storage_save(self, data):
+ with open("/usr/static/storage_file/config.json",'w+',encoding="utf-8") as fd:
+ ujson.dump(self.config_data,fd)
+ def get_storage_data(self, event, msg):
+ # print("get_storage_data:{}".format(self.config_data))
+ return self.config_data
+ def get_storage_config(self,event,msg):
+ # print("get_storage_key_data1:{}".format(msg))
+ b = msg in self.config_data.keys()
+ if b == True:
+ # print("get_storage_key_data2:{}".format(self.config_data[msg]))
+ return self.config_data[msg]
+ else :
+ return None
+ # try:
+ # return self.config_data[msg]
+ # except:
+ # print("get_storage_key_data:none key:{}",msg)
+ # return None
#定位频率
class getUpLoadDataManager(Abstract):#
def __init__(self):
self.upload_time = 1800
- check = ql_fs.path_exists("/usr/static/storage_file/config.json")
- if check == True:
- with open("/usr/static/storage_file/config.json","r") as fd:
- self.read_data = ujson.load(fd)
- if self.read_data != {}:
- b = str("upload_time") in self.read_data.keys()
- if b == True:
- self.upload_time = self.read_data["upload_time"]
+ read_data = EventMesh.publish("get_storage_config","upload_time")
+ if read_data != None:
+ self.upload_time = read_data
+
def post_processor_after_instantiation(self):
EventMesh.subscribe("set_upload_data", self.set_upload_data)
class getVolumSizeManager(Abstract):#设置或获取音量大小数据
def __init__(self):
self.volume_size = 8
- self.read_data = {}
- check = ql_fs.path_exists("/usr/static/storage_file/config.json")
-
- if check == True:
- with open("/usr/static/storage_file/config.json","r") as fd:
- self.read_data = ujson.load(fd)
- if self.read_data != {}:
- b = str("volum") in self.read_data.keys()
- if b == True:
- self.volume_size = self.read_data["volum"]
- else:
- self.volume_size = 8
- else:
- self.volume_size = 8
- # print("self.volume_size:{}".format(self.volume_size))
+ read_data = EventMesh.publish("get_storage_config","volum")
+ if read_data != None:
+ self.volume_size = read_data
+
def post_processor_after_instantiation(self):
EventMesh.subscribe("set_volum_size", self.set_volum_size)
EventMesh.subscribe("get_volum_size", self.get_volum_size)
def set_volum_size(self, event, msg):
self.volume_size = msg
+ EventMesh.publish("set_storage_config", ["volum",self.volume_size])
def get_volum_size(self, event, msg):
return self.volume_size
class getSosFlagManager(Abstract):#设置sos
def __init__(self):
+ self.aud = audio.Audio(0)
self.sos_flag = 0
self.sos_num = 0
self.hangup_mode = 0
self.call_timer = osTimer()
self.sos_numer1 = []
self.callnumer =""
- self.read_data = {}
- check = ql_fs.path_exists("/usr/static/storage_file/config.json")
-
- if check == True:
- with open("/usr/static/storage_file/config.json","r") as fd:
- self.read_data = ujson.load(fd)
- if self.read_data != {}:
- b1 = str("SOS_NUMBER1") in self.read_data.keys()
- if b1 == True:
- self.sos_numer1 = [self.read_data["SOS_NUMBER1"]]
- b2 = str("SOS_NUMBER2") in self.read_data.keys()
- if b2 == True:
- self.sos_numer1 = [self.read_data["SOS_NUMBER1"], self.read_data["SOS_NUMBER2"]]
-
- b3 = str("SOS_NUMBER3") in self.read_data.keys()
- if b3 == True:
- self.sos_numer1 = [self.read_data["SOS_NUMBER1"], self.read_data["SOS_NUMBER2"],self.read_data["SOS_NUMBER3"]]
-
- # print("self.sos_numer1:{} self.read_data:{}".format(self.sos_numer1,self.read_data))
+ SOS_NUMBER1 = EventMesh.publish("get_storage_config","SOS_NUMBER1")
+ if SOS_NUMBER1 != None:
+ self.sos_numer1 = SOS_NUMBER1
+ SOS_NUMBER2 = EventMesh.publish("get_storage_config","SOS_NUMBER2")
+ if SOS_NUMBER1 != None:
+ self.sos_numer1 = [SOS_NUMBER1, SOS_NUMBER2]
+
+ SOS_NUMBER3 = EventMesh.publish("get_storage_config","SOS_NUMBER3")
+ if SOS_NUMBER3 != None:
+ self.sos_numer1 = [SOS_NUMBER1, SOS_NUMBER2,SOS_NUMBER3]
+
def post_processor_after_instantiation(self):
EventMesh.subscribe("set_sos_flag", self.set_sos_flag)#设置sos拨打标识
EventMesh.publish("save_phonename",number[0])
EventMesh.publish("save_phonenum",number[0])
EventMesh.publish("set_sos_num",0)
- EventMesh.publish("load_screen", {"screen": "dialing_noplay_popup"})
- #voiceCall.callStart(str(number[0]))
+ phone_num = EventMesh.publish("get_phonenum")
+ EventMesh.publish("dial_out_call_center_cb",phone_num)#电话拨出去
+ else:
+ EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
def set_callnumer_cb(self, event, msg):
self.callnumer = msg
- self.call_timer.start(5000, 0, self.call_timer_cb)#延迟1S 继续拨打
+ self.call_timer.start(10000, 0, self.call_timer_cb)#延迟10S 继续拨打
def call_timer_cb(self, *args, **kwargs):
# print("call_timer_cb:{}".format(self.callnumer))
EventMesh.publish("save_phonename",str(self.callnumer))
EventMesh.publish("save_phonenum",str(self.callnumer))
- EventMesh.publish("load_screen", {"screen": "dialing_noplay_popup"})
+ phone_num = EventMesh.publish("get_phonenum")
+ EventMesh.publish("dial_out_call_center_cb",phone_num)#电话拨出去
+ # phone_num = EventMesh.publish("get_phonenum")
+ # voiceCall.callStart(phone_num)
+ # self.aud.play(1, 1, 'U:/static/R_SOS_ALERT.mp3') #电话呼叫启动中
def get_sos_flag(self, event, msg):
return self.sos_flag
return self.sos_numer1
class getLowBatManager(Abstract):#低电提醒
def __init__(self):
- self.read_data = {}
+
self.low_btn = 0
- check = ql_fs.path_exists("/usr/static/storage_file/config.json")
-
- if check == True:
- with open("/usr/static/storage_file/config.json","r") as fd:
- self.read_data = ujson.load(fd)
- if self.read_data != {}:
- b1 = str("low_on") in self.read_data.keys()
- if b1 == True:
- self.low_btn = self.read_data["low_on"]
+ read_data = EventMesh.publish("get_storage_config","low_on")
+ if read_data != None:
+ self.low_btn = read_data
def post_processor_after_instantiation(self):
EventMesh.subscribe("set_low_bat_btn", self.set_low_bat_btn)#
def set_low_bat_btn(self, event, msg):
self.low_btn = msg
+ EventMesh.publish("set_storage_config",["low_on",self.low_btn])
def get_low_bat_btn(self, event, msg):
return self.low_btn
-class getCountDownManager(Abstract):#倒计时
- def __init__(self):
- self.read_data = {}
- self.low_btn = 0
-
-
- def post_processor_after_instantiation(self):
- EventMesh.subscribe("set_low_bat_btn", self.set_low_bat_btn)#
- EventMesh.subscribe("get_low_bat_btn", self.get_low_bat_btn)
- def set_low_bat_btn(self, event, msg):
- self.low_btn = msg
- def get_low_bat_btn(self, event, msg):
- return self.low_btn
+class playPowerAudioManager(Abstract):#播放开关机音频文件
+ def __init__(self):
+ self.aud = audio.Audio(0)
+ def post_processor_after_instantiation(self):
+
+ EventMesh.subscribe("play_poewr_on_event", self.play_poewr_on_event)#
+ EventMesh.subscribe("play_poewr_off_event", self.play_poewr_off_event)
+ def play_poewr_on_event(self, event, msg):
+ self.aud.play(1, 1, 'U:/static/R_POWER_1.mp3') #播放播放开机铃声
+ def play_poewr_off_event(self, event, msg):
+ self.aud.setVolume(11)
+ self.aud.play(1, 1, 'U:/static/R_POWER_OFF_1.mp3') #播放关机铃声
class getBootOffManager(Abstract):#开关机时间
def __init__(self):
- self.read_data = {}
self.off_msg = {}
self.off_flag = 0
self.rtc = RTC()
- check = ql_fs.path_exists("/usr/static/storage_file/config.json")
- if check == True:
- with open("/usr/static/storage_file/config.json","r") as fd:
- self.read_data = ujson.load(fd)
- if self.read_data != {}:
- b1 = str("off_on") in self.read_data.keys()
- if b1 == True:
- self.off_on = self.read_data["off_on"]
- b2 = str("off_start") in self.read_data.keys()
- if b2 == True:
- self.off_start= self.read_data["off_start"]
-
- b3 = str("off_end") in self.read_data.keys()
- if b3 == True:
- self.off_end = self.read_data["off_end"]
-
- # print("self.sos_numer1:{} self.read_data:{}".format(self.sos_numer1,self.read_data))
+ read_data = EventMesh.publish("get_storage_config","off_on")
+ if read_data != None:
+ self.off_on = read_data
+ read_data = EventMesh.publish("get_storage_config","off_start")
+ if read_data != None:
+ self.off_start= read_data
+ read_data = EventMesh.publish("get_storage_config","off_end")
+ if read_data != None:
+ self.off_end = read_data
+
def post_processor_after_instantiation(self):
EventMesh.subscribe("set_boot_off_time", self.set_boot_off_time)#设置关机时间
EventMesh.subscribe("get_boot_off_time", self.get_boot_off_time)
def set_boot_off_time(self, event, msg):
- read_data = EventMesh.publish("get_storage_data")
- read_data["off_on"] = msg[0]
- read_data["off_start"] = msg[1]
- read_data["off_end"] = msg[2]
- with open("/usr/static/storage_file/config.json", 'w+',encoding='utf-8') as fd:
- ujson.dump(read_data,fd)
+ EventMesh.publish("get_storage_config",["off_on",msg[0]])
+ EventMesh.publish("get_storage_config",["off_start",msg[1]])
+ EventMesh.publish("get_storage_config",["off_end",msg[2]])
self.off_msg = msg
- # print("read_data:{} self.off_msg:{}".format(read_data,self.off_msg))
+
def get_boot_off_time(self, event, msg):
flag = 0
flag = 1
return [self.off_msg,flag]
+class setSmsIndexManager(Abstract):#
+ def __init__(self):
+ self.index = -1
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_sms_index", self.set_sms_index)#设置关机时间
+ EventMesh.subscribe("get_sms_index", self.get_sms_index)
+
+ def set_sms_index(self, event, msg):
+ self.index = msg
+
+
+ def get_sms_index(self, event, msg):
+
+ return self.index
+
+class testSmsSetIPManager(Abstract):#
+ def __init__(self):
+ self.timer = osTimer()
+ self.newip = "api.xcloudtech.com"#默认防走丢协议
+ self.newcom = 9000
+ self.newmd5 = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
+ tmp_data = EventMesh.publish("get_storage_config","set_new_ip_addr")
+ if tmp_data != None:
+ self.newip = tmp_data
+ tmp_data = EventMesh.publish("get_storage_config","set_new_com")
+ if tmp_data != None:
+ self.newcom = tmp_data
+ tmp_data = EventMesh.publish("get_storage_config","set_new_md5")
+ if tmp_data != None:
+ self.newmd5 = tmp_data
+
+
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_new_ip", self.set_new_ip)#设置关机时间
+ EventMesh.subscribe("get_new_ip", self.get_new_ip)
+
+ def set_new_ip(self, event, msg):
+ self.newip = str(msg[0])
+ self.newcom = int(msg[1])
+ # self.newmd5 = str(msg[2])
+ #短信格式: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])
+
+ number = str(msg[2])
+ sms.sendPduMsg(number, 'set ok', 'UCS2')
+ self.timer.start(10*1000,0,self.fun)
+
+ def fun(self,*argc):
+ 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]
+ if(tmp_data != None):
+ return [self.newip,self.newcom]
\ No newline at end of file
import machine
import _thread
+import usys
+
+
+def server_init(server_type = None):
+ #服务器选择1,防走丢,2大锤,3三基同创,4童信
+ 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"
+ elif server_type == 4:
+ d_server_addr = "tcp.tx.kidxin.com"
+ d_server_port = 20500
+ elif server_type == 5:
+ d_server_addr = "device.miwitracker.com"
+ d_server_port = 8505
+ 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
+ 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))
+
+ 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.socket_send_queue = Queue()
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
data = self.socket_send_queue.get()
print("TCP:send data1 len:{}".format(len(data)))
- #print("ui_queue_thread:data = {}".format(data))
+ # print("ui_queue_thread:data = {}".format(data))
socketsta = self.sock.getsocketsta()
if(socketsta == -1): #给释放了或者出错了
continue
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)))
- #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()
HEADER = "#@{}@#;"
SEPARATOR = ";"
END = ";" + chr(0x01)
- PID = "SZKW"
- md5_key = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
- # PID = "qAELPTKmFanR4RHe"
- # md5_key = "3JyCjsw4ryXKzjzudayY"
+ #PID = "SZKW"
+ #PID = "qAELPTKmFanR4RHe"
+
def __init__(self):
self.content = None
self.check_sum = None
- self.location_old_data = None
self.password = EventMesh.publish(constants.EVENT.GET_PASSWORD)
self.imei = EventMesh.publish(constants.EVENT.GET_IMEI)
self.cid = EventMesh.publish(constants.EVENT.GET_CID)
self.imsi = EventMesh.publish(constants.EVENT.GET_IMSI)
self.key = EventMesh.publish(constants.EVENT.GET_KEY)
self.HEADER = self.HEADER.format(self.TYPE)
+ server_data = server_init()
+ self.md5_key = server_data[2]
+ self.PID = server_data[3]
+
+
+ # ip_infor = {}
+ # ip_infor = EventMesh.publish("get_new_ip")
+ # if ip_infor != None:
+ # self.md5_key = ip_infor[2]
+ # print("md5_key",self.md5_key)
def initialization(self, *args, **kwargs):
EventMesh.subscribe(self.TYPE + "_SEND", self.handler)
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()
EventMesh.publish(constants.PROTOCOL.PING_SEND)
EventMesh.publish(constants.PROTOCOL.KA_SEND)
EventMesh.publish(constants.PROTOCOL.TIME_SEND)
- EventMesh.publish(constants.EVENT.START_LOCATION) #开始定位
-
+ EventMesh.publish(constants.EVENT.START_LOCATION,constants.PROTOCOL.UD_SEND) #开始UD定位
+ EventMesh.publish(constants.EVENT.START_LOCATION,constants.PROTOCOL.WT_SEND) #开始WT定位
class PING_ProtoCol(ProtoCol):
"""获取绑定状态"""
old_step = 0
step = 0
step = EventMesh.publish("get_old_step_value")
- if step != 0:
- read_data = EventMesh.publish("get_storage_data")
- b = str("old_step_new") in read_data.keys()
- if b == True:
- old_step = read_data["old_step_new"]
- else:
- old_step = 0
- if old_step != step:
- # print("old_step:send:%d %d"%(old_step,step))
- read_data["old_step"] = step
- read_data["old_step_new"] = step+10
- EventMesh.publish("set_storage_data", read_data)
- with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
- ujson.dump(read_data,fd)
+ 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]
class UD_ProtoCol(ProtoCol):
"""位置信息"""
TYPE = "UD"
+ UD_count = 0#每6次定位获取一次天气数据
def send(self, event, msg):
#"{:04d}-{:02d}-{:02d}".format(*utime.localtime()[0:3])
#[6f62cfc40fc50173f9a7b21e87be3424IS*861217001020120*00f6*UD,220726,211210,A,22.649529,N,114.119165,E,0.28,137.4,100.0,8,24,63,119,0,00000000,2,1,460,11,30472,125667122,24,30472,218944048,19,4,
# wifi0,34:93:44:01:28:b9,-74,wifi1,34:20:03:96:35:ad,-78,wifi2,ea:b5:7b:e8:56:54,-80,wifi3,c4:49:bb:d4:d9:78,-88]
- date = "{:04d}{:02d}{:02d},{:02d}{:02d}{:02d}".format(*utime.localtime()[0:6])
- date = date[2:]
- GPS_type = "V"
- latitude = "0.000000,N"
- longitude = "0.000000,E"
- speed = "0.00"
- direction = "0.0"
- high = "100.0"
- number = "0"
- if msg[0] != [] :#有GPS数据
- GPS_type = "A"
- # 纬度
- latitude = msg[0]["latitude"]
- # 经度
- longitude = msg[0]["longitude"]
- # 速度
- speed = msg[0]["speed"]
- # 方向
- direction = "0"
- if msg[0]["direction"] :
- direction = msg[0]["direction"]
- # 高度
- high = msg[0]["high"]
- high_tmp = high.split(".")
- if len(high_tmp) >= 2 :
- high = "%s"%(high_tmp[0])
- # 讯号质量:搜索到的卫星数目
- number = msg[0]["number"]
- #gsm 信号强度
- gsm_sig = str((100//31)*EventMesh.publish("screen_get_sig"))
- # 电池电量百分比
- bat_tmp = EventMesh.publish("screen_get_battery")
- battery_caption = str(bat_tmp[1])
- #步数
- old_step = 0
- step = 0
- step = EventMesh.publish("get_old_step_value")
- if step != 0:
- read_data = EventMesh.publish("get_storage_data")
- b = str("old_step_new") in read_data.keys()
- if b == True:
- old_step = read_data["old_step_new"]
- else:
- old_step = 0
- if old_step != step:
- read_data["old_step"] = step
- read_data["old_step_new"] = step
- EventMesh.publish("set_storage_data", read_data)
- with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
- ujson.dump(read_data,fd)
- old_step = step
- # step = str(EventMesh.publish(constants.EVENT.GET_STEP)[0])
- #翻转次数
- turn_count = "0"
- #终端状态
- state = "00000000"
- #基站数据
- CELL_num = len(msg[2])
- CELL_data = "1," #时延
- if msg[2] != []:
- for CELL in msg[2] :
- if CELL[0] == 0 :
- CELL_data += "%X,"%(int(CELL[2])) #MCC
- CELL_data += str(CELL[3]) +","#MNC
- CELL_data += str(CELL[5]) +","#tac,区域码
- CELL_data += str(CELL[1]) +","#基站编号 CID
- CELL_data += str(int(CELL[7]+140)) +","#信号强度 rssi
- else :
- CELL_data += str(CELL[5]) +","#tac,区域码
- CELL_data += str(CELL[1]) +","#基站编号 CID
- CELL_data += str(int(CELL[7]+140)) +","#信号强度 rssi
- CELL_data = CELL_data[:(len(CELL_data)-1)]
- #WIFI数据
- WIFI_num = 0
- WIFI_data = ""
- if msg[1] :
- WIFI_num = msg[1][0]
- i = 0
- for MAC in msg[1][1] :
- WIFI_data += "wifi%d,%s,%d,"%(i,str(MAC[0]),MAC[1])
- i += 1
- WIFI_data = WIFI_data[:(len(WIFI_data)-1)]
- WIFI_data = WIFI_data.lower()
- #send_data = "UD ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%d ,%s ,%d ,%s"\
- # %(date,GPS_type,latitude,longitude,speed,direction,high,number,gsm_sig,battery_caption,step,turn_count,state,CELL_num,CELL_data,WIFI_num,WIFI_data)
- send_data = "UD,%s,%s,%s"%(date,GPS_type,latitude)
- send_data += ",%s,%s,%s"%(longitude,speed,direction)
- send_data += ",%s,%s,%s"%(high,number,gsm_sig,)
- send_data += ",%s,%s,%s"%(battery_caption,step,turn_count)
- send_data += ",%s,%d,%s"%(state,CELL_num,CELL_data)
- send_data += ",%d,%s"%(WIFI_num,WIFI_data)
+
+
+ self.UD_count+=1
+ #每6次定位获取一次天气数据
+ if self.UD_count>=6:
+ self.UD_count = 0
+ EventMesh.publish(constants.PROTOCOL.WT_SEND,msg)
+ send_data ="UD,"+msg
send_len = len(send_data)
- wt_data = "%s"%(send_data)
+ #wt_data = "%s"%(send_data)
send_data = self.PID+"*%s*%04X*%s"%(self.imei,send_len,send_data)
MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,send_len,"UD")
+
MD5_SIGN = self.pack_MD5_head(MD5_head_data)
data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ print("UD:data:{}".format(data))
+ # wt_data = EventMesh.publish("get_weather_data")
+ # # #如果没有天气数据,则获取天气数据
+ # if wt_data != None or wt_data[0] == None :
+ #
-
-
- #这个是发送WT位置数据到手机端
- msg_tmp = wt_data.split('UD,')
- msg_tmp = msg_tmp[1]
- # print("WT_ProtoCol:msg_tmp:%s"%(msg_tmp))
- send_data_1 = self.PID+"*%s*%04x*WT"%(self.imei,len(msg_tmp))
- MD5_SIGN_1 = self.pack_MD5_head(send_data_1)
- data_1 = "[%s%s,%s]"%(str(MD5_SIGN_1),send_data_1,msg_tmp)
- # print("WT_ProtoCol:send:%s"%(data_1))
- EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data_1)
- # 通过socket发送到服务器端
-
- print("UD_ProtoCol send:{}".format(data))
EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
def recv(self, event, msg):
- """
-
- @param event: PING
- @param msg: 接收到的下行数据
- """
+ pass
# print("UD_ProtoCol:recv:%s"%(msg))
class CR_ProtoCol(ProtoCol):
@param msg: 接收到的下行数据
"""
EventMesh.publish(constants.PROTOCOL.CR_SEND)
- EventMesh.publish(constants.EVENT.START_LOCATION) #开始定位
+ EventMesh.publish(constants.EVENT.START_LOCATION,constants.PROTOCOL.UD_SEND) #开始ud定位
#print("CR_ProtoCol:recv:%s"%(msg))
class FIND_ProtoCol(ProtoCol):
# a = audio.Audio(0)
# a.set_pa(Pin.GPIO29)
# a.setVolume(10)
- # a.play(1, 1, 'U:/audio_audio_haixiu.mp3') #文件名前面要加上路径
- EventMesh.publish("set_find_watch_led")#
+ # a.play(1, 1, 'E:/audio_audio_haixiu.mp3') #文件名前面要加上路径
+
# EventMesh.publish("load_screen", {"screen": "FIND"})
+ EventMesh.publish("OPEN_FIND_WATCH")#
#print("FIND_ProtoCol:recv:%s"%(msg))
class POWEROFF_ProtoCol(ProtoCol):
EventMesh.publish(constants.PROTOCOL.PHL_SEND)
EventMesh.publish("set_phonebook_list",[1,phonebook])
- # EventMesh.publish("contact_updata_list_show")
+ EventMesh.publish("contact_updata_list_show")
class WT_ProtoCol(ProtoCol):
"""天气数据"""
TYPE = "WT"
-
+ WT_T = 0
def send(self, event, msg):
# [SZKW*867387060319491*0008*WT]
- send_data = self.PID+"*%s*003*WT"%(self.imei)
- MD5_SIGN = self.pack_MD5_head(send_data)
- data = "[%s%s]"%(str(MD5_SIGN),send_data)
- # print("WT_ProtoCol:send:%s"%(data))
- # 通过socket发送到服务器端
- EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+ # if self.WT_T != 0:
+ # tmp_WT =
+ if(msg != ""):
+ msg_tmp = "WT," + msg
+ data_len = len(msg_tmp)
+ MD5_head_data = self.PID+"*%s*%04X*WT"%(self.imei,data_len)
+ MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+ send_data = self.PID+"*%s*%04X*%s"%(self.imei,data_len,msg_tmp)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ print("WT_ProtoCol:send:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
def recv(self, event, msg):
"""
print("WT_ProtoCol RECV msg:%s"%(msg))
EventMesh.publish("set_weather_data",[msg_date,msg_time,msg_weather_content,msg_type,msg_temp,msg_min_temp,msg_max_temp,msg_city,1])
- # EventMesh.publish("updata_weather_show")
- EventMesh.publish(constants.PROTOCOL.WT_SEND)
+ EventMesh.publish("updata_weather_show")
+
class REMIND_ProtoCol(ProtoCol):
"""闹钟数据"""
def send(self, event, msg):
# [SZKW*867387060319491*0008*REMIND]
- send_data = self.PID+"*%s*006*REMIND"%(self.imei)
+ send_data = self.PID+"*%s*0006*REMIND"%(self.imei)
MD5_SIGN = self.pack_MD5_head(send_data)
data = "[%s%s]"%(str(MD5_SIGN),send_data)
# print("REMIND_ProtoCol:send:%s"%(data))
def send(self, event, msg):
# [SZKW*867387060319491*0008*hrtstart]
- send_data = self.PID+"*%s*008*hrtstart"%(self.imei)
+ send_data = self.PID+"*%s*0008*hrtstart"%(self.imei)
MD5_SIGN = self.pack_MD5_head(send_data)
data = "[%s%s]"%(str(MD5_SIGN),send_data)
# print("HRSTART_ProtoCol:send:%s"%(data))
msg_tmp = msg.decode('ascii')
msg_tmp = msg_tmp.split(',')
msg_tmp = msg_tmp[1]
- # print("HRSTART_ProtoCol RECV msg:{} msg_:{}".format(msg,msg_tmp))
+ print("HRSTART_ProtoCol RECV msg:{} msg_:{}".format(msg,msg_tmp))
hrTotal = int(msg_tmp)
- if hrTotal == 1:#单次测量
- get_hr_state = EventMesh.publish("get_hr_state")
- get_spo2_state = EventMesh.publish("get_spo2_state")
- if (get_spo2_state == 3) or (get_spo2_state == 0 and get_hr_state == 0):#只要两个不在测量 单次优先级最低
- EventMesh.publish("set_hr_state",3)#3代表单次测量
+ if hrTotal == 0:#关闭自动测量
+ print("HRSTART_ 1")
+ EventMesh.publish("set_time_hr_spo2",[0,0])
else:
- if hrTotal > 0 and hrTotal <= 300:
- hrTotal = 300
- elif hrTotal >= 65536:
- hrTotal = 65536
-
- storage_tmp = EventMesh.publish("get_storage_data")
- storage_tmp["measure_time"] = hrTotal
- EventMesh.publish("set_storage_data", storage_tmp)
- with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
- ujson.dump(storage_tmp,fd)
-
- EventMesh.publish("set_time_hr_spo2",hrTotal)
-
+ if hrTotal == 1:#单次测量
+ print("HRSTART_ 2".format(hrTotal))
+ get_hr_state = EventMesh.publish("get_hr_state")
+ get_spo2_state = EventMesh.publish("get_spo2_state")
+ # if (get_hr_state == 3 ) or (get_spo2_state == 0 and get_hr_state == 0):#只要两个不在测量 单次优先级最低
+ if (get_spo2_state == 0 and get_hr_state == 0):
+ EventMesh.publish("set_hr_state",3)#3代表单次测量
+ pass
+ else:
+ if hrTotal > 0 and hrTotal <= 300:
+ hrTotal = 300
+ elif hrTotal >= 65536:
+ hrTotal = 65536
+ print("HRSTART_ 3".format(hrTotal))
+ EventMesh.publish("set_time_hr_spo2",[1,hrTotal])
+
+
EventMesh.publish(constants.PROTOCOL.HRTSTART_SEND)
class HEART_ProtoCol(ProtoCol):
def send(self, event, msg):
# [SZKW*334588000000156*len*heart,x]
# print("HEART:send:{}".format(msg))
- len_size = len(str(msg))+6
+ len_size = len(str(msg))+len("heart,")
send_data = self.PID+"*%s*%04X*heart"%(self.imei,len_size)
MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,len_size,"heart")
MD5_SIGN = self.pack_MD5_head(MD5_head_data)
def send(self, event, msg):
# [SZKW*334588000000156*len*heart,x]
# print("oxstart:send:{}".format(msg))
- len_size = len(str(msg))+6
+ len_size = len(str(msg))+len("oxygen,")
send_data = self.PID+"*%s*%04X*oxygen"%(self.imei,len_size)
MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,len_size,"oxygen")
MD5_SIGN = self.pack_MD5_head(MD5_head_data)
get_hr_state = EventMesh.publish("get_hr_state")
get_spo2_state = EventMesh.publish("get_spo2_state")
if state == 1:
- if (get_hr_state == 3 ) or (get_spo2_state == 0 and get_hr_state == 0):#只要两个不在测量 单次优先级最低
+ # if (get_hr_state == 3 ) or (get_spo2_state == 0 and get_hr_state == 0):#只要两个不在测量 单次优先级最低
+ if (get_spo2_state == 0 and get_hr_state == 0):
EventMesh.publish("set_spo2_state",3)#3代表单次测量
EventMesh.publish(constants.PROTOCOL.OXSTART_SEND)
def send(self, event, msg):
# [SZKW*334588000000156*len*heart,x]
# print("temp:send:{}".format(msg))
- len_size = len(str(msg))+5
+ len_size = len(str(msg[0]))+len("temp,")+1+len(str(msg[1]))
+ print("temp:send:{} len:{}".format(msg,len_size))
# 实例:[XT*334588000000156*0009*temp,36.2]
# 代表终端的温度为:36.2
# 平台回复:
tempTotal = 300
elif tempTotal >= 65536:
tempTotal = 65536
- storage_tmp = EventMesh.publish("get_storage_data")
- storage_tmp["temp_time"] = tempTotal
- EventMesh.publish("set_storage_data", storage_tmp)
+
EventMesh.publish("set_temp_time",tempTotal)
- print("storage_tmp:{}".format(storage_tmp))
- with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
- ujson.dump(storage_tmp,fd)
+
+
EventMesh.publish(constants.PROTOCOL.WDSTART_SEND)
#解绑
@param msg: 接收到的下行数据
"""
# print("DLT_ProtoCol RECV msg:")
- reset_factory(1)
+
#定位频率
class UPLOAD_ProtoCol(ProtoCol):
msg_tmp = msg_tmp.split(',')
msg_tmp = msg_tmp[1]
upload_time = int(msg_tmp)
- storage_tmp = EventMesh.publish("get_storage_data")
- storage_tmp["upload_time"] = upload_time
- EventMesh.publish("set_storage_data", storage_tmp)
+ EventMesh.publish("set_storage_config",["upload_time",upload_time])
+
EventMesh.publish("set_upload_data", upload_time)
- with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
- ujson.dump(storage_tmp,fd)
EventMesh.publish(constants.PROTOCOL.UPLOAD_SEND)
#设置快捷号码
msg_tmp = msg_tmp[1]
print("CENTER_ProtoCol RECV msg:{} msg_:{}".format(msg,msg_tmp))
center_dial = str(msg_tmp)
- storage_tmp = EventMesh.publish("get_storage_data")
- storage_tmp["center_dial"] = center_dial
- EventMesh.publish("set_storage_data", storage_tmp)
- with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
- ujson.dump(storage_tmp,fd)
+ EventMesh.publish("set_storage_config",["center_dial",center_dial])
EventMesh.publish(constants.PROTOCOL.CENTER_SEND)
#呼叫快捷电话号码
@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)
- EventMesh.publish("set_call_state", 1)#
- voiceCall.callStart(contact)
+ read_data = EventMesh.publish("get_storage_config","center_dial")
+ print("MONITOR:data:%s"%(read_data))
+ 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)
+ EventMesh.publish("dial_out_call_center_cb",contact)#电话拨出去
EventMesh.publish(constants.PROTOCOL.MONITOR_SEND)
#定时开关机
"""
# b'[SZKW*867387060319166*000A*SOS_SEND]'
- read_data = {}
- read_data = EventMesh.publish("get_storage_data")
msg = msg[1:-1]
msg_tmp = msg.decode('ascii')
msg_tmp = msg_tmp.split(',')
for i in range(len(msg_tmp)-1):
# print("sos:send data :{}".format(msg_tmp[i+1]))
if len(msg_tmp[i+1]) != 0:
- read_data["SOS_NUMBER{}".format(i+1)] = msg_tmp[i+1]
+ EventMesh.publish("set_storage_config",["SOS_NUMBER{}".format(i+1),msg_tmp[i+1]])
# print("read_data:{} msg_tmp:{}".format(read_data,msg_tmp[i+1]))
if (len(msg_tmp)-1) == 3:
EventMesh.publish("set_dial_sos_number",[msg_tmp[1],msg_tmp[2]])
elif (len(msg_tmp)-1) == 1:
EventMesh.publish("set_dial_sos_number",[msg_tmp[1]])
-
-
- if (len(msg_tmp)-1) != 0:
- EventMesh.publish("set_storage_data",read_data)
- # print("read_data:{}".format(read_data))
- with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
- ujson.dump(read_data,fd)
+
EventMesh.publish(constants.PROTOCOL.SOS_SEND)
# 低电提醒
@param msg: 接收到的下行数据
"""
# b'[SZKW*867387060319166*000A*LOWBAT]'
- read_data = {}
- read_data = EventMesh.publish("get_storage_data")
+
msg = msg[1:-1]
msg_tmp = msg.decode('ascii')
msg_tmp = msg_tmp.split(',')
on_bt = msg_tmp[1]
print("LOWBAT:send data:{}".format(on_bt))
#b'[SZKW*860132060006970*0015*LOWBAT,1,06:00,23:59]'
-
- read_data["low_on"] = on_bt
- EventMesh.publish("set_storage_data",read_data)
EventMesh.publish("set_low_bat_btn",on_bt)
- with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
- ujson.dump(read_data,fd)
EventMesh.publish(constants.PROTOCOL.LOWBAT_SEND)
# 低电提醒
#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("WLKEY:data:%s"%(data))
+ # print("WLKEY!!!!!!!!!!!!!")
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event:
+ @param msg: 接收到的下行数据
+ """
+ # b'[SZKW*867387060319166*000A*KEYBRD]'
+ # print("WLKEY!!!!!!!!!!!!!",msg)
+ EventMesh.publish(constants.PROTOCOL.WLKEY_SEND)
+
+#免打扰
+class SILENCETIME2_ProtoCol(ProtoCol):
+ """免打扰"""
+ TYPE = "SILENCETIME2"
+ def send(self, event, msg):
+ # [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("SILENCETIME2!!!!!!!!!!!!!",msg)
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event:
+ @param msg: 接收到的下行数据
+ """
+ # b'[SZKW*867387060319166*000A*KEYBRD]'
+ # print("SILENCETIME2!!!!!!!!!!!!!",msg)
+ EventMesh.publish(constants.PROTOCOL.SILENCETIME2_SEND)
+
+#键盘开关
+class KEYBRD_ProtoCol(ProtoCol):
+ """免打扰"""
+ TYPE = "KEYBRD"
+ def send(self, event, msg):
+ # [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("KEYBRD:data:%s"%(data))
+ # print("KEYBRD!!!!!!!!!!!!!",msg)
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event:
+ @param msg: 接收到的下行数据
+ """
+ # b'[SZKW*867387060319166*000A*KEYBRD]'
+ # print("KEYBRD!!!!!!!!!!!!!",msg)
+ EventMesh.publish(constants.PROTOCOL.KEYBRD_SEND)
class TK_ProtoCol(ProtoCol):
"""微聊"""
TYPE = "TK"
def send(self, event, msg):
- # [SZKW*YYYYYYYYYYYYYYY*LEN*TK,AMR 格式音频数据]
- #[XT*YYYYYYYYYYYYYYY*LEN*TKS,秒数(十进制),AMR 格式音频数据]
- arm_data = msg[1]
- arm_sec = msg[0]
- print("TK_ProtoCol:msgtype:{} arm_sec:{}".format(type(msg),arm_sec))
-
- arm = bytearray()
- for i in range(len(arm_data)):
- if arm_data[i] == 0x7d:
- arm.extend(b'\x7d\x01')
- elif arm_data[i] == 0x5b :
- arm.extend(b'\x7d\x02')
- elif arm_data[i] == 0x5d :
- arm.extend(b'\x7d\x03')
- elif arm_data[i] == 0x2c :
- arm.extend(b'\x7d\x04')
- elif arm_data[i] == 0x2a :
- arm.extend(b'\x7d\x05')
- else :
- arm.append(arm_data[i])
-
- datalen = len(arm) + 4+len(str(arm_sec))+1
- #Wechat_log("len(str(arm_sec)):{}".format(len(str(arm_sec))+1))
- send_data = bytearray("SZKW*%s*%04X*TKS,%d,"%(self.imei,datalen,arm_sec))
- send_data.extend(arm)
- MD5_SIGN = self.pack_MD5_head(send_data)
- data = bytearray('[')
- data.extend(MD5_SIGN)
- data.extend(send_data)
- data.extend(']')
- EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+ # print("TK send:{}".format(msg))
+ if len(str(msg)) == 1:
+
+ len_size = len(str(msg))+len("TKS,")
+ # 实例:[XT*334588000000156*0009*TK,1]
+ send_data = self.PID+"*%s*%04X*TKS"%(self.imei,len_size)
+ MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,len_size,"TKS")
+ MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+ data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
+ print("TK:data:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+ else:
+ # [SZKW*YYYYYYYYYYYYYYY*LEN*TK,AMR 格式音频数据]
+ #[XT*YYYYYYYYYYYYYYY*LEN*TKS,秒数(十进制),AMR 格式音频数据]
+ arm_data = msg[1]
+ arm_sec = msg[0]
+ # print("TK_ProtoCol:msgtype:{} arm_sec:{}".format(len(msg[1]),arm_sec))
+
+ arm = bytearray()
+ for i in range(len(arm_data)):
+ if arm_data[i] == 0x7d:
+ arm.extend(b'\x7d\x01')
+ elif arm_data[i] == 0x5b :
+ arm.extend(b'\x7d\x02')
+ elif arm_data[i] == 0x5d :
+ arm.extend(b'\x7d\x03')
+ elif arm_data[i] == 0x2c :
+ arm.extend(b'\x7d\x04')
+ elif arm_data[i] == 0x2a :
+ arm.extend(b'\x7d\x05')
+ else :
+ arm.append(arm_data[i])
+
+ datalen = len(arm) + 4+len(str(arm_sec))+1
+ #Wechat_log("len(str(arm_sec)):{}".format(len(str(arm_sec))+1))
+ send_data = bytearray("SZKW*%s*%04X*TKS,%d,"%(self.imei,datalen,arm_sec))
+ send_data.extend(arm)
+ MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,datalen,"TKS")
+ MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+ data = bytearray('[')
+ data.extend(MD5_SIGN)
+ data.extend(send_data)
+ data.extend(']')
+ # print("TK:send data:%s MD5_head_data:%s"%(data,MD5_head_data))
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
def recv(self, event, msg):
"""
-
+ ("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
@param event: 微聊
@param msg: 接收到的下行数据
[SZKW*860132060004322*20BD*TK,#!AMR...]
"""
#Wechat_log("K_ProtoCol:recv:data:{}".format(msg))
+ # print("TK recv:{}".format(msg))
msg_tmp = msg.decode('ascii')
str = msg_tmp.split('TK,')
# Wechat_log("TK_ProtoCol:recv:len:{} {} {}".format(len(msg),len(str),msg_tmp.find("#!AMR")))
# Wechat_log("TK_ProtoCol:recv:datalen{}".format(len(msg)))
arm_data = bytearray(str[1])#获取amr输出
get_wechat_data = EventMesh.publish("get_wechat_data")
-
MXA_MSG = get_wechat_data[0]
wechat_recode_list = get_wechat_data[1]
- wechat_num = get_wechat_data[1]
+ wechat_num = wechat_recode_list["num"]
# Wechat_log("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
if wechat_num >= MXA_MSG:
wechat_num += 1
elif wechat_num > 0:
wechat_num += 1
-
- EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_num])
+
+
+ print("num_total:datalen:{} {}".format(MXA_MSG,wechat_recode_list))
+ wechat_recode_list["%02d"%(wechat_num)] = "read:1"
+ wechat_recode_list['num'] = wechat_num
+ EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
#写语音文件数据
- screen_NAME = EventMesh.publish("get_screen_NAME")
- get_lcd_state = EventMesh.publish("get_lcd_state")
- if screen_NAME != "wechat" or get_lcd_state == 0:
- pass
- # EventMesh.publish("load_screen", {"screen": "wechat_popup"})
- else:
- pass
- # EventMesh.publish("wechat_updata_list_show")
- # path = "/usr/static/storage_file/audio_amr/amr/{}.amr".format(wechat_num)
+
+ # path = "/usr/static/storage_file/wechat.amr"
path = "/usr/static/storage_file/{}.amr".format(wechat_num)
with open(path,"w") as fd:
arm = bytearray()
if j >= len(arm_data):
break
fd.write(arm)
+ EventMesh.publish(constants.PROTOCOL.TK_SEND,1)
+
@param event: 微聊文字
@param msg: 接收到的下行数据
"""
-
- EventMesh.publish(constants.PROTOCOL.MESSAGE_SEND)
# msg = msg[1:-1]
# msg_s = msg.decode('ascii')
# wechat_num += 1
# msg_txt = {}
# # 0 1 2 3
- # print("wechat_num:init {}".format(wechat_num))
+ # Wechat_log("wechat_num:init {}".format(wechat_num))
# msg_txt = UnicodeHexStr_To_Utf8Str(msg_s)
# # Wechat_log("msg_txt:{}".format(msg_txt))
# wechat_recode_list["%02d"%(wechat_num)] = "T:{}".format(msg_txt)
# wechat_recode_list['num'] = wechat_num
- # # EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
+ # EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
# # Wechat_log("wechat_recode_list:len data:{}".format(wechat_recode_list))
# screen_NAME = EventMesh.publish("get_screen_NAME")
# get_lcd_state = EventMesh.publish("get_lcd_state")
# if screen_NAME != "wechat" or get_lcd_state == 0:
- # pass
- # # EventMesh.publish("load_screen", {"screen": "wechat_popup"})
+ # EventMesh.publish("load_screen", {"screen": "wechat_popup"})
# else:
- # pass
- # # EventMesh.publish("wechat_updata_list_show")
+ # EventMesh.publish("wechat_updata_list_show")
+ EventMesh.publish(constants.PROTOCOL.MESSAGE_SEND)
class ProtoColResolver(object):
def handler(self, data):
# 这里接收数据
- #print("handler -> {}".format(data))
+ # print("handler -> {}".format(data))
# if data.startswith('Init;'):
# data = data[5:]
# EventMesh.publish(constants.EVENT.SET_KEY, {"value": ujson.loads(data)['KEY']})
# 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)))
import _thread
from queue import Queue
from machine import RTC
-from usr.led import open_led_green,close_led_green
-
+import usys
def audio_cb(event):
if event == 0:
EventMesh.publish("set_audio_state", 1)
print("index:{}".format(index))
sms_data = sms.getSaveLoc()
sms_max = sms_data[0][2]
- if index >= sms_max:
+ if index != -1:
+ tmp = sms.searchTextMsg(index)
+ detail = tmp[1]#内容
+ print("msg_cb:detail {}".format,detail)
+ if detail.find("SETIP:") != -1:#寻找是否有这个字符串
+ tmp_test = detail.split("SETIP:")[1]
+ if tmp_test.find(":") != -1:
+ new_ip = tmp_test.split(':')[0]
+ # print("tmp_test:{} new_ip:{}".format(tmp_test,new_ip))
+ new_com = tmp_test.split(':')[1]
+ # new_md5 = detail.split(':')[3]
+ if len(new_ip) > 0 and len(new_com) > 0:
+ EventMesh.publish("set_new_ip", [new_ip,new_com,tmp[0]])#设置关机时间
+ # EventMesh.publish("set_new_ip", [new_ip,new_com,new_md5])#设置关机时间
+
+ if index >= sms_max-1:
EventMesh.publish("load_screen", {"screen": "message_full"})
else:
EventMesh.publish("load_screen", {"screen": "message_popup"})
self.volum_size = 8
self.aud = audio.Audio(0)
self.aud.set_pa(Pin.GPIO29)
- self.aud.setVolume(self.volum_size)
+ self.aud.setVolume(11)
self.call_timer = osTimer()
self.name = None
self.phonebook = {}
self.level = 6
self.read_data = {}
self.aud = audio.Audio(0)
- self.level = EventMesh.publish("get_brightness_level")
+ self.aud.set_pa(Pin.GPIO29)
+ self.aud.setVolume(11)
+ # self.level = EventMesh.publish("get_brightness_level")
self.read_data = EventMesh.publish("get_storage_data")
self.main_flag = 0
self.main_id = 0
self.set_interrup_flag = 0
self.UI_high_priority_flag = 0 #如果=1,则当前ui不被打断
# print("self.read_data:{} self.level:{}".format(self.read_data,self.level))
- check = ql_fs.path_exists("/usr/static/storage_file/config.json")
- if check == True:
- with open("/usr/static/storage_file/config.json","r") as fd:
- self.read_data = ujson.load(fd)
- if self.read_data != {}:
- b = str("brightness_level") in self.read_data.keys()
- if b == True:
- self.level = self.read_data["brightness_level"]
- else:
- self.level = 6
- self.read_data["brightness_level"] = self.level
- EventMesh.publish("set_storage_data", self.read_data)
- with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
- ujson.dump(self.read_data,fd)
- else:
- self.level = 6 #默认是6级别
+ # check = ql_fs.path_exists("/usr/static/storage_file/config.json")
+ # if check == True:
+ # with open("/usr/static/storage_file/config.json","r") as fd:
+ # self.read_data = ujson.load(fd)
+ # if self.read_data != {}:
+ # b = str("brightness_level") in self.read_data.keys()
+ # if b == True:
+ # self.level = self.read_data["brightness_level"]
+ # else:
+ # self.level = 6
+ # self.read_data["brightness_level"] = self.level
+ # EventMesh.publish("set_storage_data", self.read_data)
+ # with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
+ # ujson.dump(self.read_data,fd)
+ # else:
+ # self.level = 6 #默认是6级别
- if self.level == None:
- self.level = 6
- self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, self.level, 10)
- self.PWM_backlight.open()
+ # if self.level == None:
+ # self.level = 6
+ # self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, self.level, 10)
+ # self.PWM_backlight.open()
self.sleep_lock = 0
def post_processor_after_instantiation(self):
try:
data["func"](data["data"])
except Exception as e:
+ usys.print_exception(e)
print("ui_queue_thread:ERROR:{}".format(e))
# for scr in self.screen_list:
# if scr.handle_message_event(data) == 1 :
pm.autosleep(0)
pm.sclkEx_set(0, 1, 5)
utime.sleep_ms(60)
- self.level = EventMesh.publish("get_brightness_level")
- if self.level == None:
- self.level = 6
- elif self.level > 10:
- self.level = 10
- elif self.level <= 0:
- self.level = 1
+
self.sleep_lock = 0
EventMesh.publish("Hsensor_set_sleep") #让系统更快休眠
def system_sleep(self, event, msg) :
- self.__lcd_off()
+ pass
+ # self.__lcd_off()
def system_up(self, event, msg):
- self.__lcd_on()
+ pass
+ # self.__lcd_on()
def system_sleep_timer_cb(self, *args):
#print("system_sleep_timer_count:{}".format(self.system_sleep_timer_count))
self.system_sleep_timer_count += 1
if self.system_sleep_timer_count >= time :
self.system_sleep_timer_count = 0
- self.__lcd_off()
+ # self.__lcd_off()
def system_sleep_timeout_rest(self) :
#print("system_sleep_timeout_rest")
print('1剩余内存RAM:{} KB'.format(mem / 1024))
self.screen = scr
- play_state = EventMesh.publish("get_audio_state")#音频播放状态
- if play_state != None:
- if play_state != 0:#在上一个界面在播放音频时切换界面则关闭 以免一直播放
- self.aud.stop()
+
if self.screen_old != None :
self.screen_old.Close() #先关闭上一次界面
self.lv.scr_load(self.screen.get_meta())
self.screen.post_processor_after_initialization()
- self.__lcd_on()
+ # self.__lcd_on()
mem = gc.mem_free()
print('2剩余内存RAM:{} KB'.format(mem / 1024))
#ifndef __APP_LINK_START_ADDR_H__
#define __APP_LINK_START_ADDR_H__
-#define APP_LINK_START_ADDR 0x80507000
-#define APP_FLASH_MAX_SIZE 0x18A000
+#define APP_LINK_START_ADDR 0x80520000
+#define APP_FLASH_MAX_SIZE 0x190000
#define APP_RAM_START 0x7E3E0000
#define APP_RAM_MAX_SIZE 0x180000
power_on_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
power_on_label.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
print("power_on_screen init...")
+
+
lv.scr_load(power_on_screen)
utime.sleep_ms(200)
print("power_on_screen end...")
ui.add_screen(_ui.cameraVdieoScreen())
ui.add_screen(_ui.albumPreviewScreen())
ui.add_screen(_ui.cameraFullScreen())
+ ui.add_screen(_ui.restore_confirmScreen())
ui.add_screen(NewWechatPopupScreen())
ui.add_screen(HealthScreen())
# ui.add_screen(_ui.Setting3Screen())
def server_init(server_type = None):
- #服务器选择1,防走丢,2大锤,3三基同创
+ #服务器选择1,防走丢,2大锤,3三基同创,4童信
if server_type == None:
server_type = 1
#print("server_init:server_type:{}".format(server_type))
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
+ elif server_type == 5:
+ d_server_addr = "device.miwitracker.com"
+ d_server_port = 8505
+ 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):
#wt_data = "%s"%(send_data)
send_data = self.PID+"*%s*%04X*%s"%(self.imei,send_len,send_data)
MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,send_len,"UD")
- print("UD:MD5_head_data:{}".format(MD5_head_data))
+
MD5_SIGN = self.pack_MD5_head(MD5_head_data)
data = "[%s%s]"%(str(MD5_SIGN),send_data)
-
+ print("UD:data:{}".format(data))
# wt_data = EventMesh.publish("get_weather_data")
# # #如果没有天气数据,则获取天气数据
# if wt_data != None or wt_data[0] == None :
phonebook_oldtmp = phonebook_tmp
# print("phonebook_oldtmp!!!:{}".format(str(phonebook_oldtmp)))
# print("phonebook!!!:{}".format(str(phonebook)))
- with open("/usr/static/storage_file/phonebook.json","w",encoding="utf-8") as fd:
+ with open("/ext/static/storage_file/phonebook.json","w",encoding="utf-8") as fd:
ujson.dump(phonebook,fd)
print("创建电话簿")
alarm_new[j] = {"idx": j, "hour": alarm_time_hour, "minute": alarm_time_min, "days":alarm_day, "enabled": alarm_switch,"repeart":alarm_day_num}
# print("self.alarm_list: {}".format(alarm_new))
- with open("/usr/static/storage_file/alarm_msg.json", 'w',encoding='utf-8') as fd:
+ with open("/ext/static/storage_file/alarm_msg.json", 'w',encoding='utf-8') as fd:
ujson.dump(alarm_new,fd)
EventMesh.publish("push_update_alarm_show")
# EventMesh.publish("add_alarm",[0,msg_tmp])
EventMesh.publish(constants.PROTOCOL.REMIND_SEND)
-
class HRSTART_ProtoCol(ProtoCol):
"""心率频率数据"""
TYPE = "hrtstart"
EventMesh.publish(constants.PROTOCOL.HRTSTART_SEND)
+
class HEART_ProtoCol(ProtoCol):
"""心率数据"""
TYPE = "heart"
@param msg: 接收到的下行数据
"""
# b'[SZKW*867387060319166*000A*MONITOR]'
- read_data = EventMesh.publish("set_storage_config","center_dial")
+ read_data = EventMesh.publish("get_storage_config","center_dial")
if read_data != None:
contact = read_data
EventMesh.publish("set_low_bat_btn",on_bt)
EventMesh.publish(constants.PROTOCOL.LOWBAT_SEND)
+# 低电提醒
+#[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):
@param event:
@param msg: 接收到的下行数据
"""
- class_in_buf = {"1": {'enable': 0, 'end_time': '00:00', 'start_time': '00:00', 'week': []},\
- "0": {'enable': 0, 'end_time': '00:00', 'start_time': '00:00', 'week': []}, \
- "3": {'enable': 0, 'end_time': '00:00', 'start_time': '00:00', 'week': []}, \
- "2": {'enable': 0, 'end_time': '00:00', 'start_time': '00:00', 'week': []}}
-
- # class_in_buf.append({'start_hour': "16:54", 'week': [], 'idx': 0, 'enabled': 0, 'end_hour': "18:39"})
- msg = msg[1:-1]
- msg_tmp = msg.decode('ascii')
- msg_tmp_d = str(msg_tmp.split('SILENCETIME2,')[1])
-
- count = 1
- k = 0
-
- for i in range(len(str(msg_tmp_d))):
- if msg_tmp_d[i] == ',':
- count+=1
-
- for x in range(count):#08:00-17:00-1-0111110,08:00-17:00-1-0111110
- week = []
- if count > 1:
- msg_data = msg_tmp_d.split(',')[k]
- # print("SILENCETIME count",msg_data)
- k+= 1
- b = msg_data.find('-')
- if b != -1:
- data = msg_data.split('-')#-作为分隔符
- start_time = data[0]
- end_time = data[1]
- enable = int(data[2])
- week_day = data[3]
- for i in range(0,7):
- if week_day[i] != '0':
- week.append(i)
- tmp={}
- tmp["start_time"] = start_time
- tmp["end_time"] = end_time
- tmp["week"] = week
- tmp["enable"] = enable
- class_in_buf["{}".format(x)] = tmp
- else:
- b = msg_tmp_d.find('-')
- if b != -1:
- data = msg_tmp_d.split('-')#-作为分隔符
- start_time = data[0]
- end_time = data[1]
- enable = int(data[2])
- week_day = data[3]
- for i in range(0,7):
- if week_day[i] != '0':
- week.append(i)
- tmp={}
- tmp["start_time"] = start_time
- tmp["end_time"] = end_time
- tmp["week"] = week
- tmp["enable"] = enable
- class_in_buf["{}".format(x)] = tmp
-
- with open("/usr/static/storage_file/class_msg.json", 'w+',encoding='utf-8') as fd:
- ujson.dump(class_in_buf,fd)
-
-
- EventMesh.publish("set_class_time", class_in_buf)
+ # b'[SZKW*867387060319166*000A*KEYBRD]'
+ # print("SILENCETIME2!!!!!!!!!!!!!",msg)
EventMesh.publish(constants.PROTOCOL.SILENCETIME2_SEND)
#键盘开关
class KEYBRD_ProtoCol(ProtoCol):
- """键盘开关"""
+ """免打扰"""
TYPE = "KEYBRD"
def send(self, event, msg):
# [XT*334588000000156*0006*SILENCETIME2]
@param event:
@param msg: 接收到的下行数据
"""
- # b'[SZKW*867387060319166*000A*KEYBRD,1]'
- msg = msg[1:-1]
- msg_tmp = msg.decode('ascii')
- msg_tmp = msg_tmp.split(',')
- on_bt = int(msg_tmp[1])
- EventMesh.publish("set_key_board", on_bt)#设置键盘开关
+ # b'[SZKW*867387060319166*000A*KEYBRD]'
+ # print("KEYBRD!!!!!!!!!!!!!",msg)
EventMesh.publish(constants.PROTOCOL.KEYBRD_SEND)
-# 低电提醒
-#[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 ProtoColResolver(object):
def __init__(self):
EventMesh.publish("watch_top_show")
EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+rrestor_confirm_n_screen = None
+rrestor_confirm_n_screen_label = None
+
+#正在充电
+class restore_confirmScreen(Screen):
+ NAME = "restore_confirm"
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.meta_type = "popup"
+ self.count = 0
+ self.timer1 = osTimer()
+ self.timer2 = osTimer()
+
+ def initialization(self):
+ global rrestor_confirm_n_screen ,rrestor_confirm_n_screen_label
+ if rrestor_confirm_n_screen == None :
+ rrestor_confirm_n_screen = lv.obj()
+ print("rrestor_confirm_n_screen")
+ rrestor_confirm_n_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ # add style for watchface
+ rrestor_confirm_n_screen.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+ #进入图片
+
+ rrestor_confirm_n_screen_label = lv.label(rrestor_confirm_n_screen)
+ rrestor_confirm_n_screen_label.set_pos(0, 40)
+ rrestor_confirm_n_screen_label.set_size(128, 60)
+ rrestor_confirm_n_screen_label.set_text("正在恢复出厂中\n请稍等...")
+ rrestor_confirm_n_screen_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ rrestor_confirm_n_screen_label.set_long_mode(lv.label.LONG.WRAP)
+ rrestor_confirm_n_screen_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+
+
+ self.meta = rrestor_confirm_n_screen
+ self.timer1.start(1000,1,self.timer_cb_onescond)
+
+ ret = 0
+ ret = ql_fs.path_exists("/ext/static/storage_file")#电话本
+ if ret == True:
+ ql_fs.rmdirs("/ext/static/storage_file")
+ ql_fs.mkdirs("/ext/static/storage_file")
+
+ 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):
+ self.timer1.stop()
+ self.timer2.stop()
+
+ def timer_cb_threescond(self,e):
+
+ Power.powerRestart()
+
+ def timer_cb_onescond(self,e):
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+
+
+ def done_left_to_right(self):
+ pass
+ def done_right_to_left(self):
+ pass
+ def done_bottom_to_top(self):
+ pass
+ def done_top_to_bottom(self):
+ pass
+ def done_return(self):
+ pass
+ def done_click(self):
+ pass
+
+ def btn8_press(self):
+ pass
+ def btn1_press(self):
+ pass
+ def btn1_release(self):
+ pass
+
+
+
#from ui_WatchFaceScreen import WatchFaceScreen
class UI(object):
def __init__(self):
def confirm(self, e):
- ret = 0
- ret = ql_fs.path_exists("/usr/static/storage_file")#电话本
- if ret == True:
- ql_fs.rmdirs("/usr/static/storage_file")
- ql_fs.mkdirs("/usr/static/storage_file")
- if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#已连接服务器发指令恢复出厂
- EventMesh.publish(constants.PROTOCOL.DLT_SEND)
- Power.powerRestart()
+ EventMesh.publish("load_screen", {"screen": "restore_confirm"})
def concel(self, e):
EventMesh.publish("load_screen", {"screen": "setting"})
Version="810M_K01_V1.0"
-Build_Time="2023-09-01 14:53:51"
+Build_Time="2023-09-11 19:52:22"
--- /dev/null
+@echo off
+
+md images
+del images /q
+@GOTO :STEP1
+..\..\Helios_SDK\tools\ASR_1606\win32\mklfs.exe -c ext -b 4096 -r 4096 -p 4096 -s 1048576 -i .\images\ext_fs.bin
+if errorlevel 1 (
+ echo "ext_fs.binÉú³Éʧ°Ü !!!!!!!!!!!!!!! "
+ goto exit
+)
+if errorlevel 0 (
+ echo "ext_fs.binÉú³É³É¹¦ !!!!!!!!!!!!!!! "
+)
+:STEP1
+
+..\..\Helios_SDK\tools\ASR_1606\win32\mklfs.exe -c usr -b 4096 -r 4096 -p 4096 -s 914400 -i .\images\customer_fs.bin
+if errorlevel 1 (
+ echo "customer_fs.binÉú³Éʧ°Ü Çë¼ì²éusrĿ¼ÊÇ·ñ´óÓÚ316K!!!!!!!!!!!!!!!"
+ goto exit
+)
+if errorlevel 0 (
+ echo "customer_fs.binÉú³É³É¹¦ !!!!!!!!!!!!!!! "
+)
+
+%copy font\ext_font.bin images\ext_font.bin%
+
+..\..\Helios_SDK\tools\common\win32\7z\7z a sdk\system\platform\ASR_1606\boards\EG810MCN_GA_VOLTE\images\firmware_base_release_pack.zip .\images\
+if errorlevel 0 (
+ echo imagesѹËõ³É¹¦!!!!!!!!!!!!!!
+)
+if errorlevel 1 (
+ echo imagesѹËõʧ°Ü!!!!!!!!!!!!!!!!!!
+ goto exit
+)
+xcopy sdk\ ..\..\Helios_SDK\ /e/h/y
+cd ..\..\Helios_SDK
+helios make services/microPython @EG810MCN_GA_VOLTE EG810MCN_GA_VOLTE
+cd ..
+:exit
\ No newline at end of file
--- /dev/null
+import _thread
+import usys
+
+
+class EventStore(object):
+ def __init__(self):
+ self.map = dict()
+ self.log = None
+ self.__filters = []
+
+ def add_filter(self, flt):
+ self.__filters.append(flt)
+
+ def append(self, event, cb):
+ self.map[event] = cb
+
+ def fire_async(self, event, msg,thread_size):
+ if event in self.map:
+ #print("fire_async:thread_size:{}".format(thread_size))
+ if thread_size != None:
+ _thread.stack_size(thread_size)
+ #print("fire_async:thread_size:{}".format(thread_size))
+ _thread.start_new_thread(self.map[event], (event, msg))
+ if thread_size != None:
+ _thread.stack_size(8*1024)
+ if self.log:
+ self.log.info("ASYNC executed (event) -> {} (params) -> {} (result) -> {}".format(event, msg, None))
+
+ def fire_sync(self, event, msg):
+ res = None
+ try:
+ if event in self.map:
+ res = self.map[event](event, msg)
+ except Exception as e:
+ usys.print_exception(e)
+ if self.log:
+ self.log.info("ERROR executed (event) -> {} (params) -> {} (result) -> {}".format(event, msg, res))
+ if event not in self.__filters:
+ if self.log:
+ self.log.info("SYNC executed (event) -> {} (params) -> {} (result) -> {}".format(event, msg, res))
+ return res
+
+
+event_store = EventStore()
+
+
+def subscribe(event, cb):
+ """
+ subscribe event and cb
+ """
+ return event_store.append(event, cb)
+
+
+def publish(event, msg=None):
+ """
+ publish event and msg
+ """
+ return publish_sync(event, msg)
+
+
+def publish_async(event, msg=None,thread_size = None):
+ """
+ 异步发送
+ """
+ return event_store.fire_async(event, msg,thread_size)
+
+
+def publish_sync(event, msg=None):
+ """
+ 同步发送
+ """
+ return event_store.fire_sync(event, msg)
+
+
+def set_log(log_adapter):
+ event_store.log = log_adapter
+
+
+def add_filter(flt):
+ event_store.add_filter(flt)
+
+def callback_wrapper(callback):#按键回调
+ def wrapped_callback(*args, **kwargs):
+ try:
+ return callback(*args, **kwargs)
+ except Exception as e:
+ # 在这里处理异常,例如打印错误信息,保存到日志文件,等等。
+ print('Exception in callback:', e)
+ # 如果需要,你可以在这里重新抛出异常
+ # raise
+ return wrapped_callback
+
+
+import utime
+Txt_Log = 1
+def txt_log(data):
+ pass
+ # if Txt_Log != 0 :
+ # with open("/usr/log.txt","a",encoding="utf-8") as fd:
+ # d_time = utime.localtime()
+ # data_tmp = "%02d-%02d %02d:%02d:%02d :"%(d_time[1],d_time[2],d_time[3],d_time[4],d_time[5])
+ # fd.write(data_tmp+data+"\n")
+
--- /dev/null
+# Copyright (c) Quectel Wireless Solution, Co., Ltd.All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#env
+TOP := ../../..
+ROOT := $(TOP)/../..
+
+KCONFIG_CONFIG_DIR := ../../../../..
+include $(KCONFIG_CONFIG_DIR)/config/$(KCONFIG_CONFIG)
+
+ifeq ("$(origin V)", "command line")
+BUILD_VERBOSE=$(V)
+endif
+ifndef BUILD_VERBOSE
+BUILD_VERBOSE = 0
+endif
+# ifeq ($(BUILD_VERBOSE),0)
+# Q = @
+# else
+# Q =
+# endif
+
+BUILD ?= build
+FROZEN_MPY_DIR ?= .
+
+RM = rm
+ECHO = echo
+CP = cp
+MKDIR = mkdir
+SED = sed
+CAT = cat
+TOUCH = touch
+
+MAKE_MANIFEST = $(PYTHON) $(TOP)/tools/makemanifest.py
+MAKE_FROZEN = $(PYTHON) $(TOP)/tools/make-frozen.py
+#because E-safeNet, mpy-cross could not read the py file, rename as notepad++
+ifeq ($(strip $(HOST)),linux)
+MPY_CROSS = $(TOP)/ports/quectel/tools/mpy-cross
+else
+MPY_CROSS = $(TOP)/ports/quectel/tools/notepad++.exe
+endif
+MPY_TOOL = $(PYTHON) $(TOP)/tools/mpy-tool.py
+
+QSTR_DEFS = source/qstrdefsport.h
+#py
+PY_SRC ?= $(TOP)/py
+HEADER_BUILD = $(TOP)/genhdr
+PY_QSTR_DEFS = $(PY_SRC)/qstrdefs.h
+ifneq ($(QSTR_AUTOGEN_DISABLE),1)
+QSTR_DEFS_COLLECTED = $(HEADER_BUILD)/qstrdefs.collected.h
+endif
+QSTR_GLOBAL_DEPENDENCIES += $(PY_SRC)/mpconfig.h source/mpconfigport.h
+CSUPEROPT = -O3
+ifeq ($(strip $(PLAT)),ECR6600)
+MPY_CROSS_FLAGS += -march=xtensa
+else
+MPY_CROSS_FLAGS += -march=armv7m
+endif
+# Enable building 32-bit code on 64-bit host.
+ifeq ($(MICROPY_FORCE_32BIT),1)
+CC += -m32
+CXX += -m32
+LD += -m32
+endif
+
+# External modules written in C.
+ifneq ($(USER_C_MODULES),)
+# pre-define USERMOD variables as expanded so that variables are immediate
+# expanded as they're added to them
+SRC_USERMOD :=
+C_FLAGS_USERMOD :=
+LD_FLAGS_USERMOD :=
+$(foreach module, $(wildcard $(USER_C_MODULES)/*/micropython.mk), \
+ $(eval USERMOD_DIR = $(patsubst %/,%,$(dir $(module))))\
+ $(info Including User C Module from $(USERMOD_DIR))\
+ $(eval include $(module))\
+)
+
+SRC_MOD += $(patsubst $(USER_C_MODULES)/%.c,%.c,$(SRC_USERMOD))
+C_FLAGS_MOD += $(C_FLAGS_USERMOD)
+LD_FLAGS_MOD += $(LD_FLAGS_USERMOD)
+endif
+
+# py object files
+PY_CORE_O_BASENAME = $(addprefix py/,\
+ mpstate.o \
+ nlr.o \
+ nlrx86.o \
+ nlrx64.o \
+ nlrthumb.o \
+ nlrpowerpc.o \
+ nlrxtensa.o \
+ nlrsetjmp.o \
+ malloc.o \
+ gc.o \
+ pystack.o \
+ qstr.o \
+ vstr.o \
+ mpprint.o \
+ unicode.o \
+ mpz.o \
+ reader.o \
+ lexer.o \
+ parse.o \
+ scope.o \
+ compile.o \
+ emitcommon.o \
+ emitbc.o \
+ asmbase.o \
+ asmx64.o \
+ emitnx64.o \
+ asmx86.o \
+ emitnx86.o \
+ asmthumb.o \
+ emitnthumb.o \
+ emitinlinethumb.o \
+ asmarm.o \
+ emitnarm.o \
+ asmxtensa.o \
+ emitnxtensa.o \
+ emitinlinextensa.o \
+ emitnxtensawin.o \
+ formatfloat.o \
+ parsenumbase.o \
+ parsenum.o \
+ emitglue.o \
+ persistentcode.o \
+ runtime.o \
+ runtime_utils.o \
+ scheduler.o \
+ nativeglue.o \
+ pairheap.o \
+ ringbuf.o \
+ stackctrl.o \
+ argcheck.o \
+ warning.o \
+ profile.o \
+ map.o \
+ obj.o \
+ objarray.o \
+ objattrtuple.o \
+ objbool.o \
+ objboundmeth.o \
+ objcell.o \
+ objclosure.o \
+ objcomplex.o \
+ objdeque.o \
+ objdict.o \
+ objenumerate.o \
+ objexcept.o \
+ objfilter.o \
+ objfloat.o \
+ objfun.o \
+ objgenerator.o \
+ objgetitemiter.o \
+ objint.o \
+ objint_longlong.o \
+ objint_mpz.o \
+ objlist.o \
+ objmap.o \
+ objmodule.o \
+ objobject.o \
+ objpolyiter.o \
+ objproperty.o \
+ objnone.o \
+ objnamedtuple.o \
+ objrange.o \
+ objreversed.o \
+ objset.o \
+ objsingleton.o \
+ objslice.o \
+ objstr.o \
+ objstrunicode.o \
+ objstringio.o \
+ objtuple.o \
+ objtype.o \
+ objzip.o \
+ opmethods.o \
+ sequence.o \
+ stream.o \
+ binary.o \
+ builtinimport.o \
+ builtinevex.o \
+ builtinhelp.o \
+ modarray.o \
+ modbuiltins.o \
+ modcollections.o \
+ modgc.o \
+ modio.o \
+ modmath.o \
+ modcmath.o \
+ modmicropython.o \
+ modstruct.o \
+ modsys.o \
+ moduerrno.o \
+ modthread.o \
+ vm.o \
+ bc.o \
+ showbc.o \
+ repl.o \
+ smallint.o \
+ frozenmod.o \
+ )
+
+PY_EXTMOD_O_BASENAME = \
+ extmod/moductypes.o \
+ extmod/modujson.o \
+ extmod/modure.o \
+ extmod/moduzlib.o \
+ extmod/moduheapq.o \
+ extmod/modutimeq.o \
+ extmod/modubinascii.o \
+ extmod/virtpin.o \
+ extmod/machine_mem.o \
+ extmod/machine_pinbase.o \
+ extmod/machine_signal.o \
+ extmod/machine_pulse.o \
+ extmod/machine_i2c.o \
+ extmod/machine_spi.o \
+ extmod/modbluetooth.o \
+ extmod/modurandom.o \
+ extmod/moduselect.o \
+ extmod/moduasyncio.o \
+ extmod/moduwebsocket.o \
+ extmod/modwebrepl.o \
+ extmod/modframebuf.o \
+ extmod/vfs.o \
+ extmod/vfs_blockdev.o \
+ extmod/vfs_reader.o \
+ extmod/vfs_posix.o \
+ extmod/vfs_posix_file.o \
+ extmod/vfs_fat.o \
+ extmod/vfs_fat_file.o \
+ extmod/vfs_lfs.o \
+ extmod/utime_mphal.o \
+ extmod/uos_dupterm.o \
+ extmod/modussl_mbedtls.o \
+ extmod/moduhashlib.o \
+ extmod/moducryptolib.o \
+ lib/embed/abort_.o \
+ lib/utils/printf.o \
+ lib/utils/sys_stdio_mphal.o
+
+ifeq ($(strip $(PLAT)),Qualcomm)
+PY_EXTMOD_O_BASENAME += \
+ extmod/vfs_efs.o \
+ extmod/vfs_efs_file.o
+endif
+
+ifeq ($(strip $(PLAT)), $(filter $(PLAT),Unisoc Unisoc_8910_R05))
+PY_EXTMOD_O_BASENAME += \
+ extmod/vfs_temp.o \
+ extmod/vfs_temp_file.o
+endif
+
+# Sources that may contain qstrings
+SRC_QSTR_IGNORE = py/nlr%
+SRC_QSTR += $(SRC_MOD) $(filter-out $(SRC_QSTR_IGNORE),$(PY_CORE_O_BASENAME:.o=.c)) $(PY_EXTMOD_O_BASENAME:.o=.c)
+SRC_QSTR += \
+ source/modalipay.c \
+ source/audio_audio.c \
+ source/audio_queue.c \
+ source/audio_record.c \
+ source/audio_tts.c \
+ source/audiocodec_rt5616.c \
+ source/callbackdeal.c \
+ source/camera_capture.c \
+ source/camera_preview.c \
+ source/camera_scandecode.c \
+ source/devreport.c \
+ source/machine_extint.c \
+ source/machine_hw_spi.c \
+ source/machine_iic.c \
+ source/machine_iic_simulation.c \
+ source/machine_keypad.c \
+ source/machine_lcd.c \
+ source/machine_nandflash.c \
+ source/machine_pin.c \
+ source/machine_rtc.c \
+ source/machine_timer.c \
+ source/machine_uart.c \
+ source/machine_wdt.c \
+ source/misc_adc.c \
+ source/misc_power.c \
+ source/misc_powerkey.c \
+ source/misc_pwm.c \
+ source/misc_temperature.c \
+ source/misc_usb.c \
+ source/misc_usbnet.c \
+ source/modatcmd.c \
+ source/modaudio.c \
+ source/modaudiocodec.c \
+ source/modble.c \
+ source/modbt.c \
+ source/modcamera.c \
+ source/modcelllocator.c \
+ source/modcelllocator_qpy.c \
+ source/locator.c \
+ source/modcsd.c \
+ source/moddatacall.c \
+ source/moddev.c \
+ source/modethernet.c \
+ source/modethernet_dm9051.c \
+ source/modethernet_w5500.c \
+ source/modethernet_ch395.c \
+ source/modexample.c \
+ source/modfota.c \
+ source/modgnss.c \
+ source/modlpm.c \
+ source/modlvgl.c \
+ source/modlwm2m.c \
+ source/modmachine.c \
+ source/modmisc.c \
+ source/modnb.c \
+ source/modnet.c \
+ source/modostimer.c \
+ source/modpoc.c \
+ source/modqrcode.c \
+ source/modrtmp.c \
+ source/modsecuredata.c \
+ source/modsensor.c \
+ source/modsha1.c \
+ source/modsim.c \
+ source/modslipif.c \
+ source/modsms.c \
+ source/modsocket.c \
+ source/modtp.c \
+ source/moduos.c \
+ source/modutils.c \
+ source/modutime.c \
+ source/modvoicecall.c \
+ source/modwifilocator.c \
+ source/modwifiscan.c \
+ source/nb_aep.c \
+ source/nb_oc.c \
+ source/nb_onenet.c \
+ source/quecpython.c \
+ source/sensor_sn95500.c \
+ source/sensor_icckey.c \
+ source/sensor_gnss.c \
+ source/tp_gt9xx.c \
+ source/tp_xpt2046.c \
+ source/tp_cst816.c \
+ source/modGsensor.c \
+ source/modGsensor_SC7A20.c \
+ source/modHsensor.c \
+ source/modHsensor_GH3018.c \
+ source/modrsa.c \
+ source/utils_crc32.c \
+ source/http_parser.c \
+ source/modwebserver.c \
+ source/modethernet_yt8512h.c \
+ source/sim_esim.c \
+ source/modG711.c \
+ source/modG729.c \
+ source/modcan_mcp2515.c \
+ source/modextuart_wk2114.c \
+ source/modextgpio_aw9523.c \
+ source/machine_key.c \
+ source/lpm_wakeup.c \
+ source/sensor_handmic_key.c \
+ source/modnetwork.c \
+ source/modwlan_ASR5803.c \
+ source/machine_soft_spi.c \
+ source/code128_p.c \
+ source/modwlan.c\
+ source/modwlan.c \
+ source/machine_one_wire.c
+
+
+ifeq ($(strip $(PLAT)),RDA)
+SRC_QSTR += $(ROOT)/components/quecsdk/cloud/python/modquecIot-BC25old.c
+else
+SRC_QSTR += $(ROOT)/components/quecsdk/cloud/python/modquecIot.c
+endif
+
+ifeq ($(CONFIG_USQLITE), y)
+SRC_QSTR += lib/usqlite/usqlite_connection.c \
+ lib/usqlite/usqlite_cursor.c \
+ lib/usqlite/usqlite_row.c \
+ lib/usqlite/usqlite_file.c \
+ lib/usqlite/usqlite_mem.c \
+ lib/usqlite/usqlite_vfs.c \
+ lib/usqlite/usqlite_utils.c \
+ lib/usqlite/usqlite.c \
+ lib/usqlite/usqlite_module.c
+
+INC += -Ilib/usqlite
+endif
+
+$(BUILD)/%.pp: %.c
+ @$(ECHO) "PreProcess $<"
+ $(Q)$(CPP) $(C_FLAGS) -Wp,-C,-dD,-dI -o $@ $<
+
+# Anything that depends on FORCE will be considered out-of-date
+FORCE:
+.PHONY: FORCE
+
+$(HEADER_BUILD):
+ $(MKDIR) -p $@
+
+#$(HEADER_BUILD)/mpversion.h: FORCE | $(HEADER_BUILD)
+# $(Q)$(PYTHON) $(PY_SRC)/makeversionhdr.py $@
+# mpconfigport.mk is optional, but changes to it may drastically change
+# overall config, so they need to be caught
+MPCONFIGPORT_MK = $(wildcard mpconfigport.mk)
+
+# qstr data
+# Adding an order only dependency on $(HEADER_BUILD) causes $(HEADER_BUILD) to get
+# created before we run the script to generate the .h
+# Note: we need to protect the qstr names from the preprocessor, so we wrap
+# the lines in "" and then unwrap after the preprocessor is finished.
+# See more information about this process in docs/develop/qstr.rst.
+$(HEADER_BUILD)/qstrdefs.generated.h: $(PY_QSTR_DEFS) $(QSTR_DEFS) $(QSTR_DEFS_COLLECTED) $(PY_SRC)/makeqstrdata.py source/mpconfigport.h $(MPCONFIGPORT_MK) $(PY_SRC)/mpconfig.h | $(HEADER_BUILD)
+ @$(ECHO) "GEN $@"
+ $(Q)$(CAT) $(PY_QSTR_DEFS) $(QSTR_DEFS) $(QSTR_DEFS_COLLECTED) | $(SED) 's/^Q(.*)/"&"/' | $(CPP) $(C_FLAGS) - | $(SED) 's/^\"\(Q(.*)\)\"/\1/' > $(HEADER_BUILD)/qstrdefs.preprocessed.h
+ $(Q)$(PYTHON) $(PY_SRC)/makeqstrdata.py $(HEADER_BUILD)/qstrdefs.preprocessed.h > $@
+
+# Compressed error strings.
+$(HEADER_BUILD)/compressed.split: $(HEADER_BUILD)/qstr.i.last
+ @$(ECHO) "GEN $@"
+ $(Q)$(PYTHON) $(PY_SRC)/makeqstrdefs.py split compress $< $(HEADER_BUILD)/compress _
+ $(Q)$(TOUCH) $@
+
+$(HEADER_BUILD)/compressed.collected: $(HEADER_BUILD)/compressed.split
+ @$(ECHO) "GEN $@"
+ $(Q)$(PYTHON) $(PY_SRC)/makeqstrdefs.py $(CAT) compress _ $(HEADER_BUILD)/compress $@
+
+$(HEADER_BUILD)/compressed.data.h: $(HEADER_BUILD)/compressed.collected
+ @$(ECHO) "GEN $@"
+ $(Q)$(PYTHON) $(PY_SRC)/makecompresseddata.py $< > $@
+
+# build a list of registered modules for py/objmodule.c.
+$(HEADER_BUILD)/moduledefs.h: $(SRC_QSTR) $(QSTR_GLOBAL_DEPENDENCIES) | $(HEADER_BUILD)
+ @$(ECHO) "GEN $@"
+ $(Q)$(PYTHON) $(PY_SRC)/makemoduledefs.py --vpath="., $(TOP), $(USER_C_MODULES)" $(SRC_QSTR) > $@
+
+SRC_QSTR += $(HEADER_BUILD)/moduledefs.h
+
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/config
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/include
+
+ifeq ($(strip $(PLAT)),Qualcomm)
+INC += -I$(COMPILER_PATH)/armv7m-none-eabi/libc/include
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include/azure_api
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include/azure_api/c-utility
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include/azure_api/c-utility/inc
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include/azure_api/c-utility/inc/azure_c_shared_utility
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include/azure_api/c-utility/pal
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include/azure_api/c-utility/pal/generic
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include/azure_api/iothub_client
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include/azure_api/iothub_client/inc
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include/azure_api/iothub_client/inc/internal
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include/azure_api/serializer
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include/azure_api/serializer/inc
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include/azure_api/umqtt
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include/azure_api/umqtt/inc
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include/azure_api/umqtt/inc/azure_umqtt_c
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include/qapi
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include/threadx_api
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include
+INC += -I$(ROOT)/system/at
+INC += -I$(ROOT)/system/esim
+endif
+
+INC += -I.
+INC += -I$(HEADER_BUILD)
+INC += -I$(TOP)
+INC += -I$(TOP)/py
+INC += -I$(TOP)/extmod
+INC += -I$(TOP)/lib/utils
+INC += -I$(TOP)/lib/mp-readline
+INC += -I$(TOP)/lib/littlefs
+INC += -I$(TOP)/lib/netutils
+INC += -I$(TOP)/lib/timeutils
+INC += -I$(TOP)/ports/quectel/core
+INC += -I$(TOP)/ports/quectel/core/source
+INC += -I$(TOP)/ports/quectel/core/py
+INC += -I$(ROOT)/peripheral
+INC += -I$(ROOT)/system/include
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/include
+INC += -I$(ROOT)/system/platform/$(strip $(PLAT))/boards/$(strip $(BOARD))/include
+INC += -I$(ROOT)/system/debug
+INC += -I$(ROOT)/system/dev
+INC += -I$(ROOT)/system/fs
+INC += -I$(ROOT)/system/hal
+INC += -I$(ROOT)/system/gnss
+INC += -I$(ROOT)/system/network
+INC += -I$(ROOT)/system/at
+INC += -I$(ROOT)/system/aliiot
+
+ifeq ($(strip $(PLAT)),ASR_1803s)
+INC += -I$(ROOT)/system/csd
+INC += -I$(ROOT)/system/esim
+endif
+ifeq ($(strip $(PLAT)),ASR_1606)
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include
+endif
+
+ifeq ($(strip $(PLAT)),Unisoc)
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/lwip
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/lwip/apps
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/lwip/priv
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/lwip/prot
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/netif
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/posix
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/posix/arpa
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/posix/net
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/posix/netinet
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/posix/sys
+INC += -I$(ROOT)/system/at
+endif
+
+ifeq ($(strip $(PLAT)),Unisoc_8910_R05)
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/lwip
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/lwip/apps
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/lwip/priv
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/lwip/prot
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/netif
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/netif/ppp
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/netif/ppp/polarssl
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/compat/posix
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/compat/posix/arpa
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/compat/posix/net
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/compat/posix/netinet
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/compat/posix/sys
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/compat/stdc
+endif
+
+ifeq ($(strip $(PLAT)),EIGEN)
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include/lwip
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include/lwip/apps
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include/lwip/priv
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include/lwip/prot
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include/arch
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include/netif
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include/posix
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include/posix/sys
+endif
+
+ifeq ($(strip $(PLAT)),Unisoc_8850)
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/lwip
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/lwip/apps
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/lwip/priv
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/lwip/prot
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/netif
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/netif/ppp
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/netif/ppp/polarssl
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/compat/posix
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/compat/posix/arpa
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/compat/posix/net
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/compat/posix/netinet
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/compat/posix/sys
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/compat/stdc
+endif
+
+ifeq ($(strip $(PLAT)),RDA)
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include/arch
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/lwip
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/lwip/apps
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/lwip/priv
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/lwip/prot
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/netif
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/posix
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/posix/arpa
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/posix/net
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/posix/netinet
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/src/include/posix/sys
+endif
+
+ifeq ($(strip $(PLAT)), $(filter $(PLAT),ASR ASR_1803s))
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include
+INC += -I$(ROOT)/system/at
+endif
+
+ifeq ($(strip $(PLAT)),ECR6600)
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))
+INC += -I$(ROOT)/system/lwip/$(strip $(PLAT))/include
+endif
+
+ifeq (y, $(CONFIG_MBEDTLS))
+INC += -I$(ROOT)/system/mbedtls
+INC += -I$(ROOT)/system/mbedtls/include
+INC += -I$(ROOT)/system/mbedtls/include/mbedtls
+INC += -I$(ROOT)/system/mbedtls/library
+INC += -I$(ROOT)/system/mbedtls/port/helios/inc
+endif
+INC += -I$(ROOT)/system/network
+INC += -I$(ROOT)/system/os
+INC += -I$(ROOT)/system/startup
+INC += -I$(ROOT)/system/fota
+INC += -I$(ROOT)/system/bt
+INC += -I$(ROOT)/system/at
+ifeq (y, $(CONFIG_LVGL))
+INC += -I$(TOP)/lib/lvgl
+INC += -I$(TOP)/lib/lvgl/src
+INC += -I$(TOP)/lib/lvgl/src/core
+INC += -I$(TOP)/lib/lvgl/src/draw
+INC += -I$(TOP)/lib/lvgl/src/extra
+INC += -I$(TOP)/lib/lvgl/src/font
+INC += -I$(TOP)/lib/lvgl/src/gpu
+INC += -I$(TOP)/lib/lvgl/src/hal
+INC += -I$(TOP)/lib/lvgl/src/misc
+INC += -I$(TOP)/lib/lvgl/src/widgts
+endif
+INC += -I$(ROOT)/driver
+INC += -I$(ROOT)/driver/lcd
+ifeq (y, $(CONFIG_QRCODE))
+INC += -I$(ROOT)/components/qrcode
+endif
+ifeq (y, $(CONFIG_QUECTHING))
+INC += -I$(ROOT)/components/quecsdk/cloud
+INC += -I$(ROOT)/components/quecsdk/driverLayer
+INC += -I$(ROOT)/components/quecsdk/thirdLib/mqtt
+INC += -I$(ROOT)/components/quecsdk/thirdLib/cJSON
+INC += -I$(ROOT)/components/quecsdk/kernel
+endif
+ifeq ($(CONFIG_SPINAND), y)
+INC += -I$(ROOT)/components/fs/include
+INC += -I$(ROOT)/components/fs/yaffs/src/direct
+INC += -I$(ROOT)/components/fs/yaffs/src/port
+INC += -I$(ROOT)/components/fs/yaffs/src
+INC += -I$(ROOT)/components/fs/yaffs
+endif
+ifeq ($(CONFIG_RTMP), y)
+INC += -I$(ROOT)/components/rtmpdump/librtmp/inc
+INC += -I$(ROOT)/components/rtmpdump/libz/inc
+endif
+INC += -I$(ROOT)/utilities
+ifeq ($(CONFIG_JPEG), y)
+INC += -I$(ROOT)/components/jpeg/jpeg-9c
+INC += -I$(ROOT)/components/jpeg
+endif
+ifeq ($(CONFIG_GH301x), y)
+INC += -I$(ROOT)/components/GH301x
+endif
+ifeq ($(CONFIG_SC7A20), y)
+INC += -I$(ROOT)/components/SC7A20
+endif
+
+ifeq ($(CONFIG_POC_BND), y)
+INC += -I$(ROOT)/components/poc
+INC += -I$(ROOT)/components/poc/bnd/inc
+endif
+ifeq ($(CONFIG_POC_BND_XIN), y)
+INC += -I$(ROOT)/components/poc
+INC += -I$(ROOT)/components/poc/bnd_xin/inc
+endif
+ifeq ($(CONFIG_POC_SL), y)
+INC += -I$(ROOT)/components/poc
+INC += -I$(ROOT)/components/poc/sl/inc
+endif
+ifeq ($(CONFIG_POC_QS), y)
+INC += -I$(ROOT)/components/poc
+INC += -I$(ROOT)/components/poc/qs/inc
+endif
+#Stephen.Gao add 2022/11/23
+ifeq ($(CONFIG_POC_ZZD), y)
+INC += -I$(ROOT)/components/poc
+INC += -I$(ROOT)/components/poc/zzd/inc
+endif
+#Stephen.Gao add 2023/01/06
+ifeq ($(CONFIG_POC_YDWL), y)
+INC += -I$(ROOT)/components/poc
+INC += -I$(ROOT)/components/poc/ydwl/inc
+endif
+
+ifeq ($(CONFIG_POC_SLPOC), y)
+INC += -I$(ROOT)/components/poc -I$(ROOT)/components/poc/slpoc/src
+INC += -I$(ROOT)/components/poc/slpoc/inc
+SRC_QSTR += $(ROOT)/components/poc/slpoc/src/modpoc_slpoc.c
+endif
+
+ifeq ($(CONFIG_POC_RDA_BND), y)
+INC += -I$(ROOT)/components/poc -I$(ROOT)/components/poc/rda_bnd/src
+INC += -I$(ROOT)/components/poc/rda_bnd/inc
+SRC_QSTR += $(ROOT)/components/poc/rda_bnd/src/modpocrda.c
+endif
+
+
+ifeq (y,$(CONFIG_DECODE_ZBAR))
+INC += -I$(ROOT)/components/decode/ZBar/zbar
+INC += -I$(ROOT)/components/decode/ZBar/include
+INC += -I$(ROOT)/components/decode/ZBar/zbar/decoder
+INC += -I$(ROOT)/components/decode/ZBar/zbar/qrcode
+endif
+ifeq (y,$(CONFIG_DECODE_QUECTEL))
+INC += -I$(ROOT)/components/decode/quectel/inc
+endif
+
+ifeq (y,$(CONFIG_DECODE_QINGYA))
+ifneq ($(strip $(PLAT)),ASR)
+ifneq ($(strip $(PLAT)),ASR_1606)
+INC += -I$(ROOT)/components/decode/qingya
+endif
+endif
+endif
+
+ifeq ($(CONFIG_SPI_SDCARD), y)
+INC += -I$(ROOT)/components/fs/fatfs/include
+endif
+
+ifeq ($(CONFIG_AUDIO_G711_COMPRESS), y)
+INC += -I$(ROOT)/components/audio/G711
+endif
+ifeq ($(strip $(PLAT)),EIGEN)
+INC += -I$(ROOT)/components/audio
+endif
+
+ifeq ($(CONFIG_GMSSL), y)
+INC += -I$(ROOT)/components/GMSSL/include
+INC += -I$(ROOT)/components/GMSSL/include/gmssl
+endif
+
+ifeq ($(CONFIG_AUDIO_G729_COMPRESS), y)
+INC += -I$(ROOT)/components/audio/G729
+INC += -I$(ROOT)/components/audio/G729/src
+INC += -I$(ROOT)/components/audio/G729/include
+endif
+
+# compiler settings
+CWARN = -Wall -Werror
+CWARN += -Wpointer-arith -Wuninitialized
+C_FLAGS = $(INC) $(CWARN) -std=gnu99 $(C_FLAGS_MOD) $(COPT) $(C_FLAGS_EXTRA)
+C_FLAGS += -fdata-sections -ffunction-sections -fno-asynchronous-unwind-tables --include=../../../../../../config/autoconf.h
+
+LD_FLAGS_ARCH = -Wl,-Map=$@.map,--cref -Wl,--gc-sections
+LD_FLAGS = $(LD_FLAGS_MOD) $(LD_FLAGS_ARCH) -lm $(LD_FLAGS_EXTRA)
+
+D_FLAGS += $(foreach dflag, $(DFLAGS), -D$(dflag))
+D_FLAGS += -DMP_CONFIGFILE="\"ports/quectel/core/source/mpconfigport.h\"" \
+ -DMICROPY_MPTHREADPORT_H="\"ports/quectel/core/source/mpthreadport.h\"" \
+ -DMICROPY_MPHALPORT_H="\"ports/quectel/core/source/mphalport.h\""
+
+vpath %.S . $(TOP) $(USER_C_MODULES)
+$(BUILD)/%.o: %.S
+ @$(ECHO) "CC $<"
+ $(Q)$(CC) $(C_FLAGS) $(D_FLAGS) -c -o $@ $<
+
+vpath %.s . $(TOP) $(USER_C_MODULES)
+$(BUILD)/%.o: %.s
+ @$(ECHO) "AS $<"
+ $(Q)$(AS) -o $@ $<
+QSTR_GEN_EXTRA_C_FLAGS += -DNO_QSTR
+vpath %.c . $(TOP) $(USER_C_MODULES)
+$(BUILD)/%.pp: %.c
+ @$(ECHO) "PreProcess $<"
+ $(Q)$(CPP) $(C_FLAGS) $(D_FLAGS) -Wp,-C,-dD,-dI -o $@ $<
+
+#$(OBJ): | $(HEADER_BUILD)/qstrdefs.generated.h $(HEADER_BUILD)/mpversion.h
+
+
+$(HEADER_BUILD)/qstr.i.last: $(SRC_QSTR) $(QSTR_GLOBAL_DEPENDENCIES) | $(QSTR_GLOBAL_REQUIREMENTS)
+ @$(ECHO) "GEN $@"
+ @rm -f $@ $@.dep
+ @for src in $(if $(filter $?,$(QSTR_GLOBAL_DEPENDENCIES)),$^,$(if $?,$?,$^)); \
+ do \
+ echo $$src >> $@.dep; \
+ done
+ @while read -r src; \
+ do \
+ echo processing on $$src ...; \
+ $(CPP) $(QSTR_GEN_EXTRA_C_FLAGS) $(C_FLAGS) $(D_FLAGS) $$src >> $@; \
+ done < $@.dep
+
+$(HEADER_BUILD)/qstr.split: $(HEADER_BUILD)/qstr.i.last
+ @$(ECHO) "GEN $@"
+ $(Q)$(PYTHON) $(PY_SRC)/makeqstrdefs.py split qstr $(HEADER_BUILD)/qstr.i.last $(HEADER_BUILD)/qstr $(QSTR_DEFS_COLLECTED)
+ $(Q)$(TOUCH) $@
+
+$(QSTR_DEFS_COLLECTED): $(HEADER_BUILD)/qstr.split
+ @$(ECHO) "GEN $@"
+ $(Q)$(PYTHON) $(PY_SRC)/makeqstrdefs.py cat qstr $(HEADER_BUILD)/qstr.i.last $(HEADER_BUILD)/qstr $(QSTR_DEFS_COLLECTED)
+
+
+$(BUILD)/%.mpy: $(FROZEN_MPY_DIR)/%.py
+ @$(ECHO) "MPY $<"
+ $(Q)$(MKDIR) -p $(dir $@)
+ $(Q)$(MPY_CROSS) -o $@ -s $(<:$(FROZEN_MPY_DIR)/%=%) $(MPY_CROSS_FLAGS) $<
+
+ifeq ($(strip $(PLAT)),RDA)
+frozen_mpy_list = $(BUILD)/_boot_RDA.mpy \
+ $(BUILD)/system.mpy \
+ $(BUILD)/dataCall.mpy \
+ $(BUILD)/umqtt.mpy \
+ $(BUILD)/sys_bus.mpy \
+ $(BUILD)/queue.mpy \
+ $(BUILD)/log.mpy \
+ $(BUILD)/request.mpy \
+ $(BUILD)/ql_fs.mpy \
+ $(BUILD)/app_fota_mount.mpy \
+ $(BUILD)/app_fota_download.mpy \
+ $(BUILD)/checksum.mpy \
+ $(BUILD)/file_crc32.mpy \
+ $(BUILD)/app_fota_updater.mpy \
+ $(BUILD)/app_fota.mpy \
+ $(BUILD)/backup_restore.mpy \
+ $(BUILD)/event_message.mpy \
+ $(BUILD)/ntptime.mpy \
+ $(BUILD)/checkNet.mpy \
+ $(BUILD)/uping.mpy \
+ $(BUILD)/ymodem.mpy \
+
+ifeq ($(strip $(BOARD)),$(filter $(strip $(BOARD)),BC25B8PA_LBS))
+ frozen_mpy_list += $(BUILD)/cellLocator.mpy
+endif
+
+else ifeq ($(strip $(PLAT)),ASR_1803s)
+frozen_mpy_list = $(BUILD)/_boot.mpy \
+ $(BUILD)/system.mpy \
+ $(BUILD)/checkNet.mpy \
+ $(BUILD)/ntptime.mpy \
+ $(BUILD)/dataCall.mpy \
+ $(BUILD)/log.mpy \
+ $(BUILD)/request.mpy \
+ $(BUILD)/umqtt.mpy \
+ $(BUILD)/ql_fs.mpy \
+ $(BUILD)/app_fota_mount.mpy \
+ $(BUILD)/app_fota_download.mpy \
+ $(BUILD)/checksum.mpy \
+ $(BUILD)/file_crc32.mpy \
+ $(BUILD)/app_fota_updater.mpy \
+ $(BUILD)/app_fota.mpy \
+ $(BUILD)/backup_restore.mpy \
+ $(BUILD)/queue.mpy \
+ $(BUILD)/sys_bus.mpy \
+ $(BUILD)/event_message.mpy \
+ $(BUILD)/bak_util.mpy \
+ $(BUILD)/cellLocator.mpy \
+ $(BUILD)/ftplib.mpy \
+ $(BUILD)/ftplibtls.mpy \
+ $(BUILD)/uwebsocket.mpy \
+ $(BUILD)/uping.mpy \
+ $(BUILD)/ymodem.mpy \
+
+else ifeq ($(strip $(PLAT)),Qualcomm)
+frozen_mpy_list = $(BUILD)/_boot_Qualcomm.mpy \
+ $(BUILD)/system.mpy \
+ $(BUILD)/checkNet.mpy \
+ $(BUILD)/ntptime.mpy \
+ $(BUILD)/dataCall.mpy \
+ $(BUILD)/umqtt.mpy \
+ $(BUILD)/log.mpy \
+ $(BUILD)/request.mpy \
+ $(BUILD)/ql_fs.mpy \
+ $(BUILD)/app_fota_download.mpy \
+ $(BUILD)/checksum.mpy \
+ $(BUILD)/file_crc32.mpy \
+ $(BUILD)/app_fota_mount.mpy \
+ $(BUILD)/app_fota_updater.mpy \
+ $(BUILD)/app_fota.mpy \
+ $(BUILD)/backup_restore.mpy \
+ $(BUILD)/queue.mpy \
+ $(BUILD)/sys_bus.mpy \
+ $(BUILD)/event_message.mpy \
+ $(BUILD)/bak_util.mpy \
+ $(BUILD)/uwebsocket.mpy \
+ $(BUILD)/uping.mpy \
+ $(BUILD)/ymodem.mpy \
+
+else ifeq ($(strip $(PLAT)),ASR_1606)
+ifeq ($(strip $(BOARD)),$(filter $(strip $(BOARD)),EC600MCN_CC EC800MCN_CC EC600MCN_CC_EXT EC600MCN_LF_SLPOC))
+frozen_mpy_list = $(BUILD)/_boot.mpy \
+ $(BUILD)/system.mpy \
+ $(BUILD)/dataCall.mpy \
+ $(BUILD)/umqtt.mpy \
+ $(BUILD)/queue.mpy \
+ $(BUILD)/log.mpy \
+ $(BUILD)/request.mpy \
+ $(BUILD)/ql_fs.mpy \
+ $(BUILD)/app_fota_mount.mpy \
+ $(BUILD)/app_fota_download.mpy \
+ $(BUILD)/checksum.mpy \
+ $(BUILD)/file_crc32.mpy \
+ $(BUILD)/app_fota_updater.mpy \
+ $(BUILD)/app_fota.mpy \
+ $(BUILD)/backup_restore.mpy \
+ $(BUILD)/ntptime.mpy \
+ $(BUILD)/checkNet.mpy \
+ $(BUILD)/ymodem.mpy
+
+else ifeq ($(strip $(BOARD)),$(filter $(strip $(BOARD)),EC600MCN_CC_EXT_TTS))
+frozen_mpy_list = $(BUILD)/_boot.mpy \
+ $(BUILD)/dataCall.mpy \
+ $(BUILD)/file_crc32.mpy \
+ $(BUILD)/ntptime.mpy \
+ $(BUILD)/ymodem.mpy
+else
+frozen_mpy_list = $(BUILD)/_boot.mpy \
+ $(BUILD)/umqtt.mpy \
+ $(BUILD)/ntptime.mpy \
+ $(BUILD)/request.mpy \
+ $(BUILD)/log.mpy \
+ $(BUILD)/aLiYun.mpy \
+ $(BUILD)/hmac.mpy \
+ $(BUILD)/hashlib.mpy \
+ $(BUILD)/base64.mpy \
+ $(BUILD)/TenCentYun.mpy \
+ $(BUILD)/file_sha256.mpy \
+ $(BUILD)/checksum.mpy \
+ $(BUILD)/checkNet.mpy \
+ $(BUILD)/dataCall.mpy \
+ $(BUILD)/ql_fs.mpy \
+ $(BUILD)/app_fota_mount.mpy \
+ $(BUILD)/app_fota_download.mpy\
+ $(BUILD)/app_fota_updater.mpy \
+ $(BUILD)/app_fota.mpy \
+ $(BUILD)/backup_restore.mpy \
+ $(BUILD)/file_crc32.mpy \
+ $(BUILD)/system.mpy \
+ $(BUILD)/gnss.mpy \
+ $(BUILD)/unzip.mpy \
+ $(BUILD)/queue.mpy \
+ $(BUILD)/sys_bus.mpy \
+ $(BUILD)/event_message.mpy \
+ $(BUILD)/hls.mpy \
+ $(BUILD)/wifilocator.mpy \
+ $(BUILD)/cellLocator.mpy \
+ $(BUILD)/bak_util.mpy \
+ $(BUILD)/uwebsocket.mpy \
+ $(BUILD)/uping.mpy \
+ $(BUILD)/ymodem.mpy \
+ $(BUILD)/alarm.mpy \
+ $(BUILD)/appFactoryMode.mpy \
+ $(BUILD)/appWechat.mpy \
+ $(BUILD)/btn_device_ec800m.mpy \
+ $(BUILD)/capacitive_hynitron_cst816d_update.mpy \
+ $(BUILD)/common.mpy \
+ $(BUILD)/constants.mpy \
+ $(BUILD)/EventMesh.mpy \
+ $(BUILD)/initTP.mpy \
+ $(BUILD)/lcd.mpy \
+ $(BUILD)/location.mpy \
+ $(BUILD)/mgr.mpy \
+ $(BUILD)/protocol.mpy \
+ $(BUILD)/ui.mpy \
+ $(BUILD)/ui_main_menu.mpy \
+ $(BUILD)/ui_setting.mpy \
+ $(BUILD)/ui_WatchFaceScreen.mpy \
+ $(BUILD)/ui_health.mpy \
+ $(BUILD)/main_init.mpy \
+ $(BUILD)/versions.mpy \
+ $(BUILD)/led.mpy \
+
+endif
+
+else ifeq ($(strip $(PLAT)),Unisoc_8850)
+ifeq ($(strip $(BOARD)),$(filter $(strip $(BOARD)),EC600GCN_LD EC600GCN_LD_YM EC800GCN_LD EC800GCN_LD_HRXM))
+frozen_mpy_list = $(BUILD)/_boot.mpy \
+ $(BUILD)/umqtt.mpy \
+ $(BUILD)/ntptime.mpy \
+ $(BUILD)/request.mpy \
+ $(BUILD)/log.mpy \
+ $(BUILD)/checksum.mpy \
+ $(BUILD)/checkNet.mpy \
+ $(BUILD)/dataCall.mpy \
+ $(BUILD)/ql_fs.mpy \
+ $(BUILD)/app_fota_mount.mpy \
+ $(BUILD)/app_fota_download.mpy\
+ $(BUILD)/app_fota_updater.mpy \
+ $(BUILD)/app_fota.mpy \
+ $(BUILD)/backup_restore.mpy \
+ $(BUILD)/file_crc32.mpy \
+ $(BUILD)/system.mpy \
+ $(BUILD)/queue.mpy \
+ $(BUILD)/sys_bus.mpy \
+ $(BUILD)/event_message.mpy \
+ $(BUILD)/bak_util.mpy \
+ $(BUILD)/ymodem.mpy \
+
+else
+frozen_mpy_list = $(BUILD)/_boot.mpy \
+ $(BUILD)/umqtt.mpy \
+ $(BUILD)/ntptime.mpy \
+ $(BUILD)/request.mpy \
+ $(BUILD)/log.mpy \
+ $(BUILD)/aLiYun.mpy \
+ $(BUILD)/hmac.mpy \
+ $(BUILD)/hashlib.mpy \
+ $(BUILD)/base64.mpy \
+ $(BUILD)/TenCentYun.mpy \
+ $(BUILD)/file_sha256.mpy \
+ $(BUILD)/checksum.mpy \
+ $(BUILD)/checkNet.mpy \
+ $(BUILD)/dataCall.mpy \
+ $(BUILD)/ql_fs.mpy \
+ $(BUILD)/app_fota_mount.mpy \
+ $(BUILD)/app_fota_download.mpy\
+ $(BUILD)/app_fota_updater.mpy \
+ $(BUILD)/app_fota.mpy \
+ $(BUILD)/backup_restore.mpy \
+ $(BUILD)/file_crc32.mpy \
+ $(BUILD)/system.mpy \
+ $(BUILD)/gnss.mpy \
+ $(BUILD)/unzip.mpy \
+ $(BUILD)/queue.mpy \
+ $(BUILD)/sys_bus.mpy \
+ $(BUILD)/event_message.mpy \
+ $(BUILD)/hls.mpy \
+ $(BUILD)/wifilocator.mpy \
+ $(BUILD)/bak_util.mpy \
+ $(BUILD)/ftplib.mpy \
+ $(BUILD)/ftplibtls.mpy \
+ $(BUILD)/uwebsocket.mpy \
+ $(BUILD)/uping.mpy \
+ $(BUILD)/ymodem.mpy \
+
+endif
+
+else ifeq ($(strip $(PLAT)),EIGEN)
+ifeq ($(strip $(BOARD)),$(filter $(strip $(BOARD)),EC800ECN_LC_WDF))
+frozen_mpy_list = $(BUILD)/_boot_WDF.mpy \
+ $(BUILD)/umqtt.mpy \
+ $(BUILD)/dataCall.mpy \
+ $(BUILD)/log.mpy \
+ $(BUILD)/request.mpy \
+ $(BUILD)/aLiYun.mpy \
+ $(BUILD)/hmac.mpy \
+ $(BUILD)/hashlib.mpy \
+ $(BUILD)/ntptime.mpy \
+ $(BUILD)/checksum.mpy \
+ $(BUILD)/checkNet.mpy \
+ $(BUILD)/ql_fs.mpy \
+ $(BUILD)/app_fota_mount.mpy \
+ $(BUILD)/app_fota_download.mpy\
+ $(BUILD)/app_fota_updater.mpy \
+ $(BUILD)/app_fota.mpy \
+ $(BUILD)/backup_restore.mpy \
+ $(BUILD)/file_crc32.mpy \
+ $(BUILD)/system.mpy \
+ $(BUILD)/queue.mpy \
+ $(BUILD)/sys_bus.mpy \
+ $(BUILD)/event_message.mpy \
+ $(BUILD)/bak_util.mpy \
+ $(BUILD)/ftplib.mpy \
+ $(BUILD)/ftplibtls.mpy \
+ $(BUILD)/ymodem.mpy \
+
+else
+frozen_mpy_list = $(BUILD)/_boot.mpy \
+ $(BUILD)/umqtt.mpy \
+ $(BUILD)/dataCall.mpy \
+ $(BUILD)/log.mpy \
+ $(BUILD)/request.mpy \
+ $(BUILD)/aLiYun.mpy \
+ $(BUILD)/hmac.mpy \
+ $(BUILD)/hashlib.mpy \
+ $(BUILD)/ntptime.mpy \
+ $(BUILD)/checksum.mpy \
+ $(BUILD)/checkNet.mpy \
+ $(BUILD)/ql_fs.mpy \
+ $(BUILD)/app_fota_mount.mpy \
+ $(BUILD)/app_fota_download.mpy\
+ $(BUILD)/app_fota_updater.mpy \
+ $(BUILD)/app_fota.mpy \
+ $(BUILD)/backup_restore.mpy \
+ $(BUILD)/file_crc32.mpy \
+ $(BUILD)/system.mpy \
+ $(BUILD)/queue.mpy \
+ $(BUILD)/sys_bus.mpy \
+ $(BUILD)/event_message.mpy \
+ $(BUILD)/bak_util.mpy \
+ $(BUILD)/ftplib.mpy \
+ $(BUILD)/ftplibtls.mpy \
+ $(BUILD)/cellLocator.mpy \
+ $(BUILD)/ymodem.mpy \
+
+endif
+
+else ifeq ($(strip $(PLAT)),ECR6600)
+frozen_mpy_list = $(BUILD)/_boot_WIFI.mpy \
+ $(BUILD)/umqtt.mpy \
+ $(BUILD)/request.mpy \
+ $(BUILD)/ql_fs.mpy \
+ $(BUILD)/queue.mpy \
+ $(BUILD)/sys_bus.mpy \
+
+else
+ifeq ($(strip $(BOARD)),$(filter $(strip $(BOARD)),EC600UEU_AB_POC))
+frozen_mpy_list = $(BUILD)/_boot.mpy \
+ $(BUILD)/ntptime.mpy \
+ $(BUILD)/log.mpy \
+ $(BUILD)/file_sha256.mpy \
+ $(BUILD)/checksum.mpy \
+ $(BUILD)/checkNet.mpy \
+ $(BUILD)/dataCall.mpy \
+ $(BUILD)/ql_fs.mpy \
+ $(BUILD)/app_fota_mount.mpy \
+ $(BUILD)/app_fota_download.mpy\
+ $(BUILD)/app_fota_updater.mpy \
+ $(BUILD)/app_fota.mpy \
+ $(BUILD)/backup_restore.mpy \
+ $(BUILD)/file_crc32.mpy \
+ $(BUILD)/system.mpy \
+ $(BUILD)/queue.mpy \
+ $(BUILD)/bak_util.mpy \
+ $(BUILD)/ymodem.mpy
+else
+frozen_mpy_list = $(BUILD)/_boot.mpy \
+ $(BUILD)/umqtt.mpy \
+ $(BUILD)/ntptime.mpy \
+ $(BUILD)/request.mpy \
+ $(BUILD)/log.mpy \
+ $(BUILD)/aLiYun.mpy \
+ $(BUILD)/hmac.mpy \
+ $(BUILD)/hashlib.mpy \
+ $(BUILD)/base64.mpy \
+ $(BUILD)/TenCentYun.mpy \
+ $(BUILD)/file_sha256.mpy \
+ $(BUILD)/checksum.mpy \
+ $(BUILD)/checkNet.mpy \
+ $(BUILD)/dataCall.mpy \
+ $(BUILD)/ql_fs.mpy \
+ $(BUILD)/app_fota_mount.mpy \
+ $(BUILD)/app_fota_download.mpy\
+ $(BUILD)/app_fota_updater.mpy \
+ $(BUILD)/app_fota.mpy \
+ $(BUILD)/backup_restore.mpy \
+ $(BUILD)/file_crc32.mpy \
+ $(BUILD)/system.mpy \
+ $(BUILD)/gnss.mpy \
+ $(BUILD)/unzip.mpy \
+ $(BUILD)/queue.mpy \
+ $(BUILD)/sys_bus.mpy \
+ $(BUILD)/event_message.mpy \
+ $(BUILD)/hls.mpy \
+ $(BUILD)/wifilocator.mpy \
+ $(BUILD)/bak_util.mpy \
+ $(BUILD)/ftplib.mpy \
+ $(BUILD)/ftplibtls.mpy \
+ $(BUILD)/uwebsocket.mpy \
+ $(BUILD)/uping.mpy \
+ $(BUILD)/ymodem.mpy
+endif
+endif
+
+$(BUILD)/_frozen_mpy.c: $(frozen_mpy_list) $(HEADER_BUILD)/qstrdefs.generated.h
+ @$(ECHO) "MISC freezing bytecode"
+ $(Q)$(MPY_TOOL) -f -q $(HEADER_BUILD)/qstrdefs.preprocessed.h $(frozen_mpy_list) > $@
+
+$(BUILD):
+ $(Q)echo creating directory: $@
+ -$(Q)$(MKDIR) $@
+
+all:$(BUILD) $(HEADER_BUILD)/qstrdefs.generated.h $(HEADER_BUILD)/moduledefs.h $(HEADER_BUILD)/compressed.data.h $(BUILD)/_frozen_mpy.c
+
+clean:
+ @echo ----- cleaning microPython private target
+ @rm -rf $(HEADER_BUILD)
+ @rm -rf $(BUILD)
+ @echo ----- done.
--- /dev/null
+import modem
+import osTimer
+import utime
+import lvgl as lv
+import EventMesh
+from machine import Timer
+from ui import Screen
+from common import Abstract, LogAdapter
+from machine import RTC
+import ujson
+import ql_fs
+from misc import Power
+import audio
+from ui import style_img,style_screen,style_font_youyuan_20
+import ntptime
+
+#ntptime.settime(timezone=8)
+"""
+可以添加/编辑闹钟时间、周期;
+最多添加三个闹钟;
+可以删除已有的闹钟;
+可以启用/禁用已有的闹钟;
+保存已添加/编辑的闹钟信息,并在下次运行时恢复。
+"""
+#标题高度
+TITLE_HEIGHT = 30
+#闹钟元素高度
+ALARM_HEIGHT = 75
+ALARM_WIDTH = 224
+#闹钟最大数量
+MAX_ALARM = 3
+#CONT的样式
+style_cont_alarm = lv.style_t()
+style_cont_alarm.init()
+style_cont_alarm.set_bg_color(lv.color_make(0x22, 0x28, 0x3D))
+style_cont_alarm.set_radius(0)
+style_cont_alarm.set_pad_left(0)
+style_cont_alarm.set_pad_right(0)
+style_cont_alarm.set_pad_top(0)
+style_cont_alarm.set_pad_bottom(0)
+
+#字体样式
+# style_font_white = lv.style_t()
+# style_font_white.init()
+# style_font_white.set_text_color(lv.color_make(0xff, 0xff, 0xff))
+# style_font_white.set_text_font_v2("font_28.bin",28,0)
+# style_font_white.set_border_width(0)
+# style_font_white.set_pad_left(0)
+# style_font_white.set_pad_right(0)
+# style_font_white.set_pad_top(0)
+# style_font_white.set_pad_bottom(0)
+
+style_font_yellow = lv.style_t()
+style_font_yellow.init()
+style_font_yellow.set_text_color(lv.color_make(0xF1, 0xA3, 0x3B))
+style_font_yellow.set_text_font_v2("font_28.bin",28,0)
+
+#背景样式
+style_alarm_screen_default = lv.style_t()
+style_alarm_screen_default.init()
+style_alarm_screen_default.set_bg_color(lv.color_make(0x00, 0x00, 0x00))
+style_alarm_screen_default.set_border_width(0)
+style_alarm_screen_default.set_pad_left(0)
+style_alarm_screen_default.set_pad_right(0)
+style_alarm_screen_default.set_pad_top(0)
+style_alarm_screen_default.set_pad_bottom(0)
+
+# -------------------------------------------clk_list screen----------------------------------------------------------
+clk_list_screen = lv.obj()
+print("clk_list_screen")
+clk_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_list_title_bg= lv.btn(clk_list_screen)
+clk_list_title_bg.set_size(220,40)
+clk_list_title_bg.set_pos(10,10)
+clk_list_title_bg.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_list_title_bg.set_ext_click_area(40)
+
+clk_list_title = lv.label(clk_list_title_bg)
+clk_list_title.set_pos(0, 15)
+clk_list_title.set_size(240, 40)
+clk_list_title.set_text("闹钟列表")
+clk_list_title.set_long_mode(lv.label.LONG.WRAP)
+clk_list_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+clk_list_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# clk_list_add_btn = lv.btn(clk_list_screen)
+# clk_list_add_btn.set_pos(180,45)
+# clk_list_add_btn.set_size(50,20)
+# clk_list_add_btn.add_style(style_alarm_screen_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# clk_list_add = lv.label(clk_list_screen)
+# clk_list_add.set_pos(180, 45)
+# clk_list_add.set_size(50, 20)
+# clk_list_add.set_text("添加")
+# clk_list_add.set_long_mode(lv.label.LONG.WRAP)
+# clk_list_add.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# clk_list_add.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# clk_list_add.set_ext_click_area(15)
+
+clk_list_screen1_1 = lv.obj(clk_list_screen)
+clk_list_screen1_1.set_pos(0, 65)
+clk_list_screen1_1.set_size(240, 255)
+clk_list_screen1_1.add_style(style_alarm_screen_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+no_add_alarm_img = lv.img(clk_list_screen1_1)
+no_add_alarm_img.set_pos(65, 0)
+no_add_alarm_img.set_size(110, 140)
+no_add_alarm_img.set_src("U:/static/IMAGE_IDLE_SCREEN_ALARM_ICON_NEW.png")
+no_add_alarm_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+#暂未添加闹钟
+no_add_alarm = lv.label(clk_list_screen1_1)
+no_add_alarm.set_pos(0, 170)
+no_add_alarm.set_size(240, 50)
+no_add_alarm.set_text("闹钟暂未设置")
+no_add_alarm.set_long_mode(lv.label.LONG.WRAP)
+no_add_alarm.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+no_add_alarm.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# -------------------------------------------clk_edit screen----------------------------------------------------------
+
+clk_edit_screen = lv.obj()
+print("clk_edit_screen")
+clk_edit_screen.add_style(style_alarm_screen_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_edit_title = lv.label(clk_edit_screen)
+clk_edit_title.set_pos(0, 0)
+clk_edit_title.set_size(240, TITLE_HEIGHT)
+clk_edit_title.set_text("编辑闹钟")
+clk_edit_title.set_long_mode(lv.label.LONG.WRAP)
+clk_edit_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+clk_edit_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_edit_time = lv.btn(clk_edit_screen)
+clk_edit_time.set_size(224,75)
+clk_edit_time.set_pos(8,58)
+clk_edit_time.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_edit_time_label = lv.label(clk_edit_time)
+clk_edit_time_label.set_pos(60, 15)
+clk_edit_time_label.set_size(100, 40)
+clk_edit_time_label.set_text("编辑时间")
+clk_edit_time_label.set_long_mode(lv.label.LONG.WRAP)
+clk_edit_time_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+clk_edit_time_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_edit_weekday = lv.btn(clk_edit_screen)
+clk_edit_weekday.set_size(224,75)
+clk_edit_weekday.set_pos(8,137)
+clk_edit_weekday.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_edit_weekday_label = lv.label(clk_edit_weekday)
+clk_edit_weekday_label.set_pos(60, 15)
+clk_edit_weekday_label.set_size(100, 40)
+clk_edit_weekday_label.set_text("编辑星期")
+clk_edit_weekday_label.set_long_mode(lv.label.LONG.WRAP)
+clk_edit_weekday_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+clk_edit_weekday_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_delete_alarm = lv.btn(clk_edit_screen)
+clk_delete_alarm.set_size(224,75)
+clk_delete_alarm.set_pos(8,216)
+clk_delete_alarm.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_delete_alarm_label = lv.label(clk_delete_alarm)
+clk_delete_alarm_label.set_pos(60, 15)
+clk_delete_alarm_label.set_size(100, 40)
+clk_delete_alarm_label.set_text("删除闹钟")
+clk_delete_alarm_label.set_long_mode(lv.label.LONG.WRAP)
+clk_delete_alarm_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+clk_delete_alarm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# -------------------------------------------clk_repeat screen----------------------------------------------------------
+clk_repeat_screen = lv.obj()
+print("clk_repeat_screen")
+clk_repeat_screen.set_scrollbar_mode(0)
+clk_repeat_screen.add_style(style_alarm_screen_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_repeat_btn = lv.btn(clk_repeat_screen)
+clk_repeat_btn.set_size(224,40)
+clk_repeat_btn.set_pos(9,40)
+clk_repeat_btn.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_repeat_label = lv.label(clk_repeat_btn)
+clk_repeat_label.set_pos(8, 10)
+clk_repeat_label.set_size(103, 40)
+clk_repeat_label.set_text("星期一")
+clk_repeat_label.set_long_mode(lv.label.LONG.DOT)
+clk_repeat_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_repeat_label.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+clk_repeat_switch = lv.switch(clk_repeat_btn)
+clk_repeat_switch.set_pos(191, 5)
+clk_repeat_switch.set_size(24, 24)
+clk_repeat_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN)
+clk_repeat_switch.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR)
+clk_repeat_switch.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.KNOB)
+clk_repeat_switch.set_style_bg_color(lv.color_make(0xf1, 0xa3, 0x3b),lv.PART.KNOB| lv.STATE.CHECKED)
+clk_repeat_switch.set_ext_click_area(20)
+clk_repeat_switch.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR| lv.STATE.CHECKED)
+
+clk_repeat_btn1 = lv.btn(clk_repeat_screen)
+clk_repeat_btn1.set_size(224,40)
+clk_repeat_btn1.set_pos(9,90)
+clk_repeat_btn1.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_repeat_label1 = lv.label(clk_repeat_btn1)
+clk_repeat_label1.set_pos(8, 10)
+clk_repeat_label1.set_size(103, 40)
+clk_repeat_label1.set_text("星期二")
+clk_repeat_label1.set_long_mode(lv.label.LONG.DOT)
+clk_repeat_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_repeat_label1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+clk_repeat_switch1 = lv.switch(clk_repeat_btn1)
+clk_repeat_switch1.set_pos(191, 5)
+clk_repeat_switch1.set_size(24, 24)
+clk_repeat_switch1.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN)
+clk_repeat_switch1.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR)
+clk_repeat_switch1.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.KNOB)
+clk_repeat_switch1.set_style_bg_color(lv.color_make(0xf1, 0xa3, 0x3b),lv.PART.KNOB| lv.STATE.CHECKED)
+clk_repeat_switch1.set_ext_click_area(20)
+clk_repeat_switch1.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR| lv.STATE.CHECKED)
+
+
+clk_repeat_btn2 = lv.btn(clk_repeat_screen)
+clk_repeat_btn2.set_size(224,40)
+clk_repeat_btn2.set_pos(9,140)
+clk_repeat_btn2.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_repeat_label2 = lv.label(clk_repeat_btn2)
+clk_repeat_label2.set_pos(8, 10)
+clk_repeat_label2.set_size(103, 40)
+clk_repeat_label2.set_text("星期三")
+clk_repeat_label2.set_long_mode(lv.label.LONG.DOT)
+clk_repeat_label2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_repeat_label2.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+
+clk_repeat_switch2 = lv.switch(clk_repeat_btn2)
+clk_repeat_switch2.set_pos(191, 5)
+clk_repeat_switch2.set_size(24, 24)
+clk_repeat_switch2.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN)
+clk_repeat_switch2.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR)
+clk_repeat_switch2.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.KNOB)
+clk_repeat_switch2.set_style_bg_color(lv.color_make(0xf1, 0xa3, 0x3b),lv.PART.KNOB| lv.STATE.CHECKED)
+clk_repeat_switch2.set_ext_click_area(20)
+clk_repeat_switch2.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR| lv.STATE.CHECKED)
+
+clk_repeat_btn3 = lv.btn(clk_repeat_screen)
+clk_repeat_btn3.set_size(224,40)
+clk_repeat_btn3.set_pos(9,190)
+clk_repeat_btn3.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_repeat_label3 = lv.label(clk_repeat_btn3)
+clk_repeat_label3.set_pos(8, 10)
+clk_repeat_label3.set_size(103, 40)
+clk_repeat_label3.set_text("星期四")
+clk_repeat_label3.set_long_mode(lv.label.LONG.DOT)
+clk_repeat_label3.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_repeat_label3.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+clk_repeat_switch3 = lv.switch(clk_repeat_btn3)
+clk_repeat_switch3.set_pos(191, 5)
+clk_repeat_switch3.set_size(24, 24)
+clk_repeat_switch3.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN)
+clk_repeat_switch3.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR)
+clk_repeat_switch3.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.KNOB)
+clk_repeat_switch3.set_style_bg_color(lv.color_make(0xf1, 0xa3, 0x3b),lv.PART.KNOB| lv.STATE.CHECKED)
+clk_repeat_switch3.set_ext_click_area(20)
+clk_repeat_switch3.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR| lv.STATE.CHECKED)
+
+clk_repeat_btn4 = lv.btn(clk_repeat_screen)
+clk_repeat_btn4.set_size(224,40)
+clk_repeat_btn4.set_pos(9,240)
+clk_repeat_btn4.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_repeat_label4 = lv.label(clk_repeat_btn4)
+clk_repeat_label4.set_pos(8, 10)
+clk_repeat_label4.set_size(103, 40)
+clk_repeat_label4.set_text("星期五")
+clk_repeat_label4.set_long_mode(lv.label.LONG.DOT)
+clk_repeat_label4.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_repeat_label4.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+clk_repeat_switch4 = lv.switch(clk_repeat_btn4)
+clk_repeat_switch4.set_pos(191, 5)
+clk_repeat_switch4.set_size(24, 24)
+clk_repeat_switch4.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN)
+clk_repeat_switch4.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR)
+clk_repeat_switch4.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.KNOB)
+clk_repeat_switch4.set_style_bg_color(lv.color_make(0xf1, 0xa3, 0x3b),lv.PART.KNOB| lv.STATE.CHECKED)
+clk_repeat_switch4.set_ext_click_area(20)
+clk_repeat_switch4.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR| lv.STATE.CHECKED)
+
+clk_repeat_btn5 = lv.btn(clk_repeat_screen)
+clk_repeat_btn5.set_size(224,40)
+clk_repeat_btn5.set_pos(9,290)
+clk_repeat_btn5.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_repeat_label5 = lv.label(clk_repeat_btn5)
+clk_repeat_label5.set_pos(8, 10)
+clk_repeat_label5.set_size(103, 40)
+clk_repeat_label5.set_text("星期六")
+clk_repeat_label5.set_long_mode(lv.label.LONG.DOT)
+clk_repeat_label5.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_repeat_label5.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+clk_repeat_switch5 = lv.switch(clk_repeat_btn5)
+clk_repeat_switch5.set_pos(191, 5)
+clk_repeat_switch5.set_size(24, 24)
+clk_repeat_switch5.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN)
+clk_repeat_switch5.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR)
+clk_repeat_switch5.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR| lv.STATE.CHECKED)
+clk_repeat_switch5.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.KNOB)
+clk_repeat_switch5.set_style_bg_color(lv.color_make(0xf1, 0xa3, 0x3b),lv.PART.KNOB| lv.STATE.CHECKED)
+clk_repeat_switch5.set_ext_click_area(20)
+
+clk_repeat_btn6 = lv.btn(clk_repeat_screen)
+clk_repeat_btn6.set_size(224,40)
+clk_repeat_btn6.set_pos(9,340)
+clk_repeat_btn6.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_repeat_label6 = lv.label(clk_repeat_btn6)
+clk_repeat_label6.set_pos(8, 10)
+clk_repeat_label6.set_size(103, 40)
+clk_repeat_label6.set_text("星期日")
+clk_repeat_label6.set_long_mode(lv.label.LONG.DOT)
+clk_repeat_label6.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_repeat_label6.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+clk_repeat_switch6 = lv.switch(clk_repeat_btn6)
+clk_repeat_switch6.set_pos(191, 5)
+clk_repeat_switch6.set_size(24, 24)
+clk_repeat_switch6.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN)
+clk_repeat_switch6.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR)
+clk_repeat_switch6.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.KNOB)
+clk_repeat_switch6.set_style_bg_color(lv.color_make(0xf1, 0xa3, 0x3b),lv.PART.KNOB| lv.STATE.CHECKED)
+clk_repeat_switch6.set_ext_click_area(20)
+clk_repeat_switch6.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR| lv.STATE.CHECKED)
+
+# -------------------------------------------clk_repeat screen----------------------------------------------------------
+clk_time_screen = lv.obj()
+print("clk_time_screen")
+clk_time_screen.set_scrollbar_mode(0)
+clk_time_screen.add_style(style_alarm_screen_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+#hour的样式
+style_roller_hour_main = lv.style_t()
+style_roller_hour_main.init()
+style_roller_hour_main.set_radius(6)
+style_roller_hour_main.set_bg_color(lv.color_make(0x00, 0x00, 0x00))
+style_roller_hour_main.set_bg_opa(102)
+style_roller_hour_main.set_border_width(0)
+
+style_roller_hour_selected = lv.style_t()
+style_roller_hour_selected.init()
+style_roller_hour_selected.set_radius(6)
+style_roller_hour_selected.set_bg_color(lv.color_make(0x2c, 0x2c, 0x2f))
+style_roller_hour_selected.set_border_width(0)
+
+#创建hour的roller
+clk_time_roller_1 = lv.roller(clk_time_screen)
+clk_time_roller_1.set_width(50)
+clk_time_roller_1.set_pos(60, 50)
+clk_time_roller_1.set_options(
+ "00\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23",
+ lv.roller.MODE.NORMAL)
+clk_time_roller_1.set_visible_row_count(5)
+clk_time_roller_1.add_style(style_roller_hour_main, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_time_roller_1.add_style(style_roller_hour_selected, lv.PART.SELECTED | lv.STATE.DEFAULT)
+
+#min的样式
+#创建min的roller
+clk_time_roller_2 = lv.roller(clk_time_screen)
+clk_time_roller_2.set_width(50)
+clk_time_roller_2.set_pos(130, 50)
+clk_time_roller_2.set_options(
+ "00\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59",
+ lv.roller.MODE.NORMAL)
+clk_time_roller_2.set_visible_row_count(5)
+clk_time_roller_2.add_style(style_roller_hour_main, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_time_roller_2.add_style(style_roller_hour_selected, lv.PART.SELECTED | lv.STATE.DEFAULT)
+
+#完成按钮
+alarm_ok= lv.btn(clk_time_screen)
+alarm_ok.set_size(150,40)
+alarm_ok.set_pos(45,250)
+alarm_ok.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+alarm_ok.set_ext_click_area(20)
+
+label_ok = lv.label(alarm_ok)
+label_ok.set_pos(30, 20)
+label_ok.set_size(100, 40)
+label_ok.set_text("完成")
+label_ok.set_long_mode(lv.label.LONG.DOT)
+label_ok.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+label_ok.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+
+#闹钟信息
+alarm_list = [{'hour': 16, 'repeart': 10, 'idx': 0, 'enabled': 0, 'days': [], 'minute': 39},
+ {'hour': 16, 'repeart': 10, 'idx': 1, 'enabled': 0, 'days': [], 'minute': 39},
+ {'hour': 15, 'repeart': 1, 'idx': 2, 'enabled': 0, 'days': [], 'minute': 13},
+ {'hour': 16, 'repeart': 1, 'idx': 3, 'enabled': 0, 'days': [], 'minute': 39},
+ {'hour': 15, 'repeart': 1, 'idx': 4, 'enabled': 0, 'days': [], 'minute': 13}]
+#用于显示闹钟列表不包含开关机信息
+
+class ClockManager(Abstract):
+ def __init__(self):
+ super().__init__()
+ self.rtc = RTC()
+ self.days = 0
+ self.idx = 0
+
+ IFEXIST = ql_fs.path_exists("/usr/static/storage_file/alarm_msg.json")
+ self.check_alarm_list = []
+ if IFEXIST == True:
+ with open("/usr/static/storage_file/alarm_msg.json","r",encoding='utf-8') as fd:
+ self.check_alarm_list = ujson.load(fd)
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("push_clock_info", self.set)
+ EventMesh.subscribe("read_alarminjson", self.read_alarminjson)
+ EventMesh.subscribe("add_alarm", self.add_alarm)
+ EventMesh.subscribe("remove_alarm", self.remove_alarm)
+ EventMesh.subscribe("set_rtc_alarm", self.set_rtc_alarm)
+ EventMesh.subscribe("get_alarm_indx", self.get_alarm_indx)
+ EventMesh.subscribe("get_check_alarm_list", self.get_check_alarm_list)
+
+
+
+ def get_check_alarm_list(self, event, msg):
+ alarm_len = 0
+ global alarm_list
+ EventMesh.publish("read_alarminjson")
+ alarm_len = len(alarm_list)
+ return alarm_len
+
+
+ def set(self, event, msg):
+ global alarm_list
+ print("msg = {}".format(msg))
+ idx = msg.get("idx")
+ print("修改第{}个闹钟信息{}".format(idx,alarm_list[idx]))
+ alarm_list[idx]["hour"] = msg["hour"]
+ alarm_list[idx]["minute"] = msg["minute"]
+ alarm_list[idx]["days"] = msg["days"]
+ alarm_list[idx]["enabled"] = msg["enabled"]
+ alarm_list[idx]["repeart"] = msg["repeart"]
+ with open("/usr/static/storage_file/alarm_msg.json", 'w+',encoding='utf-8') as fd:
+ ujson.dump(alarm_list,fd)
+
+ def read_alarminjson(self, event, msg):
+ IFEXIST = ql_fs.path_exists("/usr/static/storage_file/alarm_msg.json")
+ global alarm_list
+ print("IFEXIST:{}".format(IFEXIST))
+ if IFEXIST == True:
+ with open("/usr/static/storage_file/alarm_msg.json","r",encoding='utf-8') as fd:
+ alarm_list = ujson.load(fd)
+ return alarm_list
+
+ def add_alarm(self, event, msg):
+
+ global alarm_list
+ EventMesh.publish("read_alarminjson")
+ idx = len(alarm_list)
+
+ # msg = ['1','06:90','23:59']
+ count = 1
+ new = 0
+ num = 0
+ print("msg:{}".format(msg))
+ # if msg[0] == 1:
+ # msg_new = msg[1]
+ for i in range(0,2):#开关机固定是 idx 0 1
+ off_msg1 = msg[i+1]
+ msg_tmp1 = off_msg1.split(':')
+ start_hour = int(msg_tmp1[0])
+ start_min = int(msg_tmp1[1])
+ enable = int(msg[0])
+ EventMesh.publish("set_boot_off_time",[msg[0],msg[1],msg[2]])
+ if alarm_list and new == 0 :
+ for x in range(0,5):
+ # print("count :{} self.alarm_list:111111{} len(self.alarm_list):{}".format(count,alarm_list,len(alarm_list)))
+ if new == 1 and count > len(alarm_list):
+ break
+ tmp = alarm_list[count-1]['idx']
+ if tmp == 0 or tmp == 1:#覆盖旧的
+ alarm_list[count-1] = {"idx": tmp, "hour": start_hour, "minute": start_min, "days":[0,1,2,3,4,5,6], "enabled": enable,"repeart":10}
+ count+=1
+ if count > len(alarm_list):
+ new = 1
+ # print("self.alarm_list:5555 {}".format(alarm_list))
+ break
+ else:#添加最新的
+ count+=1
+ if tmp == 2 or tmp == 3 or tmp == 4:#添加最新的
+ msg_tmp = EventMesh.publish("get_boot_off_time")
+ # print("msg_tmp all_data {}".format(msg_tmp))
+ if msg_tmp != None:
+ if len(msg_tmp[0]) > 0:#只有关机时间长度为0时才添加新元素 不是就覆盖原来旧的数据
+ # print("self.alarm_list:444444 {}".format(alarm_list))
+ if count > len(alarm_list):
+ new = 1
+ continue
+ else:
+ alarm_list.append({"idx": num, "hour": start_hour, "minute": start_min, "days":[0,1,2,3,4,5,6], "enabled": enable,"repeart":10})
+ # print("self.alarm_list:7777777 {}".format(alarm_list))
+ if count > len(alarm_list):
+ new = 1
+ break
+ count+=1
+ # print("self.alarm_list:111111 {}".format(alarm_list))
+
+ else:#添加最新的
+ alarm_list.append({"idx": num, "hour": start_hour, "minute": start_min, "days":[0,1,2,3,4,5,6], "enabled": enable,"repeart":10})
+ new = 1
+ num+=1
+ # print("add_here-----idx:{} msg:{} alarm_list:{}".format(idx,msg,alarm_list))
+
+ # else:
+ # msg_tmp = msg[1]
+ # # print("alarm_list:{} alarm_new_old:{} msg_tmp:{}",alarm_new,alarm_new_old,msg_tmp)
+ # num = 2
+ # count = 1
+ # j=0
+ # new = 0
+ # for j in range(0,3):
+ # alarm_day = []
+ # alarm_week = []
+ # alarm_total_data = []
+ # alarm_total_data = msg_tmp.split(',')[j]
+
+ # b = alarm_total_data.find('-')
+ # if b != -1:
+ # alarm_data = alarm_total_data.split('-')#-作为分隔符
+ # alarm_switch = int(alarm_data[1])#开关
+ # alarm_day_num = int(alarm_data[2])#天
+ # alarm_time = alarm_data[0]#时间
+ # alarm_time_tmp = alarm_time.split(':')#冒号分隔时间 时 分
+ # alarm_time_hour = int(alarm_time_tmp[0])
+ # alarm_time_min = int(alarm_time_tmp[1])
+ # if alarm_day_num == 3:
+ # alarm_week = alarm_data[3]#星期
+
+ # if alarm_day_num == 2:#每一天
+ # alarm_day = [1,2,3,4,5,6,0]
+ # elif alarm_day_num == 3:#自定义
+ # for i in range(0,7):
+ # if alarm_week[i] != '0':
+ # alarm_day.append(i)
+ # if alarm_list and new == 0 :
+ # for x in range(0,5):
+
+ # print("count :{} self.alarm_new:111111{} len(self.alarm_new):{} ".format(count,alarm_list,len(alarm_list)))
+
+ # tmp = alarm_list[count-1]['idx']
+ # if tmp == 2 or tmp == 3 or tmp == 4 :#覆盖旧的
+ # alarm_list[count-1] = {"idx": tmp, "hour": alarm_time_hour, "minute": alarm_time_min, "days":alarm_day, "enabled": alarm_switch,"repeart":1}
+ # count+=1
+ # if count > len(alarm_list):
+ # new = 1
+ # print("self.alarm_list:5555 {}".format(alarm_list))
+ # break
+ # else:#添加最新的
+ # count+=1
+ # if tmp == 0 or tmp == 1:#添加最新的
+ # msg_data = EventMesh.publish("get_boot_off_time")
+ # print("msg_data all_data {}".format(msg_data))
+ # if msg_data != None:
+ # if msg_data[1] > 0:#只有关机时间长度为0时才添加新元素 不是就覆盖原来旧的数据
+ # print("self.alarm_list:444444 {}".format(alarm_list))
+ # if count > len(alarm_list):
+ # new = 1
+ # continue
+ # else:
+ # alarm_list.append({"idx": num, "hour": alarm_time_hour, "minute": alarm_time_min, "days":alarm_day, "enabled": alarm_switch,"repeart":alarm_day_num})
+ # print("self.alarm_list:7777777 {}".format(alarm_list))
+ # if count > len(alarm_list):
+ # new = 1
+ # break
+ # count+=1
+ # print("self.alarm_list:111111 {}".format(alarm_list))
+ # else:#添加最新的
+ # alarm_list.append({"idx": num, "hour": alarm_time_hour, "minute": alarm_time_min, "days":alarm_day, "enabled": alarm_switch,"repeart":alarm_day_num})
+ # new = 1
+ # num+=1
+
+ print("alarm_list----len- :{}".format(len(alarm_list)))
+ with open("/usr/static/storage_file/alarm_msg.json", 'w+',encoding='utf-8') as fd:
+ ujson.dump(alarm_list,fd)
+ EventMesh.publish("push_update_alarm_show")
+
+
+
+
+
+
+ def remove_alarm(self, event, msg):
+ global alarm_list
+ print("ddddddddddddddddddd:",msg)
+ idx = msg.get("idx")
+ print("delete_here1-----{},{}:".format(idx,msg))
+
+ for i, alarm in enumerate(alarm_list):
+ print("delete_here2-----{},{}:".format(i,alarm))
+
+ if alarm["idx"] == idx:
+ del alarm_list[i]
+ print("delete_here3-----",alarm_list)
+
+ #删除闹钟后,对idx重新排序
+ if alarm_list:
+ for j in range(i,len(alarm_list)):
+ alarm_list[j]["idx"] -= 1
+ print("delete_here4-----",alarm_list)
+
+ with open("/usr/static/storage_file/alarm_msg.json", 'w+',encoding='utf-8') as fd:
+ ujson.dump(alarm_list,fd)
+
+
+ def get_alarm_indx(self,event,msg):
+ return self.idx
+
+ def _rtc_callback(self,args):
+ print("---!!!!!!alarm_ring!!!!!!!---,idx:",args)
+ global alarm_list
+ EventMesh.publish("read_alarminjson")
+ idx = self.idx
+ print("单次闹钟关闭:{} alarm_list:{}".format(idx,alarm_list))
+ #判断是否是单次闹钟,如果是,则将开关状态设置为关闭
+ # for i in range(len(alarm_list)):
+ # if alarm_list[i]["idx"] == self.idx:
+ # idx = i
+ if not alarm_list[idx]["days"] :
+ print("关闭1:",alarm_list[idx]["days"])
+ print("关闭2:",alarm_list [idx]["days"])
+ alarm_list[idx]["enabled"] = False
+ with open("/usr/static/storage_file/alarm_msg.json", 'w+',encoding='utf-8') as fd:
+ ujson.dump(alarm_list,fd)
+ EventMesh.publish("set_rtc_alarm")
+ #设置下一个闹钟,定时开关机功能
+ if 0 :
+ msg_data = EventMesh.publish("get_boot_off_time")
+ print("msg_tmp:{}".format(msg_data))
+
+ msg_tmp = msg_data[0]
+ off_tmp2 = msg_tmp[2]
+ msg_tmp2 = off_tmp2.split(':')
+ end_min = int(msg_tmp2[0])*60+int(msg_tmp2[1])
+
+ rtc_now_time = self.rtc.datetime()
+ current = rtc_now_time[4]*60+rtc_now_time[5]
+
+ print("end_min:{} current:{} off_tmp2:{}".format(end_min,current,off_tmp2))
+ if end_min == current:#结束的时间分钟等于关机时间分钟数则关机
+ EventMesh.publish("load_screen", {"screen": "poweroff_comfirm"})
+ return
+
+
+
+ get_hr_state = EventMesh.publish("get_hr_state")
+ get_spo2_state = EventMesh.publish("get_spo2_state")
+ if get_hr_state != None or get_spo2_state != None:
+ if get_hr_state != 1 and get_spo2_state != 1:
+ EventMesh.publish("load_screen", {"screen": "popup_alarm"})
+ # def _reset_rtc_alarm_time(self, args):
+ # print("---alarm_ring---")
+
+ def set_rtc_alarm(self,event,msg):
+ global alarm_list
+ EventMesh.publish("read_alarminjson")
+ rtc_now_time = self.rtc.datetime()
+
+ # print("00获取所有闹钟信息:{}".format(alarm_list))
+ new_alarm_list = [(alarm['hour'], alarm['minute'], alarm['days'],alarm["idx"]) for alarm in alarm_list if alarm['enabled']]
+
+ print("01获取开启的闹钟:{}".format(new_alarm_list))
+ start_day = 0 # 周日
+ start_minute = 0 # 0点
+ end_minute = 60*24*7
+ minute_list = []
+
+ if not new_alarm_list:
+ print("02当前并没有开启的闹钟,退出闹钟设置程序:{}".format(new_alarm_list))
+ self.rtc.enable_alarm(0)
+ return
+
+ for alarm in new_alarm_list:
+ hour, minute, days,idx = alarm
+ #如果没有选择day,则表示是单次闹钟
+ if days:
+ for day in days:
+ minute_list.append(hour*60 + minute + (day-start_day)*24*60)
+
+ else:
+ #如果当前时间没超过闹钟设置时间,则设置为今天,否则设置为明天
+ if (hour*60 + minute) > (rtc_now_time[4]*60 + rtc_now_time[5]):
+ minute_list.append(hour*60 + minute + (rtc_now_time[3]-start_day)*24*60)
+ print("设置单次闹钟:{}".format(new_alarm_list))
+
+ else:
+ minute_list.append(hour*60 + minute + (rtc_now_time[3]-start_day+1)*24*60)
+
+ total_minutes = sorted(minute_list)
+ print("02以周日00:00为起点,计算所有开启闹钟的total_min并排序:{}".format(total_minutes))
+
+ #获取当前时间 (2020, 9, 11, 5, 15, 43, 23, 0)
+ # rtc_now_time = (2020, 9, 11, 6, 11, 43, 23, 0)
+ # rtc_now_time = self.rtc.datetime()
+
+ print("03当前的rtc时间:{}".format(rtc_now_time))
+
+ current_minute = rtc_now_time[4]*60 + rtc_now_time[5] + (rtc_now_time[3]-start_day)*24*60
+ print("04当前的rtc_total_minutes:{}".format(current_minute))
+
+ if current_minute in minute_list:
+ print("当前时间和闹钟列表时间重复,删除重复的时间")
+ minute_list.remove(current_minute)
+
+ minute_list.append(current_minute)
+
+ # 对分钟数列表进行排序,并获取当前时间分钟数所在的位置
+ minute_list = sorted(minute_list)
+ current_index = minute_list.index(current_minute)
+
+ print("05将当前时间插入min_list后的min_list:{}".format(minute_list))
+ print("06当前时间所在位置:{}".format(current_index))
+
+ next_index = current_index + 1
+ if next_index >= len(minute_list):
+ next_minute = minute_list[0]
+ print("07下一个闹钟的分钟数:", next_minute)
+ else:
+ next_minute = minute_list[next_index]
+ print("07下一个闹钟的分钟数:", next_minute)
+
+ if next_minute >= current_minute:
+ interval_minute = next_minute - current_minute
+ print("08距离下一次响铃的的分钟数:", interval_minute)
+ else:
+ interval_minute = end_minute - current_minute + next_minute
+ print("08距离下一次响铃的的分钟数:", interval_minute)
+
+ #反向获取时间戳
+ time = utime.localtime()
+ print("09获取utime的时间戳:", time)
+ rtc_mktime = utime.mktime(time)
+ print("10反向获取utime的mktime:", rtc_mktime)
+
+ #加上下一次响铃需要的时间
+ next_alarm_mktime = rtc_mktime + interval_minute*60
+ print("11下一次响铃的mktime:", next_alarm_mktime)
+
+ #格式化时间戳,得到下一次闹钟的时间
+ next_alarm_time = utime.localtime(next_alarm_mktime)
+ print("12下一次响铃的准确时间:", next_alarm_time)
+ #将时间转换为rtc的格式
+ data_l = [2021, 7, 9, 5, 12, 30, 0, 0]
+ #给rtc时间赋值
+ data_l[0] = next_alarm_time[0] #year
+ data_l[1] = next_alarm_time[1] #month
+ data_l[2] = next_alarm_time[2] #day
+ data_l[4] = next_alarm_time[3] #hour
+ data_l[5] = next_alarm_time[4] #minute
+ #转换为元组
+ data_e=tuple(data_l)
+ print("13将该时间转换为RTC元组:", data_e)
+
+ for alarm in alarm_list:
+ if not alarm["days"] and alarm["enabled"]:
+ print("关闭666:",alarm["idx"])
+ if alarm["hour"] == data_l[4] and alarm["minute"]==data_l[5]:
+ self.idx = alarm["idx"]
+ #设置rtc闹钟时间
+ self.rtc.register_callback(self._rtc_callback)
+
+ FLAG = self.rtc.set_alarm(data_e)
+ if FLAG == 0:
+ print("14成功设置rtc的到期时间:", data_e)
+ else:
+ print("14设置rtc的到期时间失败:", data_e)
+
+ self.rtc.enable_alarm(1)
+
+#闹钟弹窗
+popup_alarm_screen = lv.obj()
+print("popup_alarm_screen")
+popup_alarm_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+popup_alarm_img = lv.img(popup_alarm_screen)
+popup_alarm_img.set_pos(63, 60)
+popup_alarm_img.set_size(110, 140)
+popup_alarm_img.set_src("U:/static/IMAGE_IDLE_SCREEN_ALARM_ICON_NEW.png")
+popup_alarm_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+popup_alarm_time = lv.label(popup_alarm_screen)
+popup_alarm_time.set_pos(0, 230)
+popup_alarm_time.set_size(240, 50)
+popup_alarm_time.set_text(" ")
+popup_alarm_time.set_long_mode(lv.label.LONG.WRAP)
+popup_alarm_time.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+popup_alarm_time.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+#闹钟列表
+class PopupAlarmScreen(Screen):
+ NAME = "popup_alarm"
+ def __init__(self):
+ super().__init__()
+ self.meta = popup_alarm_screen
+ self.timer = osTimer()
+ self.aud = audio.Audio(0)
+ self.alarm_count = 0
+
+ def initialization(self):
+ self.alarm_count = 0
+ self.timer.start(3*1000,1,self.exit_alarm_page)
+ time = EventMesh.publish("screen_get_time")#获取系统时间
+ popup_alarm_time.set_text("{}:{}".format("%02d"%(time[0][0]),"%02d"%(time[0][1])))
+
+
+ def Close(self):
+ self.alarm_count=0
+ self.timer.stop()
+ self.aud.stop()
+
+ def exit_alarm_page(self,*arges):
+ self.alarm_count+=1
+ if self.alarm_count > 10:
+ self.alarm_count = 0
+ self.aud.stop()
+ self.timer.stop()
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ return
+ self.aud.play(1, 1, 'U:/static/audio_audio_haixiu.mp3') #播放声音
+
+ def close_timer(self):
+ self.alarm_count=0
+ self.timer.stop()
+ self.aud.stop()
+
+ def done_left_to_right(self):
+ self.close_timer()
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def done_right_to_left(self):
+ self.close_timer()
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def done_bottom_to_top(self):
+ self.close_timer()
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def done_top_to_bottom(self):
+ self.close_timer()
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def done_return(self):
+ self.close_timer()
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def done_click(self):
+ self.close_timer()
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ self.close_timer()
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ self.close_timer()
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+#闹钟列表
+class ClkListScreen(Screen):
+ NAME = "clk_list"
+ def __init__(self):
+ super().__init__()
+ self.meta = clk_list_screen
+ self.clock_list = []
+ # clk_list_add_btn.add_event_cb(lambda e: self.add_alarm_btn(e),
+ # lv.EVENT.PRESSED, None)
+ self.weekdays_list = ["日","一","二","三","四","五","六"]
+ EventMesh.subscribe("push_update_alarm_show", self.update_show_info)
+ self.alarm_show_list = lv.obj(clk_list_screen)
+ self.timer=osTimer()
+
+
+ def initialization(self):
+ EventMesh.publish("read_alarminjson")
+ EventMesh.publish("set_rtc_alarm")
+ print("n闹钟列表初始化!!")
+ self.alarm_draw_btn()
+
+ def update_show_info(self,event,msg):
+ EventMesh.publish("read_alarminjson")
+ self.timer.start(1*1000,0,self.delay_update)
+ def delay_update(self,*agrs):
+ EventMesh.publish("set_rtc_alarm")
+ self.alarm_draw_btn()
+
+
+ def alarm_draw_btn(self):
+ global alarm_list
+ self.clock_list = alarm_list
+ IFEXIST = ql_fs.path_exists("/usr/static/storage_file/alarm_msg.json")
+ if IFEXIST == True:
+ if self.clock_list:
+ # print("nalarm_list:{}".format(alarm_list))
+ no_add_alarm_img.add_flag(lv.obj.FLAG.HIDDEN)
+ no_add_alarm.add_flag(lv.obj.FLAG.HIDDEN)
+ self.alarm_show_list.delete()#先删除一次控件
+ self.alarm_show_list = lv.obj(clk_list_screen)
+ self.alarm_show_list.set_pos(0, 65)
+ self.alarm_show_list.set_size(240, 255)
+ self.alarm_show_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ self.alarm_show_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ #print("菜单的孩子个数:",clk_list_screen1.get_child_cnt())
+ num = 0
+ count = 0
+ for i ,each in enumerate(self.clock_list):
+ num = each["idx"]
+ if count >= 3:
+ break
+ repeart = each["repeart"]
+ if repeart == 10:
+ continue
+ _btn = lv.btn(self.alarm_show_list)
+ _btn.set_size(230,75)
+ _btn.set_pos(8,79*count)
+ _btn.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+ _btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.edit_alarm(e)),
+ lv.EVENT.CLICKED, None)
+
+
+ # print("------刷新闹钟列表噢:{} num:{}",each,num)
+ _btn_label1 = lv.label(_btn)
+ _btn_label1.set_pos(50, 0)
+ _btn_label1.set_size(0, 0)
+ _btn_label1.set_text(str(num))
+
+ _btn_label2 = lv.label(_btn)
+ _btn_label2.set_pos(8, 10)
+ _btn_label2.set_size(97, 40)
+ _btn_label2.set_text("%02d" % each["hour"] + ":"+"%02d" % each["minute"])
+ # _btn_label2.set_text(str(each["days"]))
+
+ _btn_label2.set_long_mode(lv.label.LONG.DOT)
+ _btn_label2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ _btn_label2.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ _new_list = sorted(each["days"])
+ repeart = each["repeart"]
+ _output = [self.weekdays_list[x] for x in _new_list]
+ _btn_label3 = lv.label(_btn)
+ _btn_label3.set_pos(5, 44)
+ _btn_label3.set_size(200, 40)
+ print("_new_list:{} repeart:{}".format(_new_list,repeart))
+ if repeart == 1:
+ _btn_label3.set_text("一次")
+ elif repeart == 2:
+ _btn_label3.set_text("每天")
+ else:
+ _btn_label3.set_text(",".join(_output))
+ _btn_label3.set_long_mode(lv.label.LONG.DOT)
+ _btn_label3.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ _btn_label3.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ # _btn_switch = lv.switch(_btn)
+ # _btn_switch.set_pos(178, 29)
+ # _btn_switch.set_size(50, 25)
+ # _btn_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.INDICATOR)
+ # _btn_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.INDICATOR| lv.STATE.CHECKED)
+ # _btn_switch.add_event_cb(lambda e:
+ # self.switch_event_cb(e),
+ # lv.EVENT.VALUE_CHANGED,
+ # None)
+
+ # _btn_switch.set_style_bg_color(lv.color_make(0xf1, 0xa3, 0x3b),lv.PART.KNOB| lv.STATE.CHECKED)
+ # _btn_switch.set_style_bg_color(lv.color_make(0x3d, 0x3d, 0x3d),lv.PART.KNOB)
+
+ # _btn_switch.set_ext_click_area(40)
+ # if each["enabled"]:
+ # _btn_switch.add_state(lv.STATE.CHECKED)
+ # else:
+ # _btn_switch.clear_state(lv.STATE.CHECKED)
+ count+=1
+ if count == 0:
+ no_add_alarm_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ no_add_alarm.clear_flag(lv.obj.FLAG.HIDDEN)
+ self.alarm_show_list.add_flag(lv.obj.FLAG.HIDDEN)
+ else:
+ no_add_alarm_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ no_add_alarm.clear_flag(lv.obj.FLAG.HIDDEN)
+ self.alarm_show_list.add_flag(lv.obj.FLAG.HIDDEN)
+ else:
+ no_add_alarm_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ no_add_alarm.clear_flag(lv.obj.FLAG.HIDDEN)
+ self.alarm_show_list.add_flag(lv.obj.FLAG.HIDDEN)
+
+ def edit_alarm(self, e):#暂时屏蔽
+ return
+ idx = int(e.get_target().get_child(0).get_text())
+ print("edit!!!!!!!!!!!!:",idx)
+ clock_info = self.clock_list[idx]
+ clock_info["idx"] = idx
+
+ EventMesh.publish("load_screen", {"screen": "new_edit_clk","meta": clock_info})
+
+ def add_alarm_btn(self, e):
+
+ if len(self.clock_list) >= 3:
+ return
+ print("!!!!!!!!!!!!!!!!!------")
+ EventMesh.publish("add_alarm")
+ self.alarm_draw_btn()
+
+ # def switch_event_cb(self, e):
+ # obj = e.get_target()
+ # idx = int(e.get_target().get_parent().get_child(0).get_text())
+ # clock_info = self.clock_list[idx]
+ # print("修改闹钟开关:",self.clock_list[idx])
+ # clock_info["idx"] = idx
+ # if obj.has_state(lv.STATE.CHECKED):
+ # print("ON ~~~")
+ # clock_info["enabled"] = True
+ # else:
+ # print("OFF ~~~")
+ # clock_info["enabled"] = False
+ # EventMesh.publish("push_clock_info", clock_info)
+ # EventMesh.publish("set_rtc_alarm")
+
+ # print("sw_event_cb ~~~")
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+class NewEditClk(Screen):
+ NAME = "new_edit_clk"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = clk_edit_screen
+ clk_edit_weekday.add_event_cb(lambda e: EventMesh.callback_wrapper(self.edit_weekday(e)), lv.EVENT.CLICKED, None)
+ clk_edit_time.add_event_cb(lambda e: EventMesh.callback_wrapper(self.edit_time(e)), lv.EVENT.CLICKED, None)
+ clk_delete_alarm.add_event_cb(lambda e: EventMesh.callback_wrapper(self.delete_alarm(e)), lv.EVENT.CLICKED, None)
+
+ def initialization(self):
+ print("hahahahh",self.meta_info["idx"])
+
+ def delete_alarm(self, e):
+ EventMesh.publish("remove_alarm",self.meta_info)
+
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+
+ def edit_weekday(self,e):
+ self.load_screen(e, {"screen": "clk_period",
+ "meta": self.meta_info})
+
+ def edit_time(self,e):
+ self.load_screen(e, {"screen": "clk_time",
+ "meta": self.meta_info})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+class CLKTimeScreen(Screen):
+ NAME = "clk_time"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = clk_time_screen
+ # alarm_ok.add_event_cb(lambda e: self.handler(e), lv.EVENT.PRESSED, None)
+
+ def initialization(self):
+ roll_1_v = self.meta_info["hour"]
+ roll_2_v = self.meta_info["minute"]
+
+ clk_time_roller_1.set_selected(int(roll_1_v), lv.ANIM.ON)
+ clk_time_roller_2.set_selected(int(roll_2_v), lv.ANIM.ON)
+
+ def handler(self, e):
+ option_1 = " " * 10
+ option_2 = " " * 10
+ clk_time_roller_2.get_selected_str(option_2, len(option_2))
+ clk_time_roller_1.get_selected_str(option_1, len(option_1))
+ option_1_strip = option_1.strip()[:2]
+ option_2_strip = option_2.strip()[:2]
+ print("option_1_strip = {} option_2_strip = {}".format(option_1_strip, option_2_strip))
+ self.meta_info["hour"] = int(option_1_strip)
+ self.meta_info["minute"] = int(option_2_strip)
+ EventMesh.publish("push_clock_info", self.meta_info)
+
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+class ClkPeriod(Screen):
+ NAME = "clk_period"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = clk_repeat_screen
+ self.choice_list=[]
+ self.alarm_info={}
+ self.clk_switch_list = [
+ clk_repeat_switch6,
+ clk_repeat_switch,
+ clk_repeat_switch1,
+ clk_repeat_switch2,
+ clk_repeat_switch3,
+ clk_repeat_switch4,
+ clk_repeat_switch5,
+
+ ]
+
+ clk_repeat_switch.add_event_cb(lambda e: EventMesh.callback_wrapper(self.save_choice(e,1)), lv.EVENT.VALUE_CHANGED, None)
+ clk_repeat_switch1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.save_choice(e,2)), lv.EVENT.VALUE_CHANGED, None)
+ clk_repeat_switch2.add_event_cb(lambda e: EventMesh.callback_wrapper(self.save_choice(e,3)), lv.EVENT.VALUE_CHANGED, None)
+ clk_repeat_switch3.add_event_cb(lambda e: EventMesh.callback_wrapper(self.save_choice(e,4)), lv.EVENT.VALUE_CHANGED, None)
+ clk_repeat_switch4.add_event_cb(lambda e: EventMesh.callback_wrapper(self.save_choice(e,5)), lv.EVENT.VALUE_CHANGED, None)
+ clk_repeat_switch5.add_event_cb(lambda e: EventMesh.callback_wrapper(self.save_choice(e,6)), lv.EVENT.VALUE_CHANGED, None)
+ clk_repeat_switch6.add_event_cb(lambda e: EventMesh.callback_wrapper(self.save_choice(e,0)), lv.EVENT.VALUE_CHANGED, None)
+
+ def initialization(self):
+ self.choice_list = self.meta_info["days"]
+ self.alarm_info = self.meta_info
+ print("初始化:{},{}".format(self.alarm_info,self.choice_list))
+
+
+ for i in range(0,6):
+ if i in self.choice_list:
+ self.clk_switch_list[i].add_state(lv.STATE.CHECKED)
+
+ else:
+ self.clk_switch_list[i].clear_state(lv.STATE.CHECKED)
+
+
+ def save_choice(self,e,i):
+ if i in self.choice_list:
+ self.clk_switch_list[i].clear_state(lv.STATE.CHECKED)
+ self.choice_list.remove(i)
+ print("here1-----",self.choice_list,i)
+
+ else:
+ self.clk_switch_list[i].add_state(lv.STATE.CHECKED)
+ self.choice_list.append(i)
+ print("here2-----",self.choice_list,i)
+
+ print("here-----",self.choice_list)
+ self.alarm_info["days"] = self.choice_list
+
+ print("编辑星期:{}".format(self.alarm_info))
+ if self.alarm_info["days"] == []:
+ self.alarm_info["repeart"] = 1
+ else:
+ num = self.alarm_info["days"]
+ if len(num) >= 7:
+ self.alarm_info["repeart"] = 2
+ else:
+ self.alarm_info["repeart"] = 3
+
+ EventMesh.publish("push_clock_info", self.alarm_info)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
--- /dev/null
+import osTimer
+import lvgl as lv
+import EventMesh
+import osTimer
+import constants
+import ujson
+import ql_fs
+import audio
+from machine import Pin
+from ui import style_screen,style_font_youyuan_20,style_btn,style_img,Screen,style_contact_btn
+import audio
+import utime
+import ALIPAY
+from misc import Power
+factorymode_cont_y = 0
+factorymode_screen = lv.obj()
+print("factorymode_screen")
+factorymode_screen.center()
+factorymode_screen.set_size(240, 320)
+factorymode_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+factorymode_title = lv.label(factorymode_screen)
+factorymode_title.set_pos(0, 10)
+factorymode_title.set_size(240, 40)
+factorymode_title.set_text("-工厂模式-")
+factorymode_title.set_long_mode(lv.label.LONG.WRAP)
+factorymode_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+factorymode_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+factorymode_cont_style = lv.style_t()
+factorymode_cont_style.init()
+factorymode_cont_style.set_radius(0)
+factorymode_cont_style.set_bg_color(lv.color_make(0x00, 0x00, 0x00))
+factorymode_cont_style.set_bg_grad_color(lv.color_make(0x00, 0x00, 0x00))
+factorymode_cont_style.set_bg_grad_dir(lv.GRAD_DIR.VER)
+factorymode_cont_style.set_bg_opa(255)
+factorymode_cont_style.set_border_width(0)
+factorymode_cont_style.set_pad_left(0)
+factorymode_cont_style.set_pad_right(0)
+factorymode_cont_style.set_pad_top(0)
+factorymode_cont_style.set_pad_bottom(0)
+
+factorymode_cont = lv.obj(factorymode_screen)
+factorymode_cont.set_pos(0, 50)
+factorymode_cont.set_size(240, 270)
+factorymode_cont.add_style(factorymode_cont_style,lv.PART.MAIN | lv.STATE.DEFAULT)
+
+factorymode_location = lv.btn(factorymode_cont)
+factorymode_location.set_pos(0, factorymode_cont_y)
+factorymode_location.set_size(240, 60)
+factorymode_location_label = lv.label(factorymode_location)
+factorymode_location_label.set_text("定位测试")
+factorymode_location.set_style_pad_all(0, lv.STATE.DEFAULT)
+factorymode_location_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+factorymode_location_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+factorymode_location_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+factorymode_location.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+factorymode_cont_y+=60
+factorymode_bat_test = lv.btn(factorymode_cont)
+factorymode_bat_test.set_pos(0, factorymode_cont_y)
+factorymode_bat_test.set_size(240, 60)
+factorymode_bat_test_label = lv.label(factorymode_bat_test)
+factorymode_bat_test_label.set_text("电池测试")
+factorymode_bat_test.set_style_pad_all(0, lv.STATE.DEFAULT)
+factorymode_bat_test_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+factorymode_bat_test_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+factorymode_bat_test_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+factorymode_bat_test.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)
+factorymode_alipay_init.set_size(240, 60)
+factorymode_alipay_init_label = lv.label(factorymode_alipay_init)
+factorymode_alipay_init_label.set_text("支付宝初始化")
+factorymode_alipay_init.set_style_pad_all(0, lv.STATE.DEFAULT)
+factorymode_alipay_init_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+factorymode_alipay_init_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+factorymode_alipay_init_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+factorymode_alipay_init.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+class FactoryModeScreen(Screen):
+ NAME = "factorymode"
+ def __init__(self):
+ super().__init__()
+ self.meta = factorymode_screen
+ factorymode_location.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "FactoryModeLocation"})), lv.EVENT.CLICKED, None)
+ 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)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+FactoryModeBatTest_screen = lv.obj()
+FactoryModeBatTest_screen.center()
+FactoryModeBatTest_screen.set_size(240, 320)
+FactoryModeBatTest_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+FactoryModeBatTest_label = lv.label(FactoryModeBatTest_screen)
+FactoryModeBatTest_label.set_text("Vbat:0V")
+FactoryModeBatTest_label.set_size(240, 100)
+FactoryModeBatTest_label.set_pos(50, 100)
+FactoryModeBatTest_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+FactoryModeBatTest_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+class FactoryModeBatTestScreen(Screen):
+ NAME = "FactoryModeBatTest"
+ def __init__(self):
+ super().__init__()
+ self.meta = FactoryModeBatTest_screen
+ self.BatTest_timer = osTimer()
+
+ def initialization(self):
+ print("FactoryModeBatTestScreen")
+ self.BatTest_timer.start(1000,1,self.BatTest_timer_cb)
+
+ def post_processor_after_initialization(self):
+ pass
+
+ def BatTest_timer_cb(self,e):
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ temp = Power.getVbatt()
+ FactoryModeBatTest_label.set_text("Vbat:{}V".format(temp))
+
+ def Close(self):
+ self.BatTest_timer.stop()
+ 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"})
+
+
+FactoryModeAlipayInit_screen = lv.obj()
+FactoryModeAlipayInit_screen.center()
+FactoryModeAlipayInit_screen.set_size(240, 320)
+FactoryModeAlipayInit_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+FactoryModeAlipayInit_label = lv.label(FactoryModeAlipayInit_screen)
+FactoryModeAlipayInit_label.set_text("支付宝初始化成功")
+FactoryModeAlipayInit_label.set_size(240, 100)
+FactoryModeAlipayInit_label.set_pos(50, 100)
+FactoryModeAlipayInit_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+FactoryModeAlipayInit_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+import atcmd
+
+class FactoryModeAlipayInitScreen(Screen):
+ NAME = "FactoryModeAlipayInit"
+ def __init__(self):
+ super().__init__()
+ self.meta = FactoryModeAlipayInit_screen
+
+ def initialization(self):
+ ret =EventMesh.publish("id2_clean_data")
+ print("id2_clean_data:ret:{}".format(ret))
+
+ def post_processor_after_initialization(self):
+ resp=bytearray(50)
+ atcmd.sendSync('AT+RSTSET\r\n',resp,'',200) #清nv
+ print("AT+RSTSET:{}".format(resp))
+ utime.sleep(5)
+ Power.powerRestart()
+ def Close(self):
+ 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"})
+
+FactoryModeLocation_screen = lv.obj()
+print("FactoryModeLocation_screen")
+FactoryModeLocation_screen.center()
+FactoryModeLocation_screen.set_size(240, 320)
+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(240, 100)
+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, 60)
+FactoryModeLocation_CALL_label.set_pos(0, 100)
+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(240, 200)
+FactoryModeLocation_GNSS_label.set_pos(0, 160)
+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)
+
+class FactoryModeLocationScreen(Screen):
+ NAME = "FactoryModeLocation"
+ def __init__(self):
+ super().__init__()
+ self.meta = FactoryModeLocation_screen
+ EventMesh.subscribe("PUSH_LOCATION_DATA",self.GET_LOCATION_DATA)
+ self.timer_FactoryModeLocation = osTimer()
+
+ def initialization(self):
+ FactoryModeLocation_GNSS_label.set_text("GNSS:\n")
+ FactoryModeLocation_WIFI_label.set_text("WIFI:")
+ FactoryModeLocation_CALL_label.set_text("CALL:")
+ self.timer_FactoryModeLocation.start(1000, 1, self.timer_FactoryModeLocation_cb)
+
+ def post_processor_after_initialization(self):
+ #utime.sleep_ms(1000)
+ EventMesh.publish(constants.EVENT.START_LOCATION, 1) #测试模式
+
+ def timer_FactoryModeLocation_cb(self, *args, **kwargs):
+ 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]))
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ if msg[1] != [] : #WIFI
+ WIFI_len = len(msg[1][1])
+ WIFI_DATA = "WIFI:"
+ 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)
+ 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]))
+ def Close(self):
+ EventMesh.publish(constants.EVENT.CLOSE_LOCATION)
+ self.timer_FactoryModeLocation.stop()
+
+ 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"})
\ No newline at end of file
--- /dev/null
+import osTimer
+import lvgl as lv
+import EventMesh
+import osTimer
+import constants
+import ujson
+import ql_fs
+import audio
+from machine import Pin
+from ui import style_font_youyuan_20,style_screen,Screen,style_font_youyuan_20_black,style_img
+import audio
+from machine import Pin
+import utime
+import _thread
+from protocol import ProtoCol,UnicodeHexStr_To_Utf8Str
+import usys
+import log
+Testlog = log.getLogger("WechatLog")
+log.set_output(usys.stdout)
+is_appwechat_log = 0
+def Wechat_log(str):
+ if(is_appwechat_log == 1) :
+ Testlog.info(str)
+
+style_wechat_r_btn = lv.style_t()
+style_wechat_r_btn.init()
+style_wechat_r_btn.set_bg_color(lv.color_make(0x00, 0xff, 0x2a))
+style_wechat_r_btn.set_border_width(0)
+style_wechat_r_btn.set_shadow_opa(0)
+
+
+style_wechat_s_btn = lv.style_t()
+style_wechat_s_btn.init()
+style_wechat_s_btn.set_bg_color(lv.color_make(0xff, 0xff, 0xff))
+style_wechat_s_btn.set_border_width(0)
+style_wechat_s_btn.set_shadow_opa(0)
+
+style_common_bg_rect_btn_pressed = lv.style_t()
+style_common_bg_rect_btn_pressed.init()
+style_common_bg_rect_btn_pressed.set_bg_color(lv.color_make(0x1E, 0x26, 0xff))
+style_common_bg_rect_btn_pressed.set_bg_opa(100)
+style_common_bg_rect_btn_pressed.set_border_width(0)
+style_common_bg_rect_btn_pressed.set_shadow_opa(0)
+
+style_wechat_btn = lv.style_t()
+style_wechat_btn.init()
+style_wechat_btn.set_bg_color(lv.color_make(0x1E, 0x26, 0xff))
+style_wechat_btn.set_border_width(0)
+style_wechat_btn.set_shadow_opa(0)
+
+# -------------------------------------------wechat screen----------------------------------------------------------
+wechat_screen = lv.obj()
+print("wechat_screen")
+wechat_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+wechat_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+wechat_screen_list_screen = lv.obj(wechat_screen)
+wechat_screen_list_screen.set_pos(0, 0)
+wechat_screen_list_screen.set_size(240, 260)
+wechat_screen_list_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+wechat_screen_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+wechat_press_btn = lv.btn(wechat_screen)
+wechat_press_btn.set_pos(10, 260)
+wechat_press_btn.set_size(220, 56)
+wechat_press_btn.add_style(style_wechat_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+wechat_press_btn.add_style(style_common_bg_rect_btn_pressed, lv.PART.MAIN | lv.STATE.PRESSED)
+wechat_press_btn.set_style_radius(30,0)
+
+wechat_press_label = lv.label(wechat_screen)
+wechat_press_label.set_text("请按住说话")
+wechat_press_label.set_size(240, 56)
+wechat_press_label.set_pos(0,278)
+wechat_press_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+wechat_press_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+wechat_label = lv.label(wechat_screen_list_screen)
+wechat_label.set_pos(0, 140)
+wechat_label.set_size(240, 40)
+wechat_label.set_long_mode(lv.label.LONG.WRAP)
+wechat_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+wechat_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+wechat_press_label_countdown = lv.label(wechat_screen_list_screen)
+wechat_press_label_countdown.set_pos(0, 100)
+wechat_press_label_countdown.set_size(240, 40)
+wechat_press_label_countdown.set_text(" ")
+wechat_press_label_countdown.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+wechat_press_label_countdown.set_long_mode(lv.label.LONG.WRAP)
+wechat_press_label_countdown.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+
+
+
+
+
+class WechatScreen(Screen):
+ NAME = "wechat"
+
+ def __init__(self):
+ super().__init__()
+ self.MXA_MSG = 10
+ self.wechat_recode_list = {}
+ self.wechat_num = 0
+ self.read_data = {}
+ self.volum_size = 8
+ self.msg_tmp = ""
+ check_txt = ql_fs.path_exists("/usr/static/storage_file/wechat_record.json")
+ if check_txt == True :
+ with open("/usr/static/storage_file/wechat_record.json","r") as fd:#音频文件编号
+ self.wechat_recode_list = ujson.load(fd)
+ if not self.wechat_recode_list:
+ self.wechat_recode_list = {"num":0}
+ self.wechat_num = 0
+ else:
+ b = str("num") in self.wechat_recode_list.keys()
+ if b == True:
+ self.wechat_num = self.wechat_recode_list["num"]
+ else :
+ self.wechat_recode_list = {"num":0}
+ with open("/usr/static/storage_file/wechat_record.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.wechat_recode_list,fd)
+ # if self.wechat_num != 0:
+ # with open("/usr/static/storage_file/wechat_record.json","r",encoding="utf-8") as fd:#音频文件记录
+ # self.wechat_recode_list = ujson.load(fd)#读取每一个amr音频文件的时长ui_setting.py
+
+ self.record_test = audio.Record()
+ import audio
+ from machine import Pin
+ self.aud = audio.Audio(0)
+ self.aud.set_pa(Pin.GPIO29)
+ check_volum = ql_fs.path_exists("/usr/static/storage_file/config.json")
+ if check_volum == True :
+ with open("/usr/static/storage_file/config.json","r") as fd:#音频文件编号
+ self.read_data = ujson.load(fd)
+ if self.read_data != {}:
+ b = str("volum") in self.read_data.keys()
+ if b == True:
+ self.volum_size = self.read_data["volum"]
+ else:
+ self.volum_size = 8
+ else:
+ self.volum_size = 8
+ else:
+ self.volum_size = 8
+ self.aud.setVolume(11)
+ #16点42分
+
+ wechat_press_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.talking_cb(e)),
+ lv.EVENT.LONG_PRESSED, None)
+ wechat_press_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.sending_cb(e)),
+ lv.EVENT.RELEASED, None)
+ self.timer = osTimer()
+ self.second_timer = osTimer()
+ self.play_timer = osTimer()
+
+
+
+ self.startY = 0
+ self.startWidth = 0
+ self.check_json = 0
+ self.wechat_list = lv.obj(wechat_screen_list_screen)
+ self.wechat_list.set_pos(0, 0)
+ self.wechat_list.set_size(240, 261)
+ self.wechat_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ self.wechat_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ #建立控件
+ self.wechat_list_dict = []
+ for i in range(self.MXA_MSG):
+ wechat_btn = lv.btn(self.wechat_list)
+ wechat_btn.add_style(style_wechat_s_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+ _btn_label1 = lv.label(wechat_btn)
+ _btn_label1.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+ _btn_label2 = lv.label(wechat_btn)
+ _btn_img = lv.img(wechat_btn)
+ wechat_btn.add_flag(lv.obj.FLAG.HIDDEN)
+ wechat_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+ wechat_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.play_label_cb(e)),
+ lv.EVENT.CLICKED, None)
+ self.wechat_list_dict.append({"num":i,"wechat_btn":wechat_btn,"_btn_label1":_btn_label1,"_btn_label2":_btn_label2,"_btn_img":_btn_img})
+
+ EventMesh.subscribe("wechat_updata_list_show", self.wechat_updata_list_show)
+ # EventMesh.subscribe("get_wechat_data", self.get_wechat_data)
+ # EventMesh.subscribe("set_wechat_data", self.set_wechat_data)
+
+ EventMesh.subscribe("get_aduio_state", self.get_aduio_state)
+ EventMesh.subscribe("get_send_state", self.get_send_state)
+
+ self.countdown = 1
+ self.count_img = 0
+ self.paay_btn_count = 0
+ self.paay_btn_old_count = 99999
+ self.play_text = None
+ self.play_sec = 0
+ self.sec_num = 0
+ self.countdown_old = 0
+ self.press_state = 0
+ self.ble_send = 0
+ self.wechat_show = 0
+ self.wechat_show_list = 0
+ #self.old_num = self.wechat_num
+
+
+ def initialization(self):
+ Wechat_log("initialization1")
+ self.aud.setVolume(11)#设置最大声录音
+ wechat_label.set_text(" ")
+ wechat_label.add_flag(lv.obj.FLAG.HIDDEN)
+ wechat_press_label_countdown.add_flag(lv.obj.FLAG.HIDDEN)
+ self.wechat_list.clear_flag(lv.obj.FLAG.HIDDEN)
+ #读取json文件中的字典放到self.phonebook中
+ #创建btn
+ #self.updata_list_show(1)
+ EventMesh.publish("publish_message_event_ui",{"func":self.updata_list_show,"data":2})
+ utime.sleep_ms(50)
+ EventMesh.publish("publish_message_event_ui",{"func":self.updata_list_show,"data":0})
+ self.count_img = 0
+ self.play_sec = 0
+ self.ble_send = 0
+ # utime.sleep(1)
+ # for j in range( 200):
+ # self.updata_list_show(1)
+ Wechat_log("initialization2")
+
+ def get_wechat_data(self,event, msg):
+ return [self.MXA_MSG ,self.wechat_recode_list]
+
+ def set_wechat_data(self, event, msg):
+ Wechat_log("set_wechat_data1")
+ self.MXA_MSG = msg[0]
+ self.wechat_recode_list = msg[1]
+ self.wechat_num = self.wechat_recode_list["num"]
+ with open("/usr/static/storage_file/wechat_record.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.wechat_recode_list,fd)
+ #写编号
+ Wechat_log("set_wechat_data2:{} ".format(self.wechat_num))
+
+
+ def reciving(self,e):
+ Wechat_log("reciving1")
+ #self.updata_list_show(0)
+ EventMesh.publish("publish_message_event_ui",{"func":self.updata_list_show,"data":0})
+ Wechat_log("reciving2")
+ #接收到新的消息,刷新界面
+ def wechat_updata_list_show(self, event, msg):
+ Wechat_log("wechat_updata_list_show1")
+ if (self.wechat_list.has_flag(lv.obj.FLAG.HIDDEN)) == False:
+ # wechat_label.clear_flag(lv.obj.FLAG.HIDDEN)
+ # wechat_label.set_text("接收中")
+ #self.updata_list_show(2)
+ EventMesh.publish("publish_message_event_ui",{"func":self.updata_list_show,"data":2})
+ self.timer.start(200, 0, self.reciving)
+ self.paay_btn_count -= 1
+ # if self.paay_btn_count <= 0:
+ # self.paay_btn_count = 0
+ if self.paay_btn_count >= 0:
+ self.paay_btn_old_count = self.paay_btn_count
+ Wechat_log("wechat_updata_list_show2")
+ # def handle_message_event(self,data):
+ # if data[0] == "updata_list_show":
+ # self.updata_list_show(data[1])
+ # return 1
+
+ #index=0 不改变列表控件显示到lcd上;index=2只更新列表控件,不显示;index=1更新列表并显示控件
+ def updata_list_show(self,index):
+ Wechat_log("updata_list_show1")
+ global wechat_screen_list_screen
+ if self.press_state != 1:
+ if self.wechat_num != 0:
+ if index == 0:
+ self.wechat_list.clear_flag(lv.obj.FLAG.HIDDEN)
+ wechat_label.add_flag(lv.obj.FLAG.HIDDEN)
+ elif index == 2 or index == 1:
+
+ #读取json文件中的键作为label文本;
+ Wechat_log("self.wechat_recode_list:{}".format(self.wechat_recode_list))
+
+ if index == 2:
+ self.wechat_list.add_flag(lv.obj.FLAG.HIDDEN)
+ j = 1
+ if len(self.wechat_recode_list)-1 == self.MXA_MSG:
+ j = self.wechat_num+1
+ wechat_btn_end = 0
+ for i in range(self.MXA_MSG):
+ if j > self.MXA_MSG:
+ j = 1
+ key = "%02d"%(j)
+ if j > len(self.wechat_recode_list) -1:
+ self.wechat_list_dict[i]["wechat_btn"].add_flag(lv.obj.FLAG.HIDDEN)
+ continue
+ j+=1
+
+ #Wechat_log("wechat_list_dict:num:{}".format(self.wechat_list_dict[i]["num"]))
+ value = self.wechat_recode_list[key]
+
+ self.startY = 64*i
+
+ if value.find("S:") != -1 or value.find("R:") != -1:
+ self.msg_tmp = value[2:]
+ self.msg_tmp = int(self.msg_tmp)
+ self.startWidth = 55+self.msg_tmp*10
+
+ elif value.find("T:") != -1:#文字显示
+ self.msg_tmp = value[2:]
+ self.startWidth = 230
+
+ #wechat_btn = lv.btn(self.wechat_list)
+ # if value.find("R:") != -1:self.wechat_list_dict[i]
+
+ if value.find("R:") != -1 or value.find("T:") != -1 :#显示文字:
+ if value.find("T:") != -1:
+ self.wechat_list_dict[i]["wechat_btn"].set_size(self.startWidth,62)
+ else:
+ self.wechat_list_dict[i]["wechat_btn"].set_size(self.startWidth,62)
+
+ self.wechat_list_dict[i]["wechat_btn"].set_pos(10,self.startY )
+ #self.wechat_list_dict[i]["wechat_btn"].add_style(style_wechat_s_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.wechat_list_dict[i]["wechat_btn"].set_style_bg_color(lv.color_make(0xff, 0xff, 0xff), lv.PART.MAIN | lv.STATE.DEFAULT)
+ elif value.find("S:") != -1 :
+ self.wechat_list_dict[i]["wechat_btn"].set_size(self.startWidth,62)
+ self.wechat_list_dict[i]["wechat_btn"].set_pos(230-self.startWidth,self.startY )
+ #for k in range(100):
+ #self.wechat_list_dict[i]["wechat_btn"].add_style(style_wechat_r_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.wechat_list_dict[i]["wechat_btn"].set_style_bg_color(lv.color_make(0x00, 0xff, 0x2a), lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ #_btn_label1 = lv.label(wechat_btn)
+ if value.find("R:") != -1:
+ self.wechat_list_dict[i]["_btn_label1"].set_size(0, 0)
+ self.wechat_list_dict[i]["_btn_label1"].set_pos(35, 8)
+ self.wechat_list_dict[i]["_btn_label1"].set_text(str(self.msg_tmp)+'\"')
+
+ elif value.find("S:") != -1:
+ self.wechat_list_dict[i]["_btn_label1"].set_size(0, 0)
+ self.wechat_list_dict[i]["_btn_label1"].set_pos(self.startWidth-78, 8)
+ self.wechat_list_dict[i]["_btn_label1"].set_text(str(self.msg_tmp)+'\"')
+ elif value.find("T:") != -1:
+ self.wechat_list_dict[i]["_btn_label1"].set_size(216, 66)
+ self.wechat_list_dict[i]["_btn_label1"].set_pos(0, 0)
+ self.wechat_list_dict[i]["_btn_label1"].set_text(str(self.msg_tmp))
+ self.wechat_list_dict[i]["_btn_label1"].set_long_mode(lv.label.LONG.DOT)
+ #self.wechat_list_dict[i]["_btn_label1"].add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+ #_btn_label2 = lv.label(wechat_btn)
+ self.wechat_list_dict[i]["_btn_label2"].set_size(0, 0)
+ if value.find("R:") != -1:
+ self.wechat_list_dict[i]["_btn_label2"].set_text('R:'+key)
+ elif value.find("S:") != -1:
+ self.wechat_list_dict[i]["_btn_label2"].set_text('S:'+key)
+ elif value.find("T:") != -1:
+ self.wechat_list_dict[i]["_btn_label2"].set_text('T:'+key)
+ if value.find("R:") != -1 or value.find("S:") != -1:
+ #_btn_img = lv.img(wechat_btn)
+ self.wechat_list_dict[i]["_btn_img"].set_size(30, 30)
+ if value.find("R:") != -1:
+ self.wechat_list_dict[i]["_btn_img"].set_pos(5, 0)
+ self.wechat_list_dict[i]["_btn_img"].set_src("U:/static/APP/wechat/R_3.png")
+ elif value.find("S:") != -1:
+ self.wechat_list_dict[i]["_btn_img"].set_pos(self.startWidth-50, 0)
+ self.wechat_list_dict[i]["_btn_img"].set_src("U:/static/APP/wechat/S_3.png")
+ #self.wechat_list_dict[i]["_btn_img"].add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.wechat_list_dict[i]["_btn_img"].clear_flag(lv.obj.FLAG.HIDDEN)
+ else :
+ self.wechat_list_dict[i]["_btn_img"].add_flag(lv.obj.FLAG.HIDDEN)
+ self.wechat_list_dict[i]["wechat_btn"].clear_flag(lv.obj.FLAG.HIDDEN)
+
+ wechat_btn_end = i
+ self.wechat_list_dict[wechat_btn_end]["wechat_btn"].scroll_to_view(lv.ANIM.OFF)
+
+ # bottom_btn1 = self.wechat_list.get_child(-1)
+ # bottom_btn1.scroll_to_view(lv.ANIM.ON)
+ Wechat_log("updata_list_show2")
+
+ def talking_cb(self,e):
+ Wechat_log("talking_cb1")
+ EventMesh.publish("publish_message_event_ui",{"func":self.talking,"data":e})
+ Wechat_log("talking_cb2")
+ #按下录音
+ def talking(self,e):
+ Wechat_log("talking1")
+ self.play_timer.stop()
+ self.aud.stop()
+ self.wechat_list.add_flag(lv.obj.FLAG.HIDDEN)#隐藏列表选项方框
+ self.countdown = 1
+ wechat_label.clear_flag(lv.obj.FLAG.HIDDEN)
+ wechat_label.set_text("松开发送")
+ wechat_press_label_countdown.clear_flag(lv.obj.FLAG.HIDDEN)
+ wechat_press_label_countdown.set_text("{}S".format(str(self.countdown)))
+
+
+ #self.updata_list_show(2)#不需要显示语音列表
+ #按下说话
+ if self.wechat_num >= self.MXA_MSG:
+ self.wechat_num = 0
+ self.wechat_num += 1
+ self.wechat_show = self.wechat_num
+ self.wechat_recode_list["num"] = self.wechat_num
+ Wechat_log("talking1.0")
+ self.record_test.start("/usr/static/storage_file/{}.amr".format(self.wechat_num),16)
+ self.second_timer.start(1000, 1, self.reduce_second)
+ self.press_state = 1
+ self.ble_send = 1
+ #松开发送
+ Wechat_log("talking2")
+
+
+ def sending_cb(self,e):
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#有卡时触发sos报警 无卡时自动关机
+ Wechat_log("sending_cb1")
+ EventMesh.publish("publish_message_event_ui",{"func":self.sending,"data":e})
+ #self.sending(e)
+ Wechat_log("sending_cb2")
+ else:
+ EventMesh.publish("load_screen", {"screen": "no_sim_popup_screen"})
+
+ #松手0.2秒后显示
+ def hide_label(self,*args):
+ Wechat_log("hide_label1")
+ if self.ble_send != 1:
+ wechat_label.add_flag(lv.obj.FLAG.HIDDEN)
+ wechat_label.set_text(" ")
+ #self.updata_list_show(0)
+ EventMesh.publish("publish_message_event_ui",{"func":self.updata_list_show,"data":0})
+ Wechat_log("hide_label2")
+ #松开发送
+ def sending(self,e):
+ Wechat_log("sending1")
+ if self.press_state == 1:
+ # wechat_label.clear_flag(lv.obj.FLAG.HIDDEN)
+ # wechat_label.set_text("发送中")
+ wechat_press_label_countdown.add_flag(lv.obj.FLAG.HIDDEN)
+ wechat_press_label_countdown.set_text(" ")
+
+ if self.countdown >= 15:
+ self.countdown = 15
+ #松开发送数据
+ #num.txt为记录的最后编号
+ #record.json文件里的json元素为记录编号,json键值:"S:"开头为发送的语音,"R:"为接收的语音,后面跟随语音长度;"T:"为接收的文字信息。
+
+ #写序号
+ self.record_test.stop() #停止錄音
+ self.second_timer.stop() #停止计时器
+ self.countdown_old = self.countdown
+ # Wechat_log("self.countdown :{} self.wechat_num:{} self.wechat_recode_list:{} self.wechat_show:{}".format(self.countdown,self.wechat_num,self.wechat_recode_list,self.wechat_show))
+ self.wechat_recode_list["%02d"%(self.wechat_show)] = "S:{}".format(str(self.countdown))
+ self.wechat_recode_list["num"] = self.wechat_show
+
+ #读音频amr二进制数据
+
+ #修改或添加词典键值
+ self.press_state = 0
+ self.ble_send = 0
+ ##隐藏显示文本 显示列表显示框
+ EventMesh.publish("publish_message_event_ui",{"func":self.updata_list_show,"data":2})
+ self.timer.start(200, 0, self.hide_label)
+ with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:
+ ujson.dump(self.wechat_recode_list,fd)
+ Wechat_log("send wechat data!!!!!!!!!!!!!!!!!!!!!")
+ path = "/usr/static/storage_file/{}.amr".format(self.wechat_show)
+ with open(path,"rb") as fd:
+ buf = bytearray(ql_fs.path_getsize(path))
+ fd.readinto(buf)
+ senddata = [self.countdown_old,buf]
+ EventMesh.publish(constants.PROTOCOL.TK_SEND,senddata)
+
+
+ Wechat_log("sending2")
+
+ def play_img_cb(self,*args):
+ Wechat_log("play_img_cb1")
+ EventMesh.publish("publish_message_event_ui",{"func":self.play_img,"data":args})
+ Wechat_log("play_img_cb2")
+ def play_img(self,*args):
+ Wechat_log("play_img1")
+ if self.paay_btn_count < 0 or self.paay_btn_count>= self.MXA_MSG:
+ self.play_timer.stop()
+ return
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ # Wechat_log("self.count_img :{} self.play_text:{}".format(self.count_img,self.play_text))
+ self.count_img+=1
+ if self.count_img > 3:
+ self.count_img = 1
+
+ text = self.wechat_list_dict[self.paay_btn_count]["_btn_label2"].get_text()
+ self.play_text = text[0:2] #区分左右喇叭动画显示 "R":左边 "S:"右边 "T:":左边
+ if self.play_text == "R:":
+ self.wechat_list_dict[self.paay_btn_count]["_btn_img"].set_src("U:/static/APP/wechat/R_{}.png".format(self.count_img))
+ elif self.play_text == "S:":
+ self.wechat_list_dict[self.paay_btn_count]["_btn_img"].set_src("U:/static/APP/wechat/S_{}.png".format(self.count_img))
+
+ self.sec_num+=1
+ if self.sec_num % 2 == 0:
+ # Wechat_log("self.play_sec:{}".format(self.play_sec))
+ if self.play_sec > 0:
+ self.play_sec -= 1
+ if self.play_sec == 0:
+ self.play_timer.stop()
+ if self.play_text == "R:":
+ self.wechat_list_dict[self.paay_btn_count]["_btn_img"].set_src("U:/static/APP/wechat/R_3.png")
+ elif self.play_text == "S:":
+ self.wechat_list_dict[self.paay_btn_count]["_btn_img"].set_src("U:/static/APP/wechat/S_3.png")
+ get_play = EventMesh.publish("get_audio_state")
+ if get_play != None:
+ if get_play == 0:
+ self.play_timer.stop()
+ if self.play_text == "R:":
+ self.wechat_list_dict[self.paay_btn_count]["_btn_img"].set_src("U:/static/APP/wechat/R_3.png")
+ elif self.play_text == "S:":
+ self.wechat_list_dict[self.paay_btn_count]["_btn_img"].set_src("U:/static/APP/wechat/S_3.png")
+ Wechat_log("play_img2")
+ def play_label_cb(self,e): #lvgl按钮回调
+ Wechat_log("play_label_cb1")
+ #Wechat_log("play_label_cb.0:e:{}".format(e.get_code()))
+ paay_btn = e.get_target()
+ for i in range(self.MXA_MSG):
+ if(self.wechat_list_dict[i]["wechat_btn"] == paay_btn):
+ Wechat_log("play_label_cb:wechat_btn = e.get_target():i:{}".format(i))
+ self.paay_btn_count = i
+ break
+ EventMesh.publish("publish_message_event_ui",{"func":self.play_label,"data":paay_btn})#发到另外一个线程执行更改ui
+ Wechat_log("play_label_cb2")
+ #utime.sleep_ms(1000)
+ #点击播放
+ def play_label(self,play_btn):#另外一个线程实际执行的地方
+ Wechat_log("play_label1")
+ self.sec_num = 0
+ # Wechat_log("play_label self.play_text:{}".format(self.play_text))
+ if self.paay_btn_old_count <= self.MXA_MSG: #停止东画还原到3图标
+ text = self.wechat_list_dict[self.paay_btn_old_count]["_btn_label2"].get_text()
+ self.play_text = text[0:2]
+ if self.play_text == "R:":
+ self.wechat_list_dict[self.paay_btn_old_count]["_btn_img"].set_src("U:/static/APP/wechat/R_3.png")
+ elif self.play_text == "S:":
+ self.wechat_list_dict[self.paay_btn_old_count]["_btn_img"].set_src("U:/static/APP/wechat/S_3.png")
+
+ self.count_img = 0 #喇叭动画显示的数量
+
+
+ text = self.wechat_list_dict[self.paay_btn_count]["_btn_label2"].get_text()
+ self.play_text = text[0:2] #区分左右喇叭动画显示 "R":左边 "S:"右边 "T:":左边
+ Wechat_log("self.play_text2:{}".format(self.play_text))
+ play_img_s = self.wechat_list_dict[self.paay_btn_count]["_btn_label1"].get_text()
+ play_img_s = play_img_s.split('"')
+ play_img_s = play_img_s[0]#获取实际显示秒数 '"'前面实际的秒数
+
+ if self.play_text == "R:" or self.play_text == "S:":
+ if self.play_text == "R:":
+ self.play_sec = 15
+ else:
+ self.play_sec = int(play_img_s)
+
+ self.play_timer.start(500, 1, self.play_img_cb)
+ # Wechat_log("play_label self.count_img :{} self.play_text:{} play_img_s:{} self.play_sec:{}".format(self.count_img,self.play_text,play_img_s,self.play_sec))
+
+ num_amr = self.wechat_list_dict[self.paay_btn_count]["_btn_label2"].get_text()
+ num_amr = num_amr.split(':')
+ num_amr = num_amr[1]#获取实际秒数
+ i = int(num_amr)
+ # Wechat_log("num:{}".format(i))
+ if self.play_text == "R:" or self.play_text == "S:":#过滤掉文字显示 不需要播放音频文件
+ self.aud = audio.Audio(0)
+ self.aud.stop()#
+ self.aud.play(1, 1, '/usr/static/storage_file/{}.amr'.format(i)) #文件名前面要加上路径
+ self.paay_btn_old_count = self.paay_btn_count
+ Wechat_log("play_label2")
+
+ #获取是否在录音
+ def get_aduio_state(self, event, msg):
+ return self.press_state
+
+ def get_send_state(self, event, msg):
+ return self.ble_send
+
+
+ def Close(self):
+ Wechat_log("Close1")
+ self.play_timer.stop()
+ self.record_test.stop() #停止錄音
+ self.second_timer.stop() #停止计时器
+ self.aud.stop()
+ num = EventMesh.publish("get_volum_size")
+ if num == None:
+ num = 8
+ self.aud.setVolume(num)#恢复原始音量
+ Wechat_log("Close2")
+
+ def reduce_second(self,*args):
+ if self.countdown < 15:
+ self.countdown += 1
+ else:
+ self.countdown = 15
+ self.sending(0)
+
+ if self.countdown >= 15:
+ self.countdown = 15
+ wechat_press_label_countdown.set_text("{}S".format(str(self.countdown)))
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+#微聊弹窗
+
+wechat_popup_screen = lv.obj()
+print("wechat_popup_screen")
+wechat_popup_screen.center()
+wechat_popup_screen.set_size(240, 320)
+wechat_popup_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+wechat_popup_title = lv.label(wechat_popup_screen)
+wechat_popup_title.set_pos(0, 150)
+wechat_popup_title.set_size(240, 40)
+wechat_popup_title.set_text("你有新的微聊消息")
+wechat_popup_title.set_long_mode(lv.label.LONG.WRAP)
+wechat_popup_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+wechat_popup_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+class NewWechatPopupScreen(Screen):
+ NAME = "wechat_popup"
+ def __init__(self):
+ super().__init__()
+ self.meta = wechat_popup_screen
+ self.meta_type = "popup"
+ def done_left_to_right(self):
+ # EventMesh.publish("wechat_updata_list_show")
+ EventMesh.publish("return_prev_screen")
+
+ def done_right_to_left(self):
+ # EventMesh.publish("wechat_updata_list_show")
+ EventMesh.publish("return_prev_screen")
+
+ def done_bottom_to_top(self):
+ # EventMesh.publish("wechat_updata_list_show")
+ EventMesh.publish("return_prev_screen")
+
+ def done_top_to_bottom(self):
+ # EventMesh.publish("wechat_updata_list_show")
+ EventMesh.publish("return_prev_screen")
+
+ def done_return(self):
+ EventMesh.publish("return_prev_screen")
+ def done_click(self):
+ # EventMesh.publish("wechat_updata_list_show")
+ EventMesh.publish("load_screen", {"screen": "wechat"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null
+from common import Abstract
+import machine
+import osTimer
+from misc import PowerKey
+import EventMesh
+from machine import Pin
+from machine import ExtInt
+import constants
+import utime
+import audio
+import ql_fs
+import ujson
+import voiceCall
+from misc import Power
+from led import close_motor,red_green_light,green_light_fast,led_mode,open_led_red,close_led_red,open_led_green,close_led_green,close_led_white
+from machine import RTC
+from queue import Queue
+import _thread
+import usys
+
+
+audio_buf =['audio_audio_haixiu', 'R_ALARM_3', 'R_CALL_mp3', 'R_CHARGE_FULL', 'R_CHARGE_IN', 'R_CHARGE_OUT', 'R_HSENSOR_RESULT_FAILE', 'R_HSENSOR_RESULT_HR_TITLE', 'R_HSENSOR_RESULT_OK', 'R_HSENSOR_SPO2_TITLE', 'R_HSENSOR_TEMP_TITLE', 'R_NO_SET_SOS_DIAL', 'R_NO_SIM', 'R_POWER_OFF_1', 'R_READ_STEP_0', 'R_READ_STEP_1', 'R_READ_STEP_2', 'R_READ_STEP_3', 'R_READ_STEP_4', 'R_READ_TIME_0', 'R_READ_TIME_1', 'R_READ_TIME_2', 'R_READ_TIME_3', 'R_READ_TIME_4', 'R_READ_TIME_5', 'R_READ_TIME_6', 'R_READ_TIME_7', 'R_READ_TIME_8', 'R_READ_TIME_9', 'R_READ_TIME_MIN', 'R_READ_TIME_ZHENG', 'R_SIM_CONNECT', 'R_SIM_FAILE', 'R_SOS_ALERT', 'R_TSENSOR_RESULT_VALUE_DOT', 'R_UNREAD_WECHAT']
+class call:
+ CALL_OUT = 1
+ CALL_IN = 2
+ ON_CALL = 3
+
+
+class intervManager(Abstract):
+ def __init__(self):
+ self.timer = osTimer()
+
+ self.pwk_timer = osTimer()
+ self.aud = audio.Audio(0)
+ self.aud.set_pa(Pin.GPIO29)
+ self.aud.setVolume(11)
+ self.play_count = 0
+ self.count = 0
+
+ self.get_hr_state = 0
+ self.get_spo2_state = 0
+ self.timeSec = 0
+ self.timeTempSec = 0
+
+ self.hr_value = 0
+ self.spo2_value = 0
+ self.temp_value = 0
+
+ self.usbState = 0
+
+ self.setp_old = 0
+ self.step_tmp = ""
+ self.step_num = 0
+
+ self.call_state = 0
+
+ self.find_state = 0
+ self.FIND_timer_count = 0
+
+ self.power_off = 0
+ self.old_hour = 0
+ self.old_min = 0
+ self.interInfo_queue = Queue()
+ _thread.start_new_thread(self.interInfo_queue_thread, ())
+ EventMesh.subscribe("publish_message_event_interInfo",self.publish_message_event_interInfo)
+
+ self.record_test = audio.Record()
+ self.record_test.gain(4,12)
+
+ self.timeSecond = 0
+ self.wechat_show = 0
+ self.sort_new = {}
+ self.time_min = 0
+ self.press_btn = 0
+ self.countdown_old = 0
+ self.set_unread_wechat = 0
+ self.updateTime = 0
+
+ self.power_on_flag = 0
+
+ self.MXA_MSG = 3
+ self.wechat_recode_list = {}
+ self.wechat_num = 0
+ self.read_data = {}
+ self.volum_size = 8
+ self.msg_tmp = ""
+ check_txt = ql_fs.path_exists("/usr/static/storage_file/wechat_record.json")
+ if check_txt == True :
+ with open("/usr/static/storage_file/wechat_record.json","r") as fd:#音频文件编号
+ self.wechat_recode_list = ujson.load(fd)
+ if not self.wechat_recode_list:
+ self.wechat_recode_list = {"num":0}
+ self.wechat_num = 0
+ else:
+ self.wechat_recode_list = {"num":0}
+ with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:
+ ujson.dump(self.wechat_recode_list,fd)
+
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("open_power_on", self.open_power_on)#开机关机
+
+ EventMesh.subscribe("play_imei_event", self.play_imei_event)#播報imei号
+ EventMesh.subscribe("play_center_phone", self.play_center_phone)#拨打快捷号码
+ EventMesh.subscribe("play_cur_time_event", self.play_cur_time_event)#播放当前时间
+
+ EventMesh.subscribe("OPEN_FIND_WATCH", self.send_find_watch)#查找设备
+ EventMesh.subscribe("STOP_FIND_WATCH", self.stop_find_watch)#是否需要关闭查找设备
+ EventMesh.subscribe("close_timer_all", self.close_timer_all)#关闭相关定时器
+
+ EventMesh.subscribe("dial_sos_phone", self.dial_sos_phone)#长按3s拨打sos求助号码
+
+ EventMesh.subscribe("set_sim_mode", self.set_sim_mode)#sim检测
+
+ EventMesh.subscribe("close_hr_sop2", self.close_hr_sop2)#关闭健康测试
+ EventMesh.subscribe("set_manual_measure_mode", self.set_manual_measure_mode)#设置测试模式
+ EventMesh.subscribe("set_start_measure_time", self.set_start_measure_time)#设置开始测量的时间戳时间
+ EventMesh.subscribe("get_start_measure_time", self.get_start_measure_time)#获取开始测量的时间戳时间
+ EventMesh.subscribe("set_start_temp_measure_time", self.set_start_temp_measure_time)#设置体温开始测量的时间戳时间
+ EventMesh.subscribe("get_start_temp_measure_time", self.get_start_temp_measure_time)#获取体温开始测量的时间戳时间
+ EventMesh.subscribe("play_hr_value", self.play_hr_value)#播放心率数值
+ EventMesh.subscribe("play_spo2_value", self.play_spo2_value)#播放心率数值
+ EventMesh.subscribe("play_temp_value", self.play_temp_value)#播放体温数值
+
+
+ EventMesh.subscribe("set_usb_state", self.set_usb_state)#
+ EventMesh.subscribe("get_usb", self.get_usb_state)#
+
+ EventMesh.subscribe("play_cur_step_event", self.play_cur_step_event)#
+
+ EventMesh.subscribe("set_call_state", self.set_call_state)#1是 拨出去呼叫中 2是播进来 3 是正在通话中 0是无效
+ EventMesh.subscribe("get_call_state", self.get_call_state)#
+ EventMesh.subscribe("interup_call_event", self.interup_call_event)#
+ EventMesh.subscribe("answer_call_event", self.answer_call_event)#接听电话
+ EventMesh.subscribe("dialin_call_event", self.dialin_call_event)#电话拨进响铃
+ EventMesh.subscribe("dialing_out_event", self.dialing_out_event)#电话呼叫中
+ EventMesh.subscribe("call_test_event", self.call_test_event)#电话拨进响铃测试
+
+ EventMesh.subscribe("dial_out_call_center_cb", self.dial_out_call_center_cb)#电话拨出去
+
+ EventMesh.subscribe("close_audio_play", self.close_audio_play)#关闭音频
+
+
+ EventMesh.subscribe("start_wechat_record", self.start_wechat_record)#手表开始录音
+ EventMesh.subscribe("send_wechat_record", self.send_wechat_record)#发送微聊语音文件to app
+ EventMesh.subscribe("play_wechat_last_amr", self.play_wechat_last_amr)#播放微聊语音最后一条语音文件
+ EventMesh.subscribe("get_wechat_data", self.get_wechat_data)
+ EventMesh.subscribe("set_wechat_data", self.set_wechat_data)
+ EventMesh.subscribe("play_unread_wechat_infor", self.play_unread_wechat_infor)#按键播放最近一条微聊语音
+ EventMesh.subscribe("set_unread_wechat_state", self.set_unread_wechat_state)#设置未读标识
+ EventMesh.subscribe("get_unread_wechat_state", self.get_unread_wechat_state)#获取未读标志
+ EventMesh.subscribe("get_wechat_time", self.get_wechat_time)#获取微聊时间戳
+ EventMesh.subscribe("get_wechat_state", self.get_wechat_state)#获取微聊时间戳
+
+
+ EventMesh.subscribe("get_power_on_state", self.get_power_on_state)#获取开机标识
+
+ EventMesh.subscribe("play_audio_file", self.play_audio_file)#获取播放音频文件
+
+ def play_audio_file(self,event,str_data):#msg 拼接的路径文件
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+
+ #str_data[1] 是否需要被打断 str_data[0]合并bin文件
+ self.aud.montage_play('U:/static/audio.bin',1,str_data[1],str_data[0])
+
+
+
+
+ def interInfo_queue_thread(self):
+ while True:
+ data = self.interInfo_queue.get()
+ #print("interInfo_queue_thread:data = {}".format(data))
+ if data != None:
+ try:
+ data["func"](data["data"])
+ except Exception as e:
+ print("interInfo_queue_thread:ERROR:{}".format(e))
+ usys.print_exception(e)
+ def publish_message_event_interInfo(self,event,msg):
+ self.interInfo_queue.put(msg)
+
+ def publish_call_event_cb(self, *args, **kwargs):#拨打电话
+ EventMesh.publish("publish_message_event_interInfo",{"func":self.call_timer_cb,"data":0})
+
+ def publish_resatrt_down_event_cb(self, *args, **kwargs):#重启设备
+ EventMesh.publish("publish_message_event_interInfo",{"func":self.powe_resatrt_down_fun,"data":0})
+
+ def publish_power_down_event_cb(self, *args, **kwargs):#关机
+ EventMesh.publish("publish_message_event_interInfo",{"func":self.power_down_fun,"data":0})
+
+ def publish_find_watch_event_cb(self, *args, **kwargs):#查找设备
+ EventMesh.publish("publish_message_event_interInfo",{"func":self.FIND_timer_cb,"data":0})
+
+ def powe_resatrt_down_fun(self, *args):
+ EventMesh.publish("close_motor_infor")#关闭马达和定时器
+ self.aud.stopPlayStream()
+ Power.powerRestart()
+
+ def power_down_fun(self, *args):
+ EventMesh.publish("close_motor_infor")#关闭马达和定时器
+ self.aud.stopPlayStream()
+ Power.powerDown()
+
+
+
+ def close_audio_play(self, event, msg): #msg
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ power_off = EventMesh.publish("get_power_off_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ if power_off != None:
+ if power_off == 1:
+ return
+ self.aud.stopPlayStream()
+
+
+
+ def close_timer_all(self, event, msg):
+ EventMesh.publish("stop_led_timer")#设置参数
+ self.timer.stop()
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ power_off = EventMesh.publish("get_power_off_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ if power_off != None:
+ if power_off == 1:
+ return
+ self.aud.stopPlayStream()
+
+
+
+ def answer_call_event(self, event, msg): #
+ if self.call_state == 2:
+ EventMesh.publish("close_timer_all")#
+ voiceCall.callAnswer()
+
+ def set_call_state(self, event, msg): #
+ self.call_state = msg
+
+
+ def dialin_call_event(self, event, msg):
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ power_off = EventMesh.publish("get_power_off_state")#获取开机标识
+ if power_off != None:
+ if power_off == 1:
+ return
+ EventMesh.publish("close_timer_all")#
+ EventMesh.publish("close_wechat_btn_timer")#
+ EventMesh.publish("close_motor_infor")#关闭马达和定时器
+ EventMesh.publish("set_motor_time",[1,2,200,40,10])#设置马达参数
+ self.timer.start(6000, 1, self.publish_call_event_cb)
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CALL_mp3"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ def call_timer_cb(self,data):
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ power_off = EventMesh.publish("get_power_off_state")#获取开机标识
+ if power_off != None:
+ if power_off == 1:
+ return
+ if self.call_state != 2:
+ EventMesh.publish("close_timer_all")#
+ return
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CALL_mp3"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ def dial_out_call_center_cb(self, event, msg):#电话拨出去
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ power_off = EventMesh.publish("get_power_off_state")#获取开机标识
+ if power_off != None:
+ if power_off == 1:
+ return
+ print("dial_out_call_center_cb",msg,type(msg))
+ if self.call_state == 0:
+ EventMesh.publish("close_timer_all")#
+ EventMesh.publish("close_motor_infor")#关闭马达和定时器
+ if msg == None:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SOS_ALERT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ voiceCall.callStart(str(msg))
+
+ def call_test_event(self, event, msg):
+ voiceCall.callStart(str("10086"))
+
+ def get_call_state(self, event, msg):
+ return self.call_state
+
+ def interup_call_event(self, event, msg):#侧边金属按钮挂断来电
+ flag = EventMesh.publish("get_call_state")
+ if flag == 2 or flag == 3:#电话通话中 或者呼叫中挂断中断
+ if flag == 2:
+ EventMesh.publish("close_motor_infor")#关闭马达和定时器
+ EventMesh.publish("close_timer_all")#
+ voiceCall.callAnswer()
+ elif flag == 3:
+ EventMesh.publish("close_motor_infor")#关闭马达和定时器
+ voiceCall.callEnd()
+
+ def dialing_out_event(self, event, msg):#侧边金属按键挂断电话呼叫中
+ flag = EventMesh.publish("get_call_state")
+
+ if flag == 1:#电话呼叫中
+ EventMesh.publish("close_motor_infor")#关闭马达和定时器
+ voiceCall.callEnd()
+
+
+
+
+ def play_cur_step_event(self, event, msg): #msg 1 播放当前步数
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ step = EventMesh.publish("get_old_step_value")
+ print("step",step)
+ self.setp_old = step
+ if step <= 10:#
+ if step == 10:#十步
+ str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:# 9步
+ str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(step)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ elif step <= 100:#十 90
+ if step == 100:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_1"),audio_buf.index("R_READ_STEP_2"),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ step_tmp = str(step)
+ shi_value = int(step_tmp[0])#十
+ ge_value = int(step_tmp[1])#个
+ if shi_value > 1:#大于19步
+ if ge_value == 0:#9十步 70十步
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#9十2步
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\
+ audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#十9步
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ elif step <= 1000:
+ if step == 1000:#1千步
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_1"),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ step_tmp = str(step)
+ bai_value = int(step_tmp[0])#百
+ shi_value = int(step_tmp[1])#十
+ ge_value = int(step_tmp[2])#个
+ #101 110 1
+ if shi_value > 0:#110
+ if ge_value == 0:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\
+ audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+ elif step <= 10000:#千
+ if step == 10000:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_1"),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+ else:
+ step_tmp = str(step)
+ qian = int(step_tmp[0])#千
+ bai_value = int(step_tmp[1])#百
+ shi_value = int(step_tmp[2])#十
+ ge_value = int(step_tmp[3])#个
+ if bai_value <= 0:
+ if shi_value <= 0:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ if ge_value == 0:#1020 1040
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#1021
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ if shi_value <= 0:#1109
+ if ge_value == 0:#1110
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ if ge_value == 0:#1110
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#1117
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ pass
+ elif step <= 100000:#万
+ if step == 100000:#10万步
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3"),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ step_tmp = str(step)
+ wang = int(step_tmp[0])#万
+ qian = int(step_tmp[1])#千
+ bai_value = int(step_tmp[2])#百
+ shi_value = int(step_tmp[3])#十
+ ge_value = int(step_tmp[4])#个
+ if wang > 0 and qian > 0 and bai_value > 0:#11109 11111
+ if shi_value <= 0:#11109
+ if ge_value == 0:#11100
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#11108
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+ else:
+ if ge_value == 0:#11110
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#11116
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+ elif wang > 0 and qian > 0:#11000 11010 11012 11008
+ if shi_value > 0:
+ if ge_value == 0:#11010
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#11016
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ if ge_value == 0:#11000
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#11004
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
+ audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ elif wang > 0:#1
+ if bai_value > 0:#百
+ if shi_value > 0:#10110
+ if ge_value == 0:#10150
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\
+ audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#10108
+ if ge_value == 0:#10100
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#10108
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ if shi_value > 0:
+ if ge_value == 0:#10090
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#10098
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
+ audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
+ audio_buf.index("R_READ_STEP_4"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ def set_usb_state(self, event, msg): #msg 1 正在充电 2充电已移出 3 充电已满 0
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ flag = EventMesh.publish("get_call_state")
+
+ if msg == 1:
+ self.usbState = msg
+
+ if flag == 3 or flag == 1 or flag == 0:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_IN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ EventMesh.publish("set_led_time_arg",None)#
+ print("charge R_CHARGE_IN")
+
+
+ elif msg == 2:
+ self.usbState = msg
+ print("charge R_CHARGE_OUT")
+ if flag == 3 or flag == 1 or flag == 0:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_OUT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("stop_led_timer")#设置参数
+ # EventMesh.publish("set_led_time_arg",[0,1000,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.CHARGE_OUT_MODE])#測量成功
+ EventMesh.publish("set_led_time_arg",[1,1,0,led_mode.FLASH_LIGHT_GREEN,4,4,led_mode.CHARGE_OUT_MODE])#測量成功
+
+ elif msg == 3:
+ self.usbState = msg
+ print("charge full")
+
+ if flag == 3 or flag == 1 or flag == 0:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_FULL"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("set_led_time_arg",None)#
+
+
+ def get_usb_state(self, event, msg):
+ return self.usbState
+
+ def open_power_on(self, event, msg): #msg 1 开机 2 关机 3 重启
+ EventMesh.publish("close_timer_all")#
+ if msg == 1:
+ self.power_on_flag = 1
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))
+ EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("set_led_time_arg",[1,2,4*10,led_mode.FLASH_LIGHT_GREEN,4,2,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1000,200,10,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+ # msg 0马达使能 1 马达振动时间100ms单位 2 震动次数 3 间隔时间振动 4 是否需要长振 5 长振时间 6长振次数1一次
+ EventMesh.publish("set_motor_time",[1,2,4,4,2])#设置马达参数
+ self.power_on_flag = 0
+ self.pwk_timer.start(5000,0,self.power_on_cb)
+ elif msg == 2:
+ flag = EventMesh.publish("get_call_state")
+ if flag != 0:#电话呼叫中
+ voiceCall.callEnd()
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))
+ EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ step = EventMesh.publish("get_old_step_value")
+ self.read_data = EventMesh.publish("get_storage_data")
+ if step != 0:
+ EventMesh.publish("set_storage_config",["old_step",step])
+ date_tmp = utime.localtime()
+ EventMesh.publish("set_storage_config",["old_timesecond",date_tmp])#关机保存一个是时间
+
+ EventMesh.publish("set_motor_time",[1,2,4,4,2])#设置马达参数
+ EventMesh.publish("set_led_time_arg",[1,2,4*10,led_mode.FLASH_LIGHT_RED,4,2,led_mode.OTHER_MEASURE_MODE])#測量成功
+ self.power_off = 1
+ # EventMesh.publish("set_led_time_arg",[1000,200,10,led_mode.FLASH_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#
+ self.timer.start(10000,0,self.publish_power_down_event_cb)
+ elif msg == 3:
+ flag = EventMesh.publish("get_call_state")
+ if flag != 0:#电话呼叫中
+ voiceCall.callEnd()
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("stop_led_timer")#设置参数
+ self.power_off = 1
+ self.timer.start(10000,0,self.publish_resatrt_down_event_cb)
+
+ #EventMesh.publish("set_led_time_arg",[3000,4000,1,led_mode.LONG_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE])#
+ elif msg == 4:
+ flag = EventMesh.publish("get_call_state")
+ if flag != 0:#电话呼叫中
+ voiceCall.callEnd()
+ self.power_off = 1
+ ret = 0
+ ret = ql_fs.path_exists("/usr/static/storage_file")#
+ if ret == True:
+ ql_fs.rmdirs("/usr/static/storage_file")
+ ql_fs.mkdirs("/usr/static/storage_file")
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:
+ EventMesh.publish(constants.PROTOCOL.DLT_SEND)
+ self.aud.stopPlayStream()
+ self.timer.start(6*1000,0,self.fun)
+ def fun(self,*argc):
+ self.aud.stopPlayStream()
+ Power.powerRestart()
+
+ def power_on_cb(self, msg): #msg 开机标识
+ self.power_on_flag = 1
+ self.pwk_timer.stop()
+
+ def get_power_on_state(self, event, msg):
+ return self.power_on_flag
+
+
+ def close_hr_sop2(self, event, msg): #msg 关闭心率血氧测试
+ get_hr_state = EventMesh.publish("get_hr_state")
+ get_spo2_state = EventMesh.publish("get_spo2_state")
+ if get_hr_state != None and get_spo2_state != None:
+ if get_hr_state != 0:
+ EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率
+ print("sstop hr")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ elif get_spo2_state != 0:
+ print("stop spo2")
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+
+ def set_manual_measure_mode(self, event, msg): #手动测试 1心率 2 血氧 3 体温
+ if msg == 1:
+ get_hr_state = EventMesh.publish("get_hr_state")
+ if get_hr_state != 1:#不是手动测试直接打断
+ print("set_manual_measure_mode",msg)
+ EventMesh.publish("set_hr_state",1)
+ EventMesh.publish("set_start_measure_time")#设置开始测量的时间戳时间
+ EventMesh.publish(constants.EVENT.START_HEART) #手动心率测试
+ elif msg == 2:
+ get_spo2_state = EventMesh.publish("get_spo2_state")
+ if get_hr_state == 0:
+ if get_spo2_state != 1:
+ print("set_manual_measure_mode",msg)
+ EventMesh.publish("set_spo2_state",1)
+ EventMesh.publish("set_start_measure_time")#设置开始测量的时间戳时间
+ EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN) #手动血氧测试
+ elif msg == 3:
+ get_temp_state = EventMesh.publish("get_temp_state")
+ if get_temp_state != 1:
+ print("set_manual_measure_mode",msg)
+ EventMesh.publish("set_temp_state",1)
+ EventMesh.publish("set_start_temp_measure_time")#设置开始测量的时间戳时间
+ EventMesh.publish(constants.EVENT.START_TEMP)#手动体温测试
+ pass
+
+
+ def set_start_measure_time(self, event, msg): #手动测试 1心
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ self.timeSec = time_tmp
+ pass
+
+ def get_start_measure_time(self, event, msg): #手动测试
+
+ return self.timeSec
+
+ def set_start_temp_measure_time(self, event, msg): #
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ self.timeTempSec = time_tmp
+ pass
+
+ def get_start_temp_measure_time(self, event, msg): #
+ return self.timeTempSec
+
+ def mearsure_cb(self, event, msg):
+ if msg == 1:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ elif msg == 2:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ elif msg == 3:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_SPO2_TITLE"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ elif msg == 4:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+
+
+ def play_temp_value(self, event, msg): #播放体温数值
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ if msg != None:
+ EventMesh.publish("close_timer_all")#
+ if msg > 0:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("set_hr_blood_led",2)#测量成功
+ self.temp_value = msg
+ self.timer.start(2*1000,1,self.play_temp_fun)
+ else:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("set_hr_blood_led",3)#测量异常
+ def play_temp_fun(self,argc): #播放体温数值
+ data = self.temp_value
+ if data > 42:
+ data = 42
+ data_tmp = str(data)
+ if data_tmp.find(".") != -1:
+ temp_shi = data_tmp.split('.')[0]//10
+ temp_ge = data_tmp.split('.')[0]%10
+ dot_ge = data_tmp.split('.')[1]%10
+ if temp_ge > 0:#37.0
+ if dot_ge > 0:#37.5
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(temp_ge)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),\
+ audio_buf.index("R_READ_TIME_{}".format(dot_ge)))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ else:#37.0
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(temp_ge)))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#30.0 30.6
+ if dot_ge > 0:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(dot_ge)))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\
+ audio_buf.index("R_READ_STEP_3"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ else:
+ temp_shi = data_tmp//10
+ temp_ge = data_tmp%10
+
+ if temp_ge > 0:#45
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(temp_ge)))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\
+ audio_buf.index("R_READ_STEP_3"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+
+ def play_hr_value(self, event, msg): #播放心率数值
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ if msg != None:
+ EventMesh.publish("close_timer_all")#
+ if msg >= 50:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ self.hr_value = msg
+ EventMesh.publish("set_hr_blood_led",2)#测量成功
+ self.timer.start(2*1000,1,self.play_hr_fun)
+
+
+ else:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("set_hr_blood_led",3)#测量异常
+
+ def play_spo2_value(self, event, msg): #播放血样数值
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ if msg != None:
+ EventMesh.publish("close_timer_all")#
+ if msg >= 85:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("set_hr_blood_led",2)#测量成功
+ self.spo2_value = msg
+ self.timer.start(2*1000,1,self.play_spo2_fun)
+ else:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("set_hr_blood_led",3)#测量异常
+
+ def play_spo2_fun(self,argc):#播放血氧测试值
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ data = self.spo2_value
+ if data > 100:
+ data = 100
+ if data == 100:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_SPO2_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\
+ audio_buf.index("R_READ_STEP_2"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_SPO2_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(data%10)))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+
+ def play_hr_fun(self,argc):#播放心率测试值
+
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ data = self.hr_value
+ if data > 220:
+ data = 220
+ if data < 100:
+ if data%10 == 0:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\
+ audio_buf.index("R_READ_STEP_3"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\
+ audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(data%10)))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ shi = (data%100)//10 #210
+ ge = (data%100)%10
+ #210 234
+ if shi > 0:
+ if ge == 0:#210 230 120
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi)),audio_buf.index("R_READ_STEP_3"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi)),audio_buf.index("R_READ_STEP_3"),\
+ audio_buf.index("R_READ_TIME_{}".format(ge)))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ if ge == 0:#200 100 209 108
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\
+ audio_buf.index("R_READ_STEP_2"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\
+ audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge)))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+
+ def set_sim_mode(self, event, msg): #mode 1 蓝灯闪烁 可识别卡 但未联网 2 可绑定appsim正常 3 手表不识别卡或者未插卡
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ EventMesh.publish("stop_led_timer")#设置参数
+ mode = 0
+ signal = EventMesh.publish("screen_get_sig")
+ if signal != None:
+ if signal >= 0 and signal <= 31:#有卡
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网提示关机
+ mode = 2
+ else:
+ mode = 1
+ else:#未插卡
+ mode = 3
+ if mode == 1:#蓝灯色灯
+ EventMesh.publish("set_led_time_arg",[1,1,6,led_mode.FLASH_LIGHT_WHITE,4,2,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_WHITE,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SIM_FAILE"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+ elif mode == 2:#绿色灯
+ EventMesh.publish("set_led_time_arg",[1,1,6,led_mode.FLASH_LIGHT_GREEN,4,2,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SIM_CONNECT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+ elif mode == 3:#红灯闪烁
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SIM"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.publish("set_led_time_arg",[1,1,6,led_mode.FLASH_LIGHT_RED,4,2,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+ pass
+ pass
+
+ def dial_sos_phone(self, event, msg): #拨打紧急求助电话
+ flag = EventMesh.publish("get_call_state")
+
+ print("dial_sos_phone111")
+ if flag == 0:
+ EventMesh.publish("close_timer_all")#
+ EventMesh.publish("close_motor_infor")#关闭马达和定时器
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网提示关机
+ sos_number = EventMesh.publish("get_dial_sos_number")
+ print("sos_number!!!!!!!",sos_number)
+ if sos_number != None:
+ if len(sos_number) != 0:
+
+ EventMesh.publish("save_phonename",sos_number[0])
+ EventMesh.publish("save_phonenum",sos_number[0])
+ EventMesh.publish("set_sos_num",0)
+ EventMesh.publish("set_sos_flag",1)
+
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SOS_ALERT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ voiceCall.callStart(sos_number[0])
+
+ else:#未设置sos紧急求助号码
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+ else:
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SIM_FAILE"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ print("dial_sos_phone2222")
+
+ def send_find_watch(self, event, msg): #发送查找设备指令
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备
+ wechat_state = EventMesh.publish("get_wechat_state")
+ if flag == 0 and wechat_state == 0:
+ EventMesh.publish("close_timer_all")#
+ self.find_state = 1
+ self.FIND_timer_count = 0
+ self.timer.start(3000,1,self.publish_find_watch_event_cb)
+ EventMesh.publish("set_led_time_arg",[1,1,330,led_mode.LONG_LIGHT_GREEN,2,1,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1000,33000,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("audio_audio_haixiu"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ def stop_find_watch(self, event, msg):
+ if self.find_state == 1:
+ self.find_state = 0
+ self.FIND_timer_count = 0
+ EventMesh.publish("stop_led_timer")#设置参数
+ self.aud.stopPlayStream()
+ # self.aud.stop() #播放声音
+ self.timer.stop()
+
+ def FIND_timer_cb(self, data):
+ if self.find_state == 1:
+ print("self.FIND_timer_count:{}".format(self.FIND_timer_count))
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("audio_audio_haixiu"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ self.FIND_timer_count += 1
+ if self.FIND_timer_count > 10: #120秒30s
+ EventMesh.publish("STOP_FIND_WATCH")
+
+ def stop_FIND(self) :
+ self.timer.stop()
+
+
+ def play_cur_time_event(self, event, msg): #播放当前时间
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+
+ data = RTC().datetime()
+ hour = data[4]
+ min = data[5]
+ print("hour",hour,min)
+ self.old_hour = hour
+ self.old_min = min
+ if self.old_hour == 0:
+ if self.old_min <= 9:#00:09
+ if self.old_min == 0:#0点整
+ str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#0点09分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(self.old_min))\
+ ,audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+
+ else:
+ if self.old_min % 10 == 0:#0点2十分 0点3十分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+ else:#0点2十8分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10)),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+
+ elif self.old_hour <= 9:#8:09 9:20 9:45
+ if self.old_min <= 9:#9点09分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(self.old_hour))\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(self.old_min))\
+ ,audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ else:
+ if self.old_min % 10 == 0:#9点2十分 9点4十分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(self.old_hour))\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min //10))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#9点2十4分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(self.old_hour))\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min //10))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10)),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+
+ else:#12:0
+ if self.old_min == 0:#12:00 13:00 15:00 20
+ self.play_count+=1
+ hour_shi = self.old_hour//10
+ hour_ge = self.old_hour%10
+ if self.old_hour == 10:#十点整
+ str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ elif self.old_hour == 20:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ else:
+ if hour_shi <= 1:#十3点整
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_READ_TIME_{}".format(hour_ge)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ else:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ else:
+ if self.old_hour == 10:#10:09 10:10
+ if self.old_min <= 9:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0")\
+ ,audio_buf.index("R_READ_TIME_{}".format(self.old_min)),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ if self.old_min % 10 == 0:#十点2十分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min//10))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#十点2十1分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min//10))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(self.old_min%10))\
+ ,audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ else:
+ if self.old_hour < 20:#19:00
+ if self.old_min <= 9:#19:09
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT")\
+ ,audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10))\
+ ,audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ else:#19:18 19:40 19:56
+ if self.old_min % 10 == 0:#十9点2十分 十9点3十分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT")\
+ ,audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10)),audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#十9点2十1分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT")\
+ ,audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10)),audio_buf.index("R_READ_STEP_3")\
+ ,audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10)),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ else:
+ hour_shi = self.old_hour//10
+ hour_ge = self.old_hour%10
+
+ min_shi = self.old_min//10
+ min_ge = self.old_min%10
+
+ #20:08 20:18 20:20
+ if hour_ge == 0:
+ if self.old_min <= 9:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0")\
+ ,audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ else:
+ if min_ge == 0:#2十点2十分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#2十点2十1分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+ else:#21:08 21:18
+ if self.old_min <= 9:
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0")\
+ ,audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ if min_ge == 0:#2十3点3十分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#2十3点3十1分
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\
+ ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\
+ ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+
+ def play_timer_cb_1(self,*agrs):
+ return
+
+ def play_center_phone(self, event, msg): #msg
+ flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许设备再次拨出
+ if flag == 0:
+ EventMesh.publish("close_timer_all")#
+
+ center_dial = EventMesh.publish("get_storage_config","center_dial")
+ if center_dial != None:
+ if len(center_dial) > 0:
+ voiceCall.callStart(str(center_dial))
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SOS_ALERT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:#未设置号码
+ print("play_center_phone")
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ pass
+
+
+ def play_imei_event(self, event, msg): #msg
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ imei = EventMesh.publish(constants.EVENT.GET_IMEI)
+ print(imei)
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(imei[0]))\
+ ,audio_buf.index("R_READ_TIME_{}".format(imei[1])),audio_buf.index("R_READ_TIME_{}".format(imei[2])),audio_buf.index("R_READ_TIME_{}".format(imei[3])),\
+ audio_buf.index("R_READ_TIME_{}".format(imei[4])),audio_buf.index("R_READ_TIME_{}".format(imei[5])),audio_buf.index("R_READ_TIME_{}".format(imei[6])),audio_buf.index("R_READ_TIME_{}".format(imei[7])),\
+ audio_buf.index("R_READ_TIME_{}".format(imei[8])),audio_buf.index("R_READ_TIME_{}".format(imei[9])),audio_buf.index("R_READ_TIME_{}".format(imei[10])),audio_buf.index("R_READ_TIME_{}".format(imei[11])),\
+ audio_buf.index("R_READ_TIME_{}".format(imei[12])),audio_buf.index("R_READ_TIME_{}".format(imei[13])),audio_buf.index("R_READ_TIME_{}".format(imei[14])))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
+
+ def get_unread_wechat_state(self,event, msg):
+
+ return self.set_unread_wechat
+
+ def set_unread_wechat_state(self, event, msg):
+ self.set_unread_wechat = msg
+
+ def get_wechat_data(self,event, msg):
+
+ return [self.MXA_MSG ,self.wechat_recode_list]
+
+ def set_wechat_data(self, event, msg):
+ print("set_wechat_data1 ",msg,self.wechat_num)
+ self.MXA_MSG = msg[0]
+ self.wechat_recode_list = msg[1]
+ self.wechat_num = self.wechat_recode_list["num"]
+ with open("/usr/static/storage_file/wechat_record.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.wechat_recode_list,fd)
+ #写编号
+ print("set_wechat_data2:{} ".format(self.wechat_num))
+
+
+ def get_wechat_time(self, event, msg):
+ return [self.press_btn,self.timeSecond]
+
+ def start_wechat_record(self, event, msg): #开始录音相关配置
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网不需要录音
+
+ if self.press_btn == 0:
+ self.press_btn = 1
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ EventMesh.publish("set_led_time_arg",[1,1,160,led_mode.LONG_LIGHT_GREEN,4,2,led_mode.WECHAT_LED_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1000,1000,1,led_mode.LONG_LIGHT_GREEN,led_mode.OPEN_LONG_LIGHT_MODE,led_mode.WECHAT_LED_MODE])#測量成功
+
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ self.timeSecond = time_tmp#保存按下的时间长s
+ self.aud.setVolume(11)#设置音量最大
+
+ print("talking1.0")
+ if self.wechat_num >= self.MXA_MSG:
+ self.wechat_num = 0
+ self.wechat_num += 1
+ self.wechat_show = self.wechat_num
+ self.record_test.start("/usr/static/storage_file/{}.amr".format(self.wechat_show),16)
+ else:
+ self.timeSecond = 0
+ self.press_btn = 0
+ def get_wechat_state(self, event, msg):
+ return self.press_btn
+
+ def send_wechat_record(self, event, msg): #发送录音文件
+ if self.press_btn == 1:
+ self.press_btn = 0
+ self.record_test.stop() #停止錄音
+ EventMesh.publish("stop_led_timer")#关闭灯
+ EventMesh.publish("set_led_time_arg",[1,1,0,led_mode.FLASH_LIGHT_GREEN,4,2,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[0,1000,1,led_mode.LONG_LIGHT_GREEN,led_mode.OPEN_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#測量成功
+ self.countdown_old = 0
+
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+
+ self.countdown_old = msg
+ if self.countdown_old >= 15:
+ self.countdown_old = 15
+ if self.countdown_old <= 0:
+ #录音时间太短
+ return
+ else:
+ self.wechat_recode_list["%02d"%(self.wechat_show)] = "read:1"
+ self.wechat_recode_list["num"] = self.wechat_show
+ print("self.wechat_recode_list :{}".format(self.wechat_recode_list))
+
+ with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:
+ ujson.dump(self.wechat_recode_list,fd)
+ print("send wechat data!!!!!!!!!!!!!!!!!!!!!")
+
+ check_txt = ql_fs.path_exists("/usr/static/storage_file/{}.amr".format(self.wechat_show))
+ if check_txt == True :
+ path = "/usr/static/storage_file/{}.amr".format(self.wechat_show)
+ with open(path,"rb") as fd:
+ buf = bytearray(ql_fs.path_getsize(path))
+ fd.readinto(buf)
+ senddata = [self.countdown_old,buf]
+ EventMesh.publish(constants.PROTOCOL.TK_SEND,senddata)
+
+
+ # check_txt = ql_fs.path_exists("/usr/static/storage_file/{}.amr".format(self.wechat_show))
+ # if check_txt == True :
+ # path = "/usr/static/storage_file/{}.amr".format(self.wechat_show)
+ # with open(path,"rb") as fd:
+ # buf = bytearray(ql_fs.path_getsize(path))
+ # fd.readinto(buf)
+ # senddata = [self.countdown_old,buf]
+ # EventMesh.publish(constants.PROTOCOL.TK_SEND,senddata)
+
+
+ def play_wechat_last_amr(self, event, msg):#播放微聊最后一条语音文件
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+
+ # check_amr = ql_fs.path_exists("/usr/static/storage_file/wechat.amr")
+ # if check_amr == True :
+ # self.aud.play(1, 1, '/usr/static/storage_file/wechat.amr') #文件名前面要加上路径
+ # return
+ if self.wechat_recode_list != None:
+ num = 0
+ play_state = 0
+ if len(self.wechat_recode_list) > 1:
+ num = self.wechat_recode_list["num"]
+ #print("self.wechat_recode_list1:{}".format(self.wechat_recode_list))
+ if num != 0:
+ last_num = str("%02d"%(num))
+ last_tmp = self.wechat_recode_list[last_num]
+ last_read = int(last_tmp.split(":")[1])
+ if last_read == 1:#如果最后一条没有读则读最新的一条
+ self.wechat_recode_list[last_num] = "read:0"
+ self.wechat_recode_list["num"] = num
+ with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:
+ ujson.dump(self.wechat_recode_list,fd)
+ else:
+ sotr_new = {}
+ sotr_new = sorted(self.wechat_recode_list.keys(), reverse=True)#降序排序
+ # print("sotr_new:{}".format(sotr_new))
+ for i in range(len(self.wechat_recode_list)-1):#1 01 02
+ key = sotr_new[i+1]
+ num_id = int(key)
+ #print("key:{} num_id:{}".format(key,num_id))
+ if key in self.wechat_recode_list:#
+ str_tmp = self.wechat_recode_list[key]
+ read = int(str_tmp.split(":")[1])
+ if read != 0:#未读是按一下播放下一条同时删除
+ check_amr = ql_fs.path_exists("/usr/static/storage_file/{}.amr".format(num_id))#还要检测这个文件是否存在
+ if check_amr == True:
+ self.wechat_recode_list[key] = "read:0"
+ self.wechat_recode_list["num"] = num
+ print("self.wechat_recode_list2:{} num_id:{} num:{}".format(self.wechat_recode_list,num_id,num))
+ self.aud.play(1, 1, '/usr/static/storage_file/{}.amr'.format(num_id)) #文件名前面要加上路径
+ play_state = 1
+ with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:
+ ujson.dump(self.wechat_recode_list,fd)
+ break
+ else:
+ continue
+ else:
+ continue
+ else:
+ continue
+ #print("play_state:{}".format(play_state))
+ if play_state == 0:
+ check_amr = ql_fs.path_exists("/usr/static/storage_file/{}.amr".format(num))#还要检测这个文件是否存在
+ if check_amr == True:
+ self.aud.play(1, 1, '/usr/static/storage_file/{}.amr'.format(num)) #文件名前面要加上路径
+
+ def play_unread_wechat_infor(self,event,msg):#未读微聊语音
+ if self.wechat_recode_list != None:
+ num = 0
+ play_state = 0
+ if len(self.wechat_recode_list) > 1:
+ num = self.wechat_recode_list["num"]
+ if num != 0:
+ for i in range(len(self.wechat_recode_list)-1):#1 01 02
+ key = "%02d"%(i+1)
+ if key in self.wechat_recode_list:#
+ str_tmp = self.wechat_recode_list[key]
+ read = int(str_tmp.split(":")[1])
+ if read == 1:#未读是按一下播放下一条同时删除
+ play_state = 1
+ else:
+ continue
+ else:
+ continue
+ if play_state == 1:#设置未读语音状态
+ EventMesh.publish("set_unread_wechat_state",1)
+ else:
+ EventMesh.publish("set_unread_wechat_state",0)
+ self.updateTime = 0
+
+
+ state = EventMesh.publish("get_unread_wechat_state")#
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ if state != None:
+ if state == 1:
+ EventMesh.publish("set_led_time_arg",[1,1,4,led_mode.FLASH_LIGHT_GREEN,2,1,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+ if self.updateTime == 0:
+ self.updateTime = time_tmp
+ if self.updateTime != 0:
+ if time_tmp - self.updateTime >= 10*60:
+ self.updateTime = time_tmp
+ #播放音频文件
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2 and self.press_btn == 0:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")
+ str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_UNREAD_WECHAT"))
+ EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ else:
+ self.updateTime = 0
+
+
+
+
+
+class resetFactoryUnbindManager(Abstract):#按键按下恢复出厂设置解绑app
+ def __init__(self):
+ self.timer = osTimer()
+ self.aud = audio.Audio(0)
+ self.aud.set_pa(Pin.GPIO29)
+ self.aud.setVolume(11)
+ pass
+
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("reset_factor_setiing", self.reset_factor_setiing)#恢复出厂设置
+
+ def reset_factor_setiing(self, event, msg):
+ ret = 0
+ ret = ql_fs.path_exists("/usr/static/storage_file")#
+ if ret == True:
+ ql_fs.rmdirs("/usr/static/storage_file")
+ ql_fs.mkdirs("/usr/static/storage_file")
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:
+ EventMesh.publish(constants.PROTOCOL.DLT_SEND)
+ self.timer.start(5*1000,0,self.fun)
+
+ def fun(self,*argc):
+ EventMesh.publish("close_motor_infor")#关闭马达和定时器
+ self.aud.stopPlayStream()
+ Power.powerRestart()
+
+
+
+class wechatInforManager(Abstract):#微聊相关信息
+ pass
+
+
+
+class BtnDevice(Abstract):
+
+ def __init__(self, tp=None):
+ self.pk = PowerKey()
+ self.__pwk_timer = osTimer()
+
+ # self.keypad = machine.KeyPad(1, 2)
+ self.__PowerDownTimeOut = 3000
+ self.__tp = tp
+ self.pwk_press = 0
+ self.pwk_count = 0
+ self.GPIO26_status = 1#默认是低电平
+ self.powerKey_status = 0
+ self.pin_timer = osTimer()
+ self.sosKey = 0
+ self.wechatKey = 0
+ self.sosKey_status = 1#默认是低电平
+ self.WeChatKey_status = 1#默认是低电平
+
+ self.wechatKey_timer = osTimer()
+ self.wechatKey_count = 0
+ self.wechatKey_press = 0
+
+ self.sosKey_timer = osTimer()
+ self.sosKey_count = 0
+ self.sosKey_press = 0
+
+ self.power_key = osTimer()
+
+ self.wechatKey_timeout = osTimer()
+ self.wechatKey_press_count = 0
+
+ self.timeSeconOld = 0
+ self.wechat_state = 1 #按下录音时的状态
+
+ self.sosKey_timeout = osTimer()
+ self.sosKey_press_count = 0
+
+
+ self.pwkey_timer = osTimer()
+ self.pwKey_press_count = 0
+ self.pwkey_count = 0
+ self.pwkey_press = 0
+ self.led_state = 0
+
+ self.motor = osTimer()
+
+ self.btnInfo_queue = Queue()
+ _thread.start_new_thread(self.btnInfo_queue_thread, ())
+ EventMesh.subscribe("publish_message_event_btnInfo",self.publish_message_event_btnInfo)
+ def btnInfo_queue_thread(self):
+ while True:
+ data = self.btnInfo_queue.get()
+ #print("Info_queue:data = {}".format(data))
+ if data != None:
+ try:
+ data["func"](data["data"])
+ except Exception as e:
+ print("btnInfo_queue:ERROR:{}".format(e))
+ usys.print_exception(e)
+ def publish_message_event_btnInfo(self,event,msg):
+ self.btnInfo_queue.put(msg)
+
+ def publish_wechat_btn_event_cb(self, *args, **kwargs):
+ EventMesh.publish("publish_message_event_btnInfo",{"func":self.wechatKey_press_cb,"data":0})
+
+ def publish_soskey_btn_event_cb(self, *args, **kwargs):
+ EventMesh.publish("publish_message_event_btnInfo",{"func":self.sosKey_press_cb,"data":0})
+
+ def publish_pwkKey_btn_event_cb(self, *args, **kwargs):
+ EventMesh.publish("publish_message_event_btnInfo",{"func":self.pwKey_press_cb,"data":0})
+
+ def post_processor_after_instantiation(self):
+ # self.keypad.init()
+ # self.keypad.set_callback(self.key_callback)
+ EventMesh.subscribe("sos_short_press", self.sos_short_press)#sos短按事件
+ EventMesh.subscribe("close_wechat_btn_timer", self.close_wechat_btn_timer)#来电强制关闭微聊语音
+ self.pk.powerKeyEventRegister(self.powerKey_callback)
+
+ self.extint = ExtInt(ExtInt.GPIO26, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_DISABLE, self.pwk_extint_cb)
+ self.extint.enable()
+
+ self.sosKey = ExtInt(ExtInt.GPIO22, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.sosKey_extint_cb)
+ self.sosKey.enable()
+
+ # self.wechatKey = ExtInt(ExtInt.GPIO20, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.wechatKey_extint_cb)
+ # self.wechatKey.enable()
+
+ key19 = Pin(Pin.GPIO19, Pin.OUT, Pin.PULL_PU, 0)
+
+ def sos_short_press(self,args,msg):
+ EventMesh.publish("interup_call_event")#如果在电话中强制挂断电话
+ EventMesh.publish("close_audio_play")#强制关闭音频文件播放
+ EventMesh.publish("stop_led_timer")#设置参数关闭定时器 同时也关闭所有的灯再开相对应的灯
+ EventMesh.publish("STOP_FIND_WATCH")#停止查找设备
+ # EventMesh.publish("play_cur_time_event")#播报当前时间
+ #播报当前时间
+
+
+ def pwk_extint_cb(self,args):#侧边按键
+ self.GPIO26_status = self.extint.read_level()
+ print('### key20_extint_cb {} self.GPIO26_status :{}'.format(args,self.GPIO26_status)) # args[0]:gpio号 args[1]:上升沿或下降沿
+ if self.sosKey_status != 0 and self.WeChatKey_status != 0:
+ if self.GPIO26_status == 0:#按下
+ if self.pwkey_press == 0 :
+ self.pwkey_press = 1
+ self.pwkey_count = 0
+ self.led_state = 0
+ self.pwkey_timer.start(100, 1, self.publish_pwkKey_btn_event_cb)
+ print("key22_extint_cb:self.key22_timer.start!!!!\n")
+
+ def pwKey_press_cb(self, data):
+ '''KEY2:联动屏幕右下角或返回键长按关机'''
+ if self.pwkey_press == 1 :
+ self.pwkey_count += 1
+ if self.pwkey_count > 5:
+ if self.pwkey_count >= 10*10:
+ if EventMesh.publish("get_sim_Status") != 1:
+ EventMesh.publish("open_power_on", 2)#
+ pass
+ else:
+ EventMesh.publish("open_power_on", 3)#
+ self.pwkey_timer.stop()
+ self.pwkey_count = 0
+ self.pwkey_press = 0
+ self.pwKey_press_count = 0
+ self.led_state = 0
+ return
+ else:
+ if self.GPIO26_status == 1:#松开
+ pass
+ # EventMesh.publish("stop_led_timer")#设置参数
+
+
+
+
+
+ if self.GPIO26_status == 1:#松开
+ if self.pwkey_count >= 1 and self.pwkey_count <= 5: #防抖100ms
+ self.pwkey_timer.stop()
+ self.pwkey_count = 0
+ self.pwkey_press = 0
+ self.led_state = 0
+ self.pwKey_press_count+=1
+ self.pwkey_timer.start(600, 0, self.pwKey_timeout_cb)#松手超时1s判断
+ else:
+ self.pwkey_timer.stop()
+ self.pwkey_count = 0
+ self.pwkey_press = 0
+ self.led_state = 0
+ self.pwKey_press_count = 0
+
+ print("self.pwKey_status!!!!!!!!!!!!!!")
+
+ def pwKey_timeout_cb(self, *args):#侧边按键
+ if self.pwKey_press_count >= 1:
+ self.pwKey_press_count = 0
+ # EventMesh.publish(constants.EVENT.START_LOCATION) #开始定位
+ # open_motor()
+ # self.motor.start(50,0,self.motor_cb)
+ sos_flag = EventMesh.publish("get_sos_flag")
+ if sos_flag == 1:
+ EventMesh.publish("set_sos_flag",0)
+ EventMesh.publish("set_sos_num",0)
+ EventMesh.publish("set_hangup_mode",0)
+ EventMesh.publish("dialing_out_event")#电话呼叫中
+ EventMesh.publish("close_hr_sop2")#
+ flag = EventMesh.publish("get_call_state")
+ if flag != 1:
+ EventMesh.publish("set_sim_mode")#播報imei号
+
+ def sosKey_extint_cb(self,args):
+ self.sosKey_status = self.sosKey.read_level()
+ # print('### key22_extint_cb {} self.GPIO22_status:{}'.format(args,self.sosKey_status)) # args[0]:gpio号 args[1]:上升沿或下降沿
+ if self.WeChatKey_status != 0 and self.GPIO26_status != 0:
+ if self.sosKey_status == 0:#按下
+ if self.sosKey_press == 0 :
+ self.sosKey_press = 1
+ self.sosKey_long_press = 0
+ self.sosKey_count = 0
+ self.sosKey_timer.start(100, 1, self.publish_soskey_btn_event_cb)
+ print("key22_extint_cb:self.key22_timer.start!!!!\n")
+
+ def sosKey_press_cb(self, data):
+ '''KEY2:联动屏幕右下角或返回键长按关机'''
+ if self.sosKey_press == 1 :
+ # print("self.sosKey_count",self.sosKey_count)
+ # if self.sosKey_count <= 2:
+ # if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网不需要录音
+ # EventMesh.publish("set_led_time_arg",[1000,200,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+ # else:
+ # EventMesh.publish("set_led_time_arg",[1000,200,1,led_mode.FLASH_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+ self.sosKey_count += 1
+ if self.sosKey_count >= 10*3: #长按3s sos拨号
+
+ self.sosKey_count = 0
+ self.sosKey_long_press = 1
+ self.sosKey_press = 0
+ self.sosKey_timer.stop()
+ EventMesh.publish_async("dial_sos_phone")#拨打sos号码
+ return
+
+ # print("self.sosKey_count {}",self.sosKey_count)
+ if self.sosKey_status == 1:#松开
+ if self.sosKey_count >= 1 and self.sosKey_count <= 5: #防抖100ms
+ self.sosKey_timer.stop()
+ self.sosKey_count = 0
+ self.sosKey_press = 0
+ self.sosKey_press_count+=1
+ self.sosKey_timer.start(600, 0, self.sosKey_timeout_cb)#松手超时1s判断
+ else:
+ self.sosKey_timer.stop()
+ self.sosKey_count = 0
+ self.sosKey_press = 0
+ self.sosKey_press_count=0
+
+ print("self.sosKey_status!!!!!!!!!!!!!!")
+ # import audio
+ # aud.montage_play('U:/mp3.bin',2,1,'mp3files=1.mp3+2.mp3+3.mp3')
+
+ def sosKey_timeout_cb(self, *args):#微聊键
+ print("sosKey_press_count!!!!!!!!!!!!!! ",self.sosKey_press_count)
+ if self.sosKey_press_count >= 10:#
+ self.sosKey_press_count = 0
+ EventMesh.publish("open_power_on", 4)#恢复出厂
+ pass
+ elif self.sosKey_press_count >= 6:#
+ self.sosKey_press_count = 0
+ # EventMesh.publish("set_manual_measure_mode",2)#测量血氧
+ EventMesh.publish("play_imei_event")#播報imei号
+ pass
+ elif self.sosKey_press_count >= 5:
+ self.sosKey_press_count = 0
+ # EventMesh.publish("set_manual_measure_mode",3)#测量体温
+ pass
+ elif self.sosKey_press_count >= 4:#拨打app快捷号码
+ self.sosKey_press_count = 0
+ # EventMesh.publish("play_center_phone")#拨打快捷号码
+ # EventMesh.publish("call_phonebook_three_call")
+ pass
+ elif self.sosKey_press_count >= 3:#测试心率
+ self.sosKey_press_count = 0
+ # EventMesh.publish("set_manual_measure_mode",1)#
+ pass
+ elif self.sosKey_press_count >= 2:#播报当前步数
+ self.sosKey_press_count = 0
+ EventMesh.publish("play_cur_step_event")#
+ pass
+ elif self.sosKey_press_count >= 1:#挂断来电 短语音播报
+ self.sosKey_press_count = 0
+
+ # EventMesh.publish("call_test_event")
+ EventMesh.publish("sos_short_press")#sos短按事件
+ pass
+ self.sosKey_press_count = 0
+
+
+ def wechatKey_extint_cb(self,args):
+ self.WeChatKey_status = self.wechatKey.read_level()
+ print('### wechatKey_extint_cb {} self.WeChatKey_status:{}'.format(args,self.WeChatKey_status)) # args[0]:gpio号 args[1]:上升沿或下降沿
+ if self.sosKey_status != 0 and self.GPIO26_status != 0:
+ if self.WeChatKey_status == 0:#按下
+ if self.wechatKey_press == 0 :
+ self.wechatKey_press = 1
+ self.wechatKey_count = 0
+ self.wechat_state = 1
+ self.wechatKey_timer.start(100, 1, self.publish_wechat_btn_event_cb)
+
+ print("wechatKey_extint_cb:selfwechatKey_timer.start!!!!\n")
+
+ def close_wechat_btn_timer(self,event,*argc):
+ tmp = EventMesh.publish("get_wechat_time")#获取微聊时间戳
+ wechat_time = 0
+ time_tmp = 0
+ time_sec = 0
+
+ if tmp != None:
+ if tmp[0] == 1:
+ self.wechatKey_timer.stop()
+ self.wechatKey_count = 0
+ self.wechatKey_press = 0
+ self.wechatKey_press_count=0
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ time_sec = tmp[1]
+ wechat_time = time_tmp - time_sec
+ print("close_btn_timer",time_tmp,time_sec,wechat_time)
+ if wechat_time >= 15:
+ wechat_time = 15
+ if wechat_time <= 0:
+ wechat_time = 0
+ EventMesh.publish("send_wechat_record",wechat_time)#发送录音文件内容
+
+
+ def wechatKey_press_cb(self,data):
+ wechat_time = 0
+ tmp = None
+ time_sec = 0
+ time_tmp = 0
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ '''KEY2:联动屏幕右下角或返回键长按关机'''
+ if self.wechatKey_press == 1 :#是否按下
+ tmp = EventMesh.publish("get_wechat_time")#获取微聊时间戳
+ self.wechatKey_count += 1
+ # print("self.wechatKey_count {}",self.wechatKey_count)
+ # if self.wechatKey_count <= 2:
+ # if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网不需要录音
+ # print("self.wechatKey_count1111")
+ # # EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+ # else:
+ # print("self.wechatKey_count1111")
+ # # EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
+
+ if self.wechatKey_count >= 10: #长按1s进入微聊录音
+ if self.WeChatKey_status == 0:
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网不需要录音
+ if self.wechat_state == 1:#按下超过s开始录音
+ EventMesh.publish("start_wechat_record")#开始录音
+ self.wechat_state = 0
+ else:
+ EventMesh.publish("set_sim_mode")#播報imei号
+
+ if self.WeChatKey_status == 0:#未松手超过15s啧停止录音
+ if self.wechat_state == 0:
+ if tmp != None:
+ if tmp[0] != 0:
+ time_sec = tmp[1]
+ if time_tmp - time_sec >= 15:
+ wechat_time = time_tmp - time_sec
+ if wechat_time >= 15:
+ wechat_time = 15
+ EventMesh.publish("send_wechat_record",wechat_time)#发送录音文件内容
+
+ self.wechatKey_timer.stop()
+ self.wechatKey_count = 0
+ self.wechatKey_press = 0
+ self.wechatKey_press_count=0
+ return
+ else:
+ if self.WeChatKey_status == 1:
+ if self.wechat_state == 0:#如果按下时长超过1s且小于长按的时间也认为是录微聊
+ if tmp != None:
+ if tmp[0] != 0:
+ time_sec = tmp[1]
+ wechat_time = time_tmp - time_sec
+ print("WECHAT TIEM",time_tmp,time_sec,wechat_time)
+ if wechat_time >= 15:
+ wechat_time = 15
+
+ EventMesh.publish("send_wechat_record",wechat_time)#发送录音文件内容
+ self.wechatKey_timer.stop()
+
+ self.wechatKey_count = 0
+ self.wechatKey_press = 0
+ self.wechatKey_press_count=0
+ return
+
+ if self.WeChatKey_status == 1:#松开
+ if self.wechatKey_count >= 1 and self.wechatKey_count <= 5: #防抖100ms
+ self.wechatKey_timer.stop()
+ self.wechatKey_count = 0
+ self.wechatKey_press = 0
+ self.wechatKey_press_count+=1
+ self.wechatKey_timer.start(600, 0, self.wechatKey_timeout_cb)#松手超时1s判断
+ else:
+ self.wechatKey_timer.stop()
+ self.wechatKey_count = 0
+ self.wechatKey_press = 0
+ self.wechatKey_press_count = 0
+
+ def wechatKey_timeout_cb(self, *args):#微聊键
+ print("wechatKey_timeout_cb!!!!!!!!!!!!!! ",self.wechatKey_press_count)
+ if self.wechatKey_press_count >= 10:#短按十次解绑app
+ self.wechatKey_press_count = 0
+ EventMesh.publish("reset_factor_setiing")#恢复出厂设置
+ pass
+ elif self.wechatKey_press_count >= 6:#短按六次播报imei号
+ self.wechatKey_press_count = 0
+ EventMesh.publish("play_imei_event")#播報imei号
+ pass
+ elif self.wechatKey_press_count >= 4:#拨打通讯录号码三
+ self.wechatKey_press_count = 0
+ EventMesh.publish("call_phonebook_three_call")
+ pass
+ elif self.wechatKey_press_count >= 3:#拨打通讯录号码二
+ self.wechatKey_press_count = 0
+ EventMesh.publish("call_phonebook_two_call")
+ pass
+ elif self.wechatKey_press_count >= 2:#拨打通讯录号码一
+ self.wechatKey_press_count = 0
+ EventMesh.publish("call_phonebook_one_call")
+ # EventMesh.publish("interup_call_event")#
+ pass
+ elif self.wechatKey_press_count >= 1:#播放最后收到的语音
+ self.wechatKey_press_count = 0
+ call_state = EventMesh.publish("get_call_state")
+ if call_state == 2:#电话拨进需要接听
+ EventMesh.publish("answer_call_event")#接听电话
+ else:
+ EventMesh.publish("play_wechat_last_amr")
+ pass
+ self.wechatKey_press_count = 0
+
+
+ def pwk_press_cb(self, *args):
+ '''KEY2:联动屏幕右下角或返回键长按关机'''
+ if self.pwk_press == 1 :
+
+ self.pwk_count += 1
+ print("self.pwk_count {}",self.pwk_count)
+ if self.GPIO26_status == 1:#松开
+ if self.pwk_count >= 1: #防抖100ms
+ self.__pwk_timer.stop()
+ self.pwk_count = 0
+ self.pwk_press = 0
+ print("self.GPIO22_status")
+
+ if self.pwk_count > (self.__PowerDownTimeOut//100): #长按
+ self.__pwk_timer.stop()
+ self.pwk_count = 0
+ self.pwk_press = 0
+ print("btn8_long_press")
+
+ def __ui_callback(self, para):
+ # print("para = {}".format(para))
+ if para == 0:
+ EventMesh.publish("done_left_to_right")
+ #print("<-")
+ elif para == 1:
+ EventMesh.publish("done_right_to_left")
+ #print("->")
+ elif para == 2:
+ EventMesh.publish("done_bottom_to_top")
+ #print("^")
+ elif para == 3:
+ EventMesh.publish("done_top_to_bottom")
+ #print("V")
+ elif para == 4:
+ EventMesh.publish("done_return")
+ #print("return")
+ elif para == 5:
+ EventMesh.publish("done_click")
+ #print("CLICK")
+ elif para == 6:
+ EventMesh.publish("done_press")
+ #print("press")
+ elif (para == 6):
+ EventMesh.publish("done_error")
+ #print("error")
+
+ def key_callback(self, l_list):
+ print("key_callback:",str(l_list))
+ if l_list[0] == 1:
+ # 马达震动预留
+ pass
+ if (l_list[1] == 3) and (l_list[2] == 0):
+ if l_list[0] == 1:
+ #self.pwk_press = 0
+ EventMesh.publish("btn1_press")
+ else:
+ pass
+ # EventMesh.publish("btn1_press")
+
+
+
+
+ def powerKey_callback(self, status):
+ print('==pwr:', status)# 0 1 0
+ self.powerKey_status = status
+ if self.pwk_press == 1: #按按钮时不处理
+ return
+
+
+
+
+ def power_key_press_cb(self, *args):
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 0:#未插卡的情况下强制关机
+ EventMesh.publish("open_power_on", 2)#
+
+
+ def start(self):
+ self.post_processor_after_instantiation()
--- /dev/null
+class PROTOCOL:
+ LK_SEND = "LK_SEND"
+ LK_RECV = "LK_RECV"
+
+ PING_SEND = "PING_SEND"
+ PING_RECV = "PING_RECV"
+
+ KA_SEND = "KA_SEND"
+ KA_RECV = "KA_RECV"
+
+ UD_SEND = "UD_SEND"
+ UD_RECV = "UD_RECV"
+
+ CR_SEND = "CR_SEND"
+ CR_RECV = "CR_RECV"
+
+ FIND_SEND = "FIND_SEND"
+ FIND_RECV = "FIND_RECV"
+
+ POWEROFF_SEND = "POWEROFF_SEND"
+ POWEROFF_RECV = "POWEROFF_RECV"
+
+ PHL_SEND = "PHL_SEND"
+ PHL_RECV = "PHL_RECV"
+
+ TK_SEND = "TK_SEND"
+ TK_RECV = "TK_RECV"
+
+ MESSAGE_SEND = "MESSAGE_SEND"
+ MESSAGE_RECV = "MESSAGE_RECV"
+
+ WT_SEND = "WT_SEND"
+ WT_RECV = "WT_RECV"
+
+ REMIND_SEND = "REMIND_SEND"
+ REMIND_RECV = "REMIND_RECV"
+
+ HRTSTART_SEND = "hrtstart_SEND"
+ HRTSTART_RECV = "hrtstart_RECV"
+
+ HEART_SEND = "heart_SEND"
+ HEART_RECV = "heart_RECV"
+
+ OXYGEN_SEND = "oxygen_SEND"
+ OXYGEN_RECV = "oxygen_RECV"
+
+ OXSTART_SEND = "oxstart_SEND"
+ OXSTART_RECV = "oxstart_RECV"
+
+ TEMP_SEND = "temp_SEND"
+ TEMP_RECV = "temp_RECV"
+
+ DLT_SEND = "DLT_SEND"
+ DLT_RECV = "DLT_RECV"
+
+ UPLOAD_SEND = "UPLOAD_SEND"
+ UPLOAD_RECV = "UPLOAD_RECV"
+
+ CENTER_SEND = "CENTER_SEND"
+ CENTER_RECV = "CENTER_RECV"
+
+ MONITOR_SEND = "MONITOR_SEND"
+ MONITOR_RECV = "MONITOR_RECV"
+
+ SOS_SEND = "SOS_SEND"
+ SOS_RECV = "SOS_RECV"
+
+ BOOTOFF_SEND = "BOOTOFF_SEND"
+ BOOTOFF_RECV = "BOOTOFF_RECV"
+
+ WDSTART_SEND ="wdstart_SEND"
+ WDSTART_RECV ="wdstart_RECV"
+
+
+ LOWBAT_SEND = "LOWBAT_SEND"
+ LOWBAT_RECV = "LOWBAT_RECV"
+
+ TIME_SEND = "Time_SEND"
+ TIME_RECV = "Time_RECV"
+
+ WLKEY_SEND = "WLKEY_SEND"
+ WLKEY_RECV = "WLKEY_RECV"
+
+ SILENCETIME2_SEND = "SILENCETIME2_SEND"
+ SILENCETIME2_RECV = "SILENCETIME2_RECV"
+
+ KEYBRD_SEND = "KEYBRD_SEND"
+ KEYBRD_RECV = "KEYBRD_RECV"
+
+
+class EVENT:
+ CHANNEL_SOCKET_SEND = "CHANNEL_SOCKET_SEND"
+ START_LOCATION = "START_LOCATION"
+ START_LOCATION_TEST = "START_LOCATION_TEST"
+ READ_LOCATION = "READ_LOCATION"
+ CLOSE_LOCATION = "CLOSE_LOCATION"
+ GPSOPEN = "GPSOPEN"
+ GPSCLOSE = "GPSCLOSE"
+ GPSINFO = "GPSINFO"
+ WIFISCANOPEN = "WIFISCANOPEN"
+ WIFIINFO = "WIFIINFO"
+
+ GET_KEY = "GET_KEY"
+ SET_KEY = "SET_KEY"
+ GET_IMEI = "GET_IMEI"
+ GET_CID = "GET_CID"
+ SET_CID = "SET_CID"
+ GET_IMSI = "GET_IMSI"
+ GET_PASSWORD = "GET_PASSWORD"
+ SET_PASSWORD = "SET_PASSWORD"
+ GET_BATTERY = "GET_BATTERY"
+ PERSISTENT_CONFIG_GET = "PERSISTENT_CONFIG_GET"
+ PERSISTENT_CONFIG_STORE = "PERSISTENT_CONFIG_STORE"
+ SET_PING = "SET_PING"
+ GET_PING = "GET_PING"
+ SET_CONNECT = "SET_CONNECT"
+ GET_CONNECT = "GET_CONNECT"
+ GET_STEP = "GET_STEP"
+ PUSH_STEP = "PUSH_STEP"
+ SYSTEM_SLEEP = "SYSTEM_SLEEP"
+ SYSTEM_UP = "SYSTEM_UP"
+ START_HEART = "START_HEART"
+ GET_HEART = "GET_HEART"
+ STOP_HEART = "STOP_HEART"
+ GET_WEAR = "GET_WEAR"
+ START_TEMP = "START_TEMP"
+ STOP_TEMP = "STOP_TEMP"
+ GET_TEMP = "GET_TEMP"
+ START_BLOOD_OXYGEN = "STARTT_BLOOD_OXYGEN"
+ GET_BLOOD_OXYGEN = "GET_BLOOD_OXYGEN"
+ STOP_BLOOD_OXYGEN = "STOP_BLOOD_OXYGEN"
--- /dev/null
+import log
+from machine import I2C
+import utime
+from machine import Pin
+import uos
+
+# from ext import capacitive_hynitron_cst816d_update_new
+import capacitive_hynitron_cst816d_update
+
+TP_HYN_I2C_UPDATE_WRITE_ADDR = (0x6A<<1)
+TP_HYN_I2C_UPDATE_READ_ADDR = ((0x6A<<1)|1)
+PER_LEN = 512
+x = 0
+y = 0
+#---------------------------------------------------------------------
+# cst816d_read_checksum
+#---------------------------------------------------------------------
+def cst816d_read_checksum():
+
+ if -1 == cst816d_enter_bootmode():
+ return -1
+
+ i2c_obj = I2C(I2C.I2C2, I2C.FAST_MODE)
+ cmd = [0]
+
+ if -1 == i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x03]), 2, bytearray(cmd), 1):
+ return -1
+ utime.sleep_ms(500)#这里延时太短会读错checksum
+
+ r_data = bytearray(2)
+ if -1 == i2c_obj.read(TP_HYN_I2C_UPDATE_READ_ADDR>>1, bytearray([0xa0,0x08]), 2, r_data, 2, 0):
+ return -1
+ check_sum = (r_data[1] << 8) | r_data[0]
+ print("check_sum的值为:",check_sum)
+ return check_sum
+#---------------------------------------------------------------------
+# GPIO_ResetTP
+#---------------------------------------------------------------------
+def GPIO_ResetTP():
+
+ print("GPIO_ResetTP")
+
+ gpio_power = Pin(Pin.GPIO18, Pin.OUT, Pin.PULL_PU, 0)
+ gpio_power.write(1)
+
+ gpio_reset = Pin(Pin.GPIO32, Pin.OUT, Pin.PULL_PU, 0)
+ gpio_reset.write(0)
+ utime.sleep_ms(10)
+ gpio_reset.write(1)
+ utime.sleep_ms(10)
+
+#---------------------------------------------------------------------
+# cst816d_update
+#---------------------------------------------------------------------
+def cst816d_update(startAddr, length, data):
+ print("cst816d_update")
+ if -1 == cst816d_enter_bootmode():
+ return -1
+
+ sum_len = 0
+ cmd = [0,0]
+ global x
+ while 1:
+ x += 1
+ if sum_len >= length:
+ print("sum_len >= length,退出循环")
+ return
+ a = startAddr&0xFF
+ cmd[0]=a
+ b = startAddr>>8
+ cmd[1]=b
+ i2c_obj = I2C(I2C.I2C2, I2C.FAST_MODE)
+
+ ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x14]), 2, bytearray(cmd), 2)
+ utime.sleep_ms(100)
+
+ ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x18]), 2, bytearray(data), PER_LEN)
+
+ utime.sleep_ms(100)
+
+ cmd[0] = 0xEE
+ ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x04]), 2, bytearray(cmd), 1)
+
+ utime.sleep_ms(100)
+
+ retrycnt = 51
+ for i in range (retrycnt):
+ r_data = bytearray(1)
+ ret = i2c_obj.read(TP_HYN_I2C_UPDATE_READ_ADDR>>1, bytearray([0xa0,0x05]), 2, r_data, 1, 0)
+ utime.sleep_ms(50)
+
+ if r_data[0] == 0x55:
+ print("r_data[0] = 0x55,break")
+ break
+
+ startAddr = startAddr + PER_LEN
+ del data[0:PER_LEN]
+ sum_len = sum_len + PER_LEN
+
+#---------------------------------------------------------------------
+# cst816d_enter_bootmode
+#---------------------------------------------------------------------
+def cst816d_enter_bootmode():
+
+ GPIO_ResetTP()
+ i2c_obj = I2C(I2C.I2C2, I2C.FAST_MODE)
+
+ cmd = [0xAB]
+ #进入boot模式
+ retrycnt = 10
+ global y
+ for i in range (retrycnt):
+ y += 1
+ if 0 == i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x01]), 2, bytearray(cmd), 1):
+ utime.sleep_ms(100)
+ else:
+ print("boot模式写命令失败")
+
+ r_data = bytearray(1)
+ if -1 == i2c_obj.read(TP_HYN_I2C_UPDATE_READ_ADDR>>1, bytearray([0xa0,0x03]), 2, r_data, 1, 0):
+ utime.sleep_ms(100)
+ else:
+ if 0xc1 == r_data[0]:
+ utime.sleep_ms(100)
+ return 0
+ else:
+ print("boot模式进入失败")
+
+ return -1
+#---------------------------------------------------------------------
+# ctp_hynitron_update
+#---------------------------------------------------------------------
+def ctp_hynitron_update():
+
+ # 初始化固件数组和数组长度
+ p_app_bin = []
+ app_bin_len = 0
+
+ #进入boot模式
+ # if -1 == cst816d_enter_bootmode():
+ # return
+
+ # 获取固件数组
+ # p_app_bin = capacitive_hynitron_cst816d_update_new.app_bin_816d
+ p_app_bin = capacitive_hynitron_cst816d_update.app_bin_816d
+
+ # 获取固件数组的长度
+ app_bin_len = len(p_app_bin)
+
+ if app_bin_len > 10:
+ startAddr = p_app_bin[1]
+ length = p_app_bin[3]
+ checksum = p_app_bin[5] #a8 78
+
+ startAddr <<= 8; startAddr |= p_app_bin[0]
+ length <<= 8; length |= p_app_bin[2]
+ checksum <<= 8; checksum |= p_app_bin[4]
+
+ print("startAddr:%x"%startAddr)
+ print("length:%x"%length)
+ print("checksum:%x"%checksum)
+
+
+ #检查checksum
+ sum_now = cst816d_read_checksum()
+ if sum_now == -1:
+ print("初始化失败")
+ elif sum_now != checksum:
+ print("固件包checksum不相同!")
+
+ del p_app_bin[0:6]
+ cst816d_update(startAddr, length, p_app_bin)
+
+ #升级后再次确认checksum
+ if checksum == cst816d_read_checksum():
+ print("固件升级成功!")
+
+ elif checksum == sum_now:
+ print("固件包checksum相同,退出")
+
+
+#---------------------------------------------------------------------
+# HYN_Initial
+#---------------------------------------------------------------------
+def HYN_Initial():
+
+ #GPIO_ResetTP()
+
+ ctp_hynitron_update()
+
+ GPIO_ResetTP()
+
+
+
+
+
+
--- /dev/null
+import lvgl as lv
+from machine import LCD, Pin
+from tp import cst816
+import _thread
+import utime
+import EventMesh
+from misc import PWM
+
+print("cst816 init...")
+from btn_device_ec800m import BtnDevice
+btn_device = BtnDevice()
+btn_device.start()
+
+
+
+
+
+
+
+
--- /dev/null
+from common import Abstract
+import osTimer
+import EventMesh
+from machine import Pin
+import utime
+
+from queue import Queue
+import _thread
+import usys
+
+led_red = Pin(Pin.GPIO36, Pin.OUT, Pin.PULL_PD, 0)
+
+led_green = Pin(Pin.GPIO44, Pin.OUT, Pin.PULL_PD, 0)
+
+led_white = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_PD, 0)
+
+
+
+def green_light_fast(num,freq):#快闪 num 循环闪烁次数 freq 交替闪烁的频率ms单位
+ for i in range(num):
+ led_green.write(1)
+ utime.sleep_ms(freq)
+ led_green.write(0)
+ utime.sleep_ms(freq)
+
+def red_light_fast(num,freq):#快闪 #快闪 num 循环闪烁次数 freq 交替闪烁的频率ms单位
+ for i in range(num):
+ led_red.write(1)
+ utime.sleep_ms(freq)
+ led_red.write(0)
+ utime.sleep_ms(freq)
+def red_light_slow(num,freq):#慢闪 #快闪 num 循环闪烁次数 freq 交替闪烁的频率ms单位
+ for i in range(10):
+ led_red.write(1)
+ utime.sleep_ms(500)
+ led_red.write(0)
+ utime.sleep_ms(500)
+
+def red_green_light(num,freq):#红绿灯交替闪烁
+ for i in range(num):
+ led_red.write(1)
+ utime.sleep_ms(freq)
+ led_red.write(0)
+ utime.sleep_ms(freq)
+ led_green.write(1)
+ utime.sleep_ms(freq)
+ led_green.write(0)
+ utime.sleep_ms(freq)
+
+def open_led_red():
+ led_red.write(1)
+
+def close_led_red():
+ led_red.write(0)
+
+def open_led_white():
+ led_white.write(1)
+
+def close_led_white():
+ led_white.write(0)
+
+def open_led_green():
+ led_green.write(1)
+
+def close_led_green():
+ led_green.write(0)
+
+motor_pin = Pin(Pin.GPIO20, Pin.OUT, Pin.PULL_PD, 0)
+def open_motor():#开马达
+ motor_pin.write(1)
+
+def close_motor():#关闭马达
+ motor_pin.write(0)
+
+
+LED_TIMER_OUT = 100
+class led_mode:
+ LONG_LIGHT_RED = 1
+ LONG_LIGHT_GREEN = 2
+ LONG_LIGHT_WHITE = 3
+ FLASH_LIGHT_RED = 4
+ FLASH_LIGHT_GREEN = 5
+ FLASH_LIGHT_WHITE = 6
+ FLASH_LIGHT_RED_GREEN = 7
+ FLASH_LIGHT_RED_WHITE = 8
+ FLASH_LIGHT_GREEN_WHITE = 9
+ LIGHT_NONE = FLASH_LIGHT_GREEN_WHITE+1
+
+ DEFAULT_LONG_LIGHT_MODE = 0+LIGHT_NONE #默认是关闭
+ OPEN_LONG_LIGHT_MODE = 1+LIGHT_NONE#开启
+ CLOSE_LONG_LIGHT_MODE = 2+LIGHT_NONE#需要关闭
+ INTERVAL_LIGHT_RED = 3+LIGHT_NONE
+ INTERVAL_LIGHT_GREEN = 4+LIGHT_NONE
+ INTERVAL_LIGHT_WHITE = 5+LIGHT_NONE
+
+ OTHER_MEASURE_MODE = 200
+
+ HEALTH_LED_MODE = 201 #健康测试模式
+ WECHAT_LED_MODE = 202 #微聊模式
+ CHARGE_IN_MODE = 203 #充电模式
+ CHARGE_OUT_MODE = 204 #充电已移出
+ CHARGE_FULL_MODE = 205 #充电已满
+
+
+
+MOTOR_TIME = 100
+class motorEventManager(Abstract):#马达事件
+ def __init__(self):
+ self.motor_timer = osTimer()
+ self.motorInfo_queue = Queue()
+ self.motor_enable = 0#马达使能
+ self.motor_total_time = 0#总的时间
+ self.motor_open_time = 0 #开马达事件
+ self.motor_close_time = 0#关马达事件100ms
+ self.motor_count = 0
+ self.motor_mode = 0#模式
+ _thread.start_new_thread(self.motorInfo_queue_thread, ())
+ EventMesh.subscribe("publish_message_event_motorInfo",self.publish_message_event_motorInfo)
+ pass
+
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_motor_time", self.set_motor_time)#设置参数
+ EventMesh.subscribe("close_motor_infor", self.close_motor_infor)#关闭马达和定时器
+
+ # msg 0马达使能 1 马达振动时间100ms单位 2 震动次数 3 间隔时间振动 4 是否需要长振 5 长振时间 6间隔时间长振 7长振次数1一次 要为200ms的倍数
+ def set_motor_time(self,event,msg):
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ if msg != None:
+ self.motor_enable = msg[0]
+ if self.motor_enable == 1: #马达使能
+ self.motor_mode = msg [1]
+ self.motor_total_time = msg[2]#总的时间
+ self.motor_open_time = msg[3] #开马达事件
+ self.motor_close_time = msg[4]#关马达事件100ms
+ self.motor_count = 0
+ self.motor_timer.stop()
+ self.motor_timer.start(MOTOR_TIME,1,self.publish_motor_event_cb)
+
+ def motor_fun_cb(self, data):
+ if self.motor_mode == 0 or self.motor_enable == 0:
+ self.motor_timer.stop()
+ return
+ if self.motor_mode == 1:#
+ if self.motor_total_time > 0:
+ self.motor_total_time-=1
+ if self.motor_total_time > 0:
+ open_motor()
+ else:
+ close_motor()
+ EventMesh.publish("close_motor_infor")#关闭马达和定时器
+ elif self.motor_mode == 2:#
+ self.motor_count+1
+ if self.motor_count % (self.motor_open_time) < self.motor_close_time: # 4 4 2 1%4 = 1 2%4 = 2 3%4 = 3
+ open_motor()
+ else:
+ close_motor()
+ if self.motor_count >= self.motor_total_time:
+ EventMesh.publish("close_motor_infor")#关闭马达和定时器
+
+ def close_motor_infor(self,event,msg):
+ close_motor()
+ self.motor_enable = 0#马达使能
+ self.motor_total_time = 0#总的时间
+ self.motor_open_time = 0 #开马达事件
+ self.motor_close_time = 0#关马达事件100ms
+ self.motor_count = 0
+ self.motor_mode = 0#模式
+ self.motor_timer.stop()
+
+ pass
+
+
+ def motorInfo_queue_thread(self):
+ while True:
+ data = self.motorInfo_queue.get()
+ #print("ledInfo_queue:data = {}".format(data))
+ if data != None:
+ try:
+ data["func"](data["data"])
+ except Exception as e:
+ print("ledInfo_queue:ERROR:{}".format(e))
+ usys.print_exception(e)
+ def publish_message_event_motorInfo(self,event,msg):
+ self.motorInfo_queue.put(msg)
+
+ def publish_motor_event_cb(self, *args, **kwargs):
+ EventMesh.publish("publish_message_event_motorInfo",{"func":self.motor_fun_cb,"data":0})
+
+class ledEventManager(Abstract):#灯事件
+ def __init__(self):
+ self.timer = osTimer()
+ self.freq_time = 0#交替闪烁时间 最小100ms
+ self.freq_num = 0#交替闪烁的次数
+ self.flash_light = 0
+ self.total_time = 0
+ self.long_count = 0
+ self.timer_state = 0
+ self.total_count = 0
+ self.freq = 0
+ self.led_state = 0
+ self.long_light_mode = 0
+ self.hr_state = 0
+ self.wechat_btn = 1
+ self.need_hr_btn = 0
+ self.led_open_time = 0
+ self.led_close_time = 0
+ self.led_total_time = 0#闪的总时间
+ self.led_enable = 0
+ self.working_led_mode = None
+ self.ledInfo_queue = Queue()
+ _thread.start_new_thread(self.ledInfo_queue_thread, ())
+ EventMesh.subscribe("publish_message_event_ledInfo",self.publish_message_event_ledInfo)
+ pass
+
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_led_time_arg", self.set_led_time_arg)#设置参数
+ EventMesh.subscribe("get_led_state", self.get_led_state)#设置参数
+
+ EventMesh.subscribe("set_hr_blood_led", self.set_hr_blood_led)#设置参数
+
+ EventMesh.subscribe("set_find_watch_led", self.set_find_watch_led)#设置参数
+
+ EventMesh.subscribe("close_all_led", self.close_all_led)#设置参数
+
+ EventMesh.subscribe("stop_led_timer", self.stop_led_timer)#设置参数
+
+ EventMesh.subscribe("read_red_led_level", self.read_red_led_level)#读取红灯的电平状态
+
+ EventMesh.subscribe("read_green_led_level", self.read_green_led_level)#读取绿灯的电平状态
+
+ EventMesh.subscribe("read_white_led_level", self.read_white_led_level)#读取白灯的电平状态
+
+ EventMesh.subscribe("close_led_pin", self.close_led_pin)#读取白灯的电平状态def close_led_pin(self, event, msg):
+
+ def ledInfo_queue_thread(self):
+ while True:
+ data = self.ledInfo_queue.get()
+ #print("ledInfo_queue:data = {}".format(data))
+ if data != None:
+ try:
+ data["func"](data["data"])
+ except Exception as e:
+ print("ledInfo_queue:ERROR:{}".format(e))
+ usys.print_exception(e)
+ def publish_message_event_ledInfo(self,event,msg):
+ self.ledInfo_queue.put(msg)
+
+
+
+ def publish_led_event_cb(self, *args, **kwargs):
+ EventMesh.publish("publish_message_event_ledInfo",{"func":self.led_fun_cb,"data":0})
+
+ def read_red_led_level(self, event, msg): #
+ red_level = led_red.read()
+ return red_level
+
+ def read_green_led_level(self, event, msg): #
+ green_level = led_green.read()
+ return green_level
+
+ def read_white_led_level(self, event, msg): #
+ white_level = led_green.read()
+ return white_level
+
+ def set_hr_blood_led(self, event, msg): #
+ print("set_hr_blood_led :{}".format(msg))
+ if msg != None:
+ if msg == 1:
+ EventMesh.publish("set_led_time_arg",[1,2,10*70,led_mode.FLASH_LIGHT_RED_GREEN,10,5,led_mode.HEALTH_LED_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1000,200,300,led_mode.FLASH_LIGHT_RED_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.HEALTH_LED_MODE])#開始測量
+ elif msg == 2:
+ EventMesh.publish("set_led_time_arg",[1,1,300,led_mode.FLASH_LIGHT_GREEN,31,10*3,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[3000,1000,1,led_mode.LONG_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#測量成功
+ elif msg == 3:
+ EventMesh.publish("set_led_time_arg",[1,1,300,led_mode.FLASH_LIGHT_RED,31,10*3,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[3000,1000,1,led_mode.LONG_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#測量失敗
+ #加音频文件
+
+ def set_find_watch_led(self, event, msg): #查找设备
+ EventMesh.publish("OPEN_FIND_WATCH")#
+ # EventMesh.publish("set_led_time_arg",[37000,1000,1,led_mode.LONG_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#查找设备绿灯长亮37s
+
+ def get_led_state(self, event, msg): #
+ return self.timer_state
+ def open_timer(self,msg):
+ if msg != None:
+ if len(msg) != 0:
+ self.led_total_time = msg[2]#
+ print("open_timer:{}".format(msg))
+ if self.led_total_time != None:
+ if self.led_total_time > 0:
+ self.led_enable=msg[0]
+ if self.led_enable != 0:
+ self.led_mode = msg[1]
+ self.long_light_mode = msg[3]
+ self.led_open_time = msg[4]
+ self.led_close_time = msg[5]
+ self.working_led_mode = msg[6]
+ self.long_count = 0
+
+ if self.timer_state == 0:
+ self.timer_state = 1
+ self.timer.stop()
+ EventMesh.publish("close_led_pin")
+ self.timer.start(LED_TIMER_OUT,1,self.publish_led_event_cb)
+
+ def set_led_time_arg(self, event, msg): #msg
+ print("set_led_time_arg",msg)
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ usb_in = EventMesh.publish("get_usb")#
+ # print("usb_in",usb_in)
+ if usb_in != None:
+ if usb_in == 1 or usb_in == 3:#正在充电或者充电已满都不要被打断
+ if self.timer_state == 1:
+ self.timer_state = 0
+ self.timer.stop()
+ if usb_in == 1:
+ if self.working_led_mode != led_mode.CHARGE_IN_MODE:
+ str_buf = [1,1,10,led_mode.LONG_LIGHT_RED,4,2,led_mode.CHARGE_IN_MODE]
+ self.open_timer(str_buf)
+ self.working_led_mode = led_mode.CHARGE_IN_MODE
+
+ elif usb_in == 3:
+ if self.working_led_mode != led_mode.CHARGE_FULL_MODE:
+ str_buf = [1,1,10,led_mode.LONG_LIGHT_GREEN,4,2,led_mode.CHARGE_FULL_MODE]
+ self.open_timer(str_buf)
+ self.working_led_mode = led_mode.CHARGE_FULL_MODE
+
+ return
+ else:
+ if msg[5] != led_mode.HEALTH_LED_MODE:
+ self.working_led_mode = led_mode.OTHER_MEASURE_MODE
+
+ get_hr_state = EventMesh.publish("get_hr_state")
+ get_spo2_state = EventMesh.publish("get_spo2_state")
+
+ wechat_state = EventMesh.publish("get_wechat_state")
+ print("get_hr_state",get_hr_state,get_spo2_state,wechat_state,self.working_led_mode)
+ if wechat_state != None: #获取微聊状态
+ if wechat_state == 1:
+ if self.working_led_mode != led_mode.WECHAT_LED_MODE:#如果不在亮微聊模式需要亮微聊模式
+ self.timer_state = 0
+ self.timer.stop()
+ str_buf = [1,1,1,led_mode.LONG_LIGHT_GREEN,4,2,led_mode.WECHAT_LED_MODE]
+ self.open_timer(str_buf)
+ self.working_led_mode = led_mode.WECHAT_LED_MODE
+ return
+ else:
+ return
+
+ else:
+ self.wechat_btn = 0
+ if get_hr_state != 0 or get_spo2_state != 0 :#心率血氧优先级高
+ if self.working_led_mode != led_mode.HEALTH_LED_MODE:#如果不在亮微聊模式需要亮微聊模式
+ print("set_hr_blood_led!!!!!!!!!!")
+ str_buf = [1,2,10*70,led_mode.FLASH_LIGHT_RED_GREEN,10,5,led_mode.HEALTH_LED_MODE]#測量成功
+ self.timer_state = 0
+ self.timer.stop()
+ self.open_timer(str_buf)
+ self.working_led_mode = led_mode.HEALTH_LED_MODE
+ return
+ else:
+ print("set_hr_blood_led stop!!!!!!!!!!")
+ return
+ if get_hr_state == 0 and get_spo2_state == 0:
+ self.working_led_mode = led_mode.OTHER_MEASURE_MODE
+
+ self.open_timer(msg)
+
+
+ def stop_led_timer(self, event, msg):
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ if open_power != None:
+ if open_power == 0:
+ return
+ EventMesh.publish("close_all_led")#关闭所有的灯
+ # EventMesh.publish("set_led_time_arg",[1,2,2*300,led_mode.FLASH_LIGHT_RED_GREEN,2,1,led_mode.HEALTH_LED_MODE])#測量成功
+ def led_fun_cb(self, data):#
+ if self.led_enable ==0 and self.led_total_time == 0:
+ return
+ # print("self.long_count",self.long_count)
+ if self.led_total_time != 0:
+ #红灯闪烁
+ if self.long_light_mode == led_mode.FLASH_LIGHT_RED :#
+ if self.led_mode == 1:
+ if self.led_total_time > 0:
+ self.led_total_time-=1
+ if self.led_total_time > 0:
+ close_led_green()
+ close_led_white()
+ open_led_red()
+ else:
+ EventMesh.publish("stop_led_timer")#关闭所有的灯
+ elif self.led_mode == 2:
+ self.long_count+=1
+ if self.long_count % (self.led_open_time) < self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms
+ close_led_green()
+ close_led_white()
+ open_led_red()
+ pass
+ else:
+ close_led_green()
+ close_led_white()
+ close_led_red()
+ pass
+ if self.long_count >= self.led_total_time:#大于总的时间 4
+ EventMesh.publish("stop_led_timer")#设置参数
+ pass
+ #绿灯闪烁
+ elif self.long_light_mode == led_mode.FLASH_LIGHT_GREEN:#
+ if self.led_mode == 1:#长亮时间限制
+
+ if self.led_total_time > 0:
+ self.led_total_time-=1
+ if self.led_total_time > 0:
+ close_led_red()
+ close_led_white()
+ open_led_green()
+ else:
+ EventMesh.publish("stop_led_timer")#关闭所有的灯
+
+
+ elif self.led_mode == 2:
+ self.long_count+=1
+ if self.long_count % (self.led_open_time) < self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms
+ close_led_red()
+ close_led_white()
+ open_led_green()
+ pass
+ else:
+ close_led_green()
+ close_led_white()
+ close_led_red()
+ pass
+ if self.long_count >= self.led_total_time:#大于总的时间 4
+ EventMesh.publish("stop_led_timer")#设置参数
+ pass
+ #蓝灯闪烁 暂时是白色灯
+ elif self.long_light_mode == led_mode.FLASH_LIGHT_WHITE:#
+ if self.led_mode == 1:#长亮时间限制
+ if self.led_total_time > 0:
+ self.led_total_time-=1
+ if self.led_total_time > 0:
+ close_led_red()
+ close_led_green()
+ open_led_white()
+ else:
+ EventMesh.publish("stop_led_timer")#关闭所有的灯
+ elif self.led_mode == 2:
+ self.long_count+=1
+ if self.long_count % (self.led_open_time) < self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms
+ close_led_red()
+ close_led_green()
+ open_led_white()
+ pass
+ else:
+ close_led_green()
+ close_led_white()
+ close_led_red()
+ pass
+ if self.long_count >= self.led_total_time:#大于总的时间 4
+ EventMesh.publish("stop_led_timer")#设置参数
+ pass
+ #红绿灯闪烁
+ elif self.long_light_mode == led_mode.FLASH_LIGHT_RED_GREEN:#
+ self.long_count+=1
+
+ if self.long_count % (self.led_open_time) < self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms
+ close_led_white()#白色灯
+ close_led_green()
+ open_led_red()
+ pass
+ else:
+ close_led_white()
+ close_led_red()
+ open_led_green()
+ pass
+ if self.long_count >= self.led_total_time:#大于总的时间 4
+ EventMesh.publish("stop_led_timer")#设置参数
+ pass
+ #红蓝灯闪烁 蓝变成白色灯
+ elif self.long_light_mode == led_mode.FLASH_LIGHT_RED_WHITE:#
+ self.long_count+=1
+ if self.long_count % (self.led_open_time) < self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms
+ close_led_white()#白色灯
+ close_led_green()
+ open_led_red()
+ pass
+ else:
+ close_led_green()
+ close_led_red()
+ open_led_white()
+ pass
+ if self.long_count >= self.led_total_time:#大于总的时间 4
+ EventMesh.publish("stop_led_timer")#设置参数
+ pass
+ #蓝绿灯闪烁
+ elif self.long_light_mode == led_mode.FLASH_LIGHT_GREEN_WHITE:#
+
+ self.long_count+=1
+ if self.long_count % (self.led_open_time) < self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms
+ close_led_white()#白色灯
+ close_led_red()
+ open_led_green()
+ pass
+ else:
+ close_led_green()
+ close_led_red()
+ open_led_white()
+ pass
+ if self.long_count >= self.led_total_time:#大于总的时间 4
+ EventMesh.publish("stop_led_timer")#设置参数
+ pass
+ #红灯长亮
+ elif self.long_light_mode == led_mode.LONG_LIGHT_RED:#
+ close_led_white()#白色灯
+ close_led_green()
+ open_led_red()
+ #绿灯长亮
+ elif self.long_light_mode == led_mode.LONG_LIGHT_GREEN:#
+ close_led_white()#白色灯
+ close_led_red()
+ open_led_green()
+ #蓝灯长亮
+ elif self.long_light_mode == led_mode.LONG_LIGHT_WHITE:#
+ close_led_green()#白色灯
+ close_led_red()
+ open_led_white()
+
+ def close_led_pin(self, event, msg):
+ close_led_red()
+ close_led_green()
+ close_led_white()
+
+ def close_all_led(self, event, msg):
+ print("close_all_led!!!!")
+ usb_in = EventMesh.publish("get_usb")#
+ if usb_in != None:
+ if usb_in == 1 or usb_in == 3:#正在充电或者充电已满都不要被打断
+ self.timer_state = 0
+ self.timer.stop()
+ return
+ else:
+ get_hr_state = EventMesh.publish("get_hr_state")
+ get_spo2_state = EventMesh.publish("get_spo2_state")
+
+ wechat_state = EventMesh.publish("get_wechat_state")
+ print("get_hr_state",get_hr_state,get_spo2_state,wechat_state,self.working_led_mode)
+ if wechat_state != None: #获取微聊状态
+ if wechat_state == 1 or get_spo2_state != 0 or get_hr_state != 0:
+ return
+ self.timer_state = 0
+ self.timer.stop()
+ self.led_total_time = 0
+ self.led_enable = 0
+ self.led_mode = 0
+ self.long_light_mode = 0
+ self.led_open_time = 0
+ self.led_close_time = 0
+ self.working_led_mode = 0
+ self.long_count = 0
+ close_led_red()
+ close_led_green()
+ close_led_white()
+ print("close led!!!")
+
+
+ def led_test_fun_cb(self, data):
+ return
+ if 0:
+ # print("self.freq_time :{} self.freq_num:{} self.flash_light:{}".format(self.freq_time,self.freq_num,self.flash_light))
+ if self.freq_time != 0 and self.freq_num != 0 and self.flash_light != 0:
+ if self.flash_light == led_mode.LONG_LIGHT_RED:
+ if self.total_time != 0:
+ if self.long_light_mode == led_mode.DEFAULT_LONG_LIGHT_MODE:#不是长亮模式 只需要长亮3 5 7 s这样就关闭长亮
+ count = self.total_time//LED_TIMER_OUT#100ms单位
+ self.long_count+=1
+ if self.long_count == 1:
+ close_led_green()
+ close_led_white()
+ open_led_red()#亮红灯 高电平
+
+ elif self.long_count >= count :#不开长亮 只亮3 5 s这样就直接关闭
+ close_led_red()#亮红灯 低电平
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ elif self.long_light_mode == led_mode.OPEN_LONG_LIGHT_MODE:#开启长亮,需要手动发指令关闭长亮模式
+ EventMesh.publish("stop_led_timer")#设置参数
+ close_led_green()
+ close_led_white()
+ open_led_red()#亮红灯 高电平
+
+
+ elif self.long_light_mode == led_mode.CLOSE_LONG_LIGHT_MODE:#关闭长亮模式
+ close_led_red()#亮红灯 低电平
+ EventMesh.publish("stop_led_timer")#设置参数
+ else:
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ elif self.flash_light == led_mode.LONG_LIGHT_GREEN:
+ if self.total_time != 0:
+ if self.long_light_mode == led_mode.DEFAULT_LONG_LIGHT_MODE:#不是长亮模式 只需要长亮3 5 7 s这样就关闭长亮
+ count = self.total_time//LED_TIMER_OUT#100ms单位
+ self.long_count+=1
+ if self.long_count == 1:
+ close_led_red()
+ close_led_white()
+ open_led_green()#亮绿灯 高电平
+
+ elif self.long_count >= count :#不开长亮 只亮3 5 s这样就直接关闭
+ close_led_green()#亮绿灯 低电平
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ elif self.long_light_mode == led_mode.OPEN_LONG_LIGHT_MODE:#开启长亮,需要手动发指令关闭长亮模式
+ EventMesh.publish("stop_led_timer")#设置参数
+ close_led_red()
+ close_led_white()
+ open_led_green()#亮绿灯 高电平
+
+
+ elif self.long_light_mode == led_mode.CLOSE_LONG_LIGHT_MODE:#关闭长亮模式
+ close_led_green()#亮绿灯 低电平
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ else:
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ elif self.flash_light == led_mode.LONG_LIGHT_WHITE:
+ if self.total_time != 0:
+ if self.long_light_mode == led_mode.DEFAULT_LONG_LIGHT_MODE:#不是长亮模式 只需要长亮3 5 7 s这样就关闭长亮
+ count = self.total_time//LED_TIMER_OUT#100ms单位
+ self.long_count+=1
+ if self.long_count == 1:
+ close_led_green()
+ close_led_red()
+ open_led_white()#亮绿灯 高电平
+ elif self.long_count >= count:
+ close_led_white()#亮绿灯 低电平
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ elif self.long_light_mode == led_mode.OPEN_LONG_LIGHT_MODE:#开启长亮,需要手动发指令关闭长亮模式
+ EventMesh.publish("stop_led_timer")#设置参数
+ close_led_green()
+ close_led_red()
+ open_led_white()#亮绿灯 高电平
+
+ elif self.long_light_mode == led_mode.CLOSE_LONG_LIGHT_MODE:#开启长亮,需要手动发指令关闭长亮模式
+ close_led_white()#亮绿灯 低电平
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ else:#防止长亮时未设置长亮总时长 未设置不开灯
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ elif self.flash_light == led_mode.FLASH_LIGHT_RED:#红灯快速闪烁 灭灯时间和闪烁时间一致
+ if self.total_time != 0:
+ count = self.freq_num
+ self.freq = self.freq_time // LED_TIMER_OUT#
+ self.long_count+=1
+ # print("self.freq : {} FLASH_LIGHT_RED count :{} self.long_count:{} self.total_count:{}".format(self.freq,count,self.long_count,self.total_count))
+ if self.long_count == 1:#间隔多久闪一次 100ms单位
+ close_led_green()
+ close_led_white()
+ open_led_red()#亮白灯 高电平
+ elif self.long_count == self.freq+1:
+ self.total_count+=1
+ close_led_red()#亮白灯 低电平
+ if self.long_count >= self.freq*2:
+ self.long_count = 0
+
+ # print("self.total_count:{}".format(self.total_count))
+ if self.total_count >= count:
+ close_led_red()#亮白灯 低电平
+ self.total_count = 0
+ self.long_count = 0
+ EventMesh.publish("stop_led_timer")#设置参数
+
+
+ else:#防止长亮时未设置长亮总时长 未设置不开灯
+ EventMesh.publish("stop_led_timer")#设置参数
+ elif self.flash_light == led_mode.FLASH_LIGHT_GREEN:#绿灯快速闪烁
+ if self.total_time != 0:
+ count = self.freq_num
+ self.freq = self.freq_time // LED_TIMER_OUT#
+ self.long_count+=1
+ # print("self.freq : {} FLASH_LIGHT_GREEN count :{} self.long_count:{} self.total_count:{}".format(self.freq,count,self.long_count,self.total_count))
+ if self.long_count == 1:#间隔多久闪一次 100ms单位
+ close_led_red()
+ close_led_white()
+ open_led_green()#亮白灯 高电平
+ elif self.long_count == self.freq+1:
+ self.total_count+=1
+ close_led_green()#亮白灯 低电平
+ if self.long_count >= self.freq*2:
+ self.long_count = 0
+
+ # print("self.total_count:{}".format(self.total_count))
+ if self.total_count >= count:
+ close_led_green()#亮白灯 低电平
+ self.total_count = 0
+ self.long_count = 0
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ else:#防止长亮时未设置长亮总时长 未设置不开灯
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ elif self.flash_light == led_mode.FLASH_LIGHT_WHITE:#白灯灯快速闪烁
+ if self.total_time != 0:
+ count = self.freq_num
+ self.freq = self.freq_time // LED_TIMER_OUT#
+ self.long_count+=1
+ # print("self.freq : {} FLASH_LIGHT_WHITE count :{} self.long_count:{} self.total_count:{}".format(self.freq,count,self.long_count,self.total_count))
+ if self.long_count == 1:#间隔多久闪一次 100ms单位
+ close_led_green()
+ close_led_red()
+ open_led_white()#亮白灯 高电平
+ elif self.long_count == self.freq+1:
+ self.total_count+=1
+ close_led_white()#亮白灯 低电平
+ if self.long_count >= self.freq*2:
+ self.long_count = 0
+
+ # print("self.total_count:{}".format(self.total_count))
+ if self.total_count >= count:
+ close_led_white()#亮白灯 低电平
+ self.total_count = 0
+ self.long_count = 0
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ else:#防止长亮时未设置长亮总时长 未设置不开灯
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ elif self.flash_light == led_mode.INTERVAL_LIGHT_RED:#间隔闪烁
+ if self.total_time != 0:
+ count = self.freq_num
+ self.freq = self.freq_time // LED_TIMER_OUT#
+ self.long_count+=1
+ # print("self.freq : {} FLASH_LIGHT_RED count :{} self.long_count:{} self.total_count:{}".format(self.freq,count,self.long_count,self.total_count))
+ if self.long_count == 1:#间隔多久闪一次 100ms单位
+ close_led_green()
+ close_led_white()
+ open_led_red()#亮白灯 高电平
+ elif self.long_count == self.freq+1:
+ self.total_count+=1
+ close_led_red()#亮白灯 低电平
+ if self.long_count >= self.freq*2:
+ self.long_count = 0
+
+ # print("self.total_count:{}".format(self.total_count))
+ if self.total_count >= count:
+ close_led_red()#亮白灯 低电平
+ self.total_count = 0
+ self.long_count = 0
+ EventMesh.publish("stop_led_timer")#设置参数
+
+
+ else:#防止长亮时未设置长亮总时长 未设置不开灯
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ elif self.flash_light == led_mode.INTERVAL_LIGHT_GREEN:#绿灯快速闪烁
+ if self.total_time != 0:
+ count = self.freq_num
+ self.freq = self.freq_time // LED_TIMER_OUT#
+ self.long_count+=1
+ # print("self.freq : {} FLASH_LIGHT_GREEN count :{} self.long_count:{} self.total_count:{}".format(self.freq,count,self.long_count,self.total_count))
+ if self.long_count == 1:#间隔多久闪一次 100ms单位
+ close_led_red()
+ close_led_white()
+ open_led_green()#亮白灯 高电平
+ elif self.long_count == self.freq+1:
+ self.total_count+=1
+ close_led_green()#亮白灯 低电平
+ if self.long_count >= self.freq*2:
+ self.long_count = 0
+
+ # print("self.total_count:{}".format(self.total_count))
+ if self.total_count >= count:
+ close_led_green()#亮白灯 低电平
+ self.total_count = 0
+ self.long_count = 0
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ else:#防止长亮时未设置长亮总时长 未设置不开灯
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ elif self.flash_light == led_mode.INTERVAL_LIGHT_WHITE:#白灯灯快速闪烁
+ if self.total_time != 0:
+ count = self.freq_num
+ self.freq = self.freq_time // LED_TIMER_OUT#
+ self.long_count+=1
+ # print("self.freq : {} FLASH_LIGHT_WHITE count :{} self.long_count:{} self.total_count:{}".format(self.freq,count,self.long_count,self.total_count))
+ if self.long_count == 1:#间隔多久闪一次 100ms单位
+ close_led_green()
+ close_led_red()
+ open_led_white()#亮白灯 高电平
+ elif self.long_count == self.freq+1:
+ self.total_count+=1
+ close_led_white()#亮白灯 低电平
+ if self.long_count >= self.freq*2:
+ self.long_count = 0
+
+ # print("self.total_count:{}".format(self.total_count))
+ if self.total_count >= count:
+ close_led_white()#亮白灯 低电平
+ self.total_count = 0
+ self.long_count = 0
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ else:#防止长亮时未设置长亮总时长 未设置不开灯
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ elif self.flash_light == led_mode.FLASH_LIGHT_RED_GREEN:#红绿灯灯快速闪烁
+ if self.total_time != 0:
+ count = self.freq_num
+ self.freq = self.freq_time // LED_TIMER_OUT#
+ self.long_count+=1
+ if self.long_count == 1:#间隔多久闪一次 100ms单位
+ close_led_white()
+ close_led_green()#亮白灯 低电平
+ open_led_red()#紅
+ elif self.long_count == 1*self.freq+1:#5 6 7 8
+ close_led_red()#亮白灯 低电平
+ close_led_green()#亮白灯 低电平
+
+ elif self.long_count == 2*self.freq+1:#5 6 7 8
+ open_led_green()#綠
+
+ elif self.long_count == 3*self.freq+1:#5 6 7 8
+ close_led_red()#亮白灯 低电平
+ close_led_green()#亮白灯 低电平
+ self.total_count += 1
+
+ if self.long_count >= 4*self.freq:
+ self.long_count = 0
+ # print("self.total_count:{}".format(self.total_count))
+ if self.total_count >= count:
+ close_led_green()#亮白灯 低电平
+ close_led_red()#亮白灯 低电平
+ self.long_count = 0
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ else:#防止长亮时未设置长亮总时长 未设置不开灯
+ EventMesh.publish("stop_led_timer")#设置参数
+ elif self.flash_light >= led_mode.LIGHT_NONE:#未知
+ EventMesh.publish("stop_led_timer")#设置参数
+
+ else:
+ EventMesh.publish("stop_led_timer")#关闭定时器和关闭所有的led灯
+
+
--- /dev/null
+# Copyright (c) Quectel Wireless Solution, Co., Ltd.All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import ure
+import net
+import math
+import utime
+import osTimer
+import _thread
+import wifiScan
+import cellLocator
+
+from queue import Queue
+from machine import UART, Pin
+
+try:
+ from wifilocator import wifilocator
+except:
+ wifilocator = None
+
+from log import getLogger
+
+try:
+ import quecgnss
+except ImportError:
+ quecgnss = None
+
+log = getLogger(__name__)
+
+_gps_read_lock = _thread.allocate_lock()
+_gps_data_set_lock = _thread.allocate_lock()
+
+EE = 0.00669342162296594323
+EARTH_RADIUS = 6378.137 # Approximate Earth Radius(km)
+M_PI = math.pi
+
+
+class _loc_method(object):
+ gps = 0x1
+ cell = 0x2
+ wifi = 0x4
+
+
+class _gps_mode(object):
+ none = 0x0
+ internal = 0x1
+ external = 0x2
+
+
+def transformLat(x, y):
+ ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * math.sqrt(math.fabs(x))
+ ret += (20.0 * math.sin(6.0 * x * M_PI) + 20.0 * math.sin(2.0 * x * M_PI)) * 2.0 / 3.0
+ ret += (20.0 * math.sin(y * M_PI) + 40.0 * math.sin(y / 3.0 * M_PI)) * 2.0 / 3.0
+ ret += (160.0 * math.sin(y / 12.0 * M_PI) + 320 * math.sin(y * M_PI / 30.0)) * 2.0 / 3.0
+ return ret
+
+
+def transformLon(x, y):
+ ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * math.sqrt(math.fabs(x))
+ ret += (20.0 * math.sin(6.0 * x * M_PI) + 20.0 * math.sin(2.0 * x * M_PI)) * 2.0 / 3.0
+ ret += (20.0 * math.sin(x * M_PI) + 40.0 * math.sin(x / 3.0 * M_PI)) * 2.0 / 3.0
+ ret += (150.0 * math.sin(x / 12.0 * M_PI) + 300.0 * math.sin(x / 30.0 * M_PI)) * 2.0 / 3.0
+ return ret
+
+
+def WGS84ToGCJ02(lon, lat):
+ dLat = transformLat(lon - 105.0, lat - 35.0)
+ dLon = transformLon(lon - 105.0, lat - 35.0)
+ radLat = lat / 180.0 * M_PI
+ magic = math.sin(radLat)
+ magic = 1 - magic * magic * EE
+ sqrtMagic = math.sqrt(magic)
+
+ dLat = (dLat * 180.0) / ((EARTH_RADIUS * 1000 * (1 - EE)) / (magic * sqrtMagic) * M_PI)
+ dLon = (dLon * 180.0) / (EARTH_RADIUS * 1000 / sqrtMagic * math.cos(radLat) * M_PI)
+ lon02 = lon + dLon
+ lat02 = lat + dLat
+
+ return lon02, lat02
+
+
+class GPSMatch(object):
+ """This class is match gps NEMA 0183"""
+
+ def GxRMC(self, gps_data):
+ """Match Recommended Minimum Specific GPS/TRANSIT Data(RMC)
+
+ Args:
+ gps_data(str): GPS NMEA string.
+
+ Returns:
+ str: RMC NMEA string.
+ """
+ if gps_data:
+ rmc_re = ure.search(
+ r"\$G[NP]RMC,\d*\.*\d*,*[AV],*\d*\.*\d*,*[NS],*\d*\.*\d*,*[EW],*\d*\.*\d*,*\d*\.*\d*,*\d*,*\d*\.*\d*,*[EW]*,*[ADEN]*,*[SCUV]*\**(\d|\w)*",
+ gps_data)
+ if rmc_re:
+ return rmc_re.group(0)
+ return ""
+
+ def GxGGA(self, gps_data):
+ """Match Global Positioning System Fix Data(GGA)
+
+ Args:
+ gps_data(str): GPS NMEA string.
+
+ Returns:
+ str: GGA NMEA string.
+ """
+ if gps_data:
+ gga_re = ure.search(
+ r"\$G[BLPN]GGA,\d*\.*\d*,*\d*\.*\d*,*[NS],*\d*\.*\d*,*[EW],*[0126],*\d*,*\d*\.*\d*,*-*\d*\.*\d*,*M,*-*\d*\.*\d*,*M,*\d*,*\**(\d|\w)*",
+ gps_data)
+ if gga_re:
+ return gga_re.group(0)
+ return ""
+
+ def GxVTG(self, gps_data):
+ """Match Track Made Good and Ground Speed(VTG)
+
+ Args:
+ gps_data(str): GPS NMEA string.
+
+ Returns:
+ str: VTG NMEA string.
+ """
+ if gps_data:
+ vtg_re = ure.search(r"\$G[NP]VTG,\d*\.*\d*,*T,*\d*\.*\d*,*M,*\d*\.*\d*,*N,*\d*\.*\d*,*K,*[ADEN]*\*(\d|\w)*",
+ gps_data)
+ if vtg_re:
+ return vtg_re.group(0)
+ return ""
+
+ def GxGSV(self, gps_data):
+ """Mactch GPS Satellites in View(GSV)
+
+ Args:
+ gps_data(str): GPS NMEA string.
+
+ Returns:
+ str: GSV NMEA string.
+ """
+ if gps_data:
+ gsv_re = ure.search(
+ r"\$G[NP]GSV,\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*\**(\d|\w)*",
+ gps_data)
+ if gsv_re:
+ return gsv_re.group(0)
+ return ""
+
+ def GxGLL(self, gps_data):
+ """Geographic Position
+
+ Args:
+ gps_data(str): GPS NMEA string.
+
+ Returns:
+ str: GLL NMEA string.
+ """
+ if gps_data:
+ gll_re = ure.search(r"\$G[NP]GLL,\d*\.*\d*,*[NS]*,*\d*\.*\d*,*[EW]*,*\d*\.*\d*,*[AV]*,*[ADEN]*\**(\d|\w)*",
+ gps_data)
+ if gll_re:
+ return gll_re.group(0)
+
+ def GxGSA(self, gps_data):
+ """GNSS DOP and Active Satellites
+
+ Args:
+ gps_data(str): GPS NMEA string.
+
+ Returns:
+ str: GSA NMEA string.
+ """
+ if gps_data:
+ gsa_re = ure.search(
+ r"\$G[NP]GSA,[MA]*,*[123]*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*\.*\d*,*\d*\.*\d*,*\d*\.*\d*,*(\d|\w)*\**(\d|\w)*",
+ gps_data)
+ if gsa_re:
+ return gsa_re.group(0)
+
+
+class GPSParse(object):
+ """Parse details from gps data"""
+
+ def GxGGA_satellite_num(self, gga_data):
+ """Parse satellite num from GGA"""
+ if gga_data:
+ satellite_num_re = ure.search(r",[EW],[0126],\d+,", gga_data)
+ if satellite_num_re:
+ return satellite_num_re.group(0).split(",")[-2]
+ return ""
+
+ def GxGGA_latitude(self, gga_data):
+ """Parse latitude from GGA"""
+ if gga_data:
+ latitude_re = ure.search(r",[0-9]+\.[0-9]+,[NS],", gga_data)
+ if latitude_re:
+ latitude = latitude_re.group(0)[1:-3]
+ return str(float(latitude[:2]) + float(latitude[2:]) / 60)
+ return ""
+
+ def GxGGA_longitude(self, gga_data):
+ """Parse longitude from GGA"""
+ if gga_data:
+ longitude_re = ure.search(r",[0-9]+\.[0-9]+,[EW],", gga_data)
+ if longitude_re:
+ longitude = longitude_re.group(0)[1:-3]
+ return str(float(longitude[:3]) + float(longitude[3:]) / 60)
+ return ""
+
+ def GxGGA_altitude(self, gga_data):
+ """Parse altitude from GGA"""
+ if gga_data:
+ altitude_re = ure.search(r",-*[0-9]+\.[0-9]+,M,", gga_data)
+ if altitude_re:
+ return altitude_re.group(0)[1:-3]
+ return ""
+
+ def GxVTG_speed(self, vtg_data):
+ """Parse speed from VTG"""
+ if vtg_data:
+ speed_re = ure.search(r",N,\d+\.\d+,K,", vtg_data)
+ if speed_re:
+ return speed_re.group(0)[3:-3]
+ return ""
+
+ def GxGSV_satellite_num(self, gsv_data):
+ """Parse satellite num from GSV"""
+ if gsv_data:
+ satellite_num_re = ure.search(r"\$G[NP]GSV,\d+,\d+,\d+,", gsv_data)
+ if satellite_num_re:
+ return satellite_num_re.group(0).split(",")[-2]
+ return ""
+
+ def GxRMC_loc_status(self, rmc_data):
+ if rmc_data:
+ loc_status_re = ure.search(r"\$G[NP]RMC,\d*\.*\d*,[AV],", rmc_data)
+ if loc_status_re:
+ loc_status = loc_status_re.group(0).split(",")[-2]
+ return True if loc_status == "A" else False
+ return False
+
+ def __nmea_parse(self, nmea):
+ return tuple(nmea[1:].split("*")[0].split(",")) if nmea else ()
+
+ def GxRMC(self, rmc_data):
+ return self.__nmea_parse(rmc_data)
+
+ def GxGGA(self, gga_data):
+ return self.__nmea_parse(gga_data)
+
+ def GxGSV(self, gsv_data):
+ return self.__nmea_parse(gsv_data)
+
+ def GxGSA(self, gsa_data):
+ return self.__nmea_parse(gsa_data)
+
+ def GxVTG(self, vtg_data):
+ return self.__nmea_parse(vtg_data)
+
+ def GxGLL(self, gll_data):
+ return self.__nmea_parse(gll_data)
+
+
+class GPS(object):
+ """This class if for reading gps data.
+
+ Now support external gps and internal gps.
+
+ Sleep power consumption:
+ power off < backup < standby
+ """
+
+ __RMC = 0
+ __GGA = 1
+ __GSV = 2
+ __GSA = 3
+ __VTG = 4
+ __GLL = 5
+ __NMEA = 0b010111
+
+ def __init__(self, UARTn, buadrate, databits, parity, stopbits, flowctl, PowerPin, StandbyPin, BackupPin, gps_mode):
+ """Init GPS module
+
+ [description]
+
+ Args:
+ UARTn(int): UART No.
+ buadrate(int): baud rate
+ databits(int): data bits (5 ~ 8)
+ parity(int): parity (0 – NONE,1 – EVEN,2 - ODD)
+ stopbits(int): stop bit
+ flowctl(int): hardware control flow (0 – FC_NONE, 1 – FC_HW)
+ PowerPin(int): Power GIPO Pin
+ StandbyPin(int): Standby GPIO Pin
+ BackupPin(int): Back GPIO Pin
+ gps_mode(int): GPS mode
+ 0 - None
+ 1 - internal GPS
+ 2 - external GPS
+ """
+ self.__UARTn = UARTn
+ self.__buadrate = buadrate
+ self.__databits = databits
+ self.__parity = parity
+ self.__stopbits = stopbits
+ self.__flowctl = flowctl
+ self.__PowerPin = PowerPin
+ self.__StandbyPin = StandbyPin
+ self.__BackupPin = BackupPin
+ self.__gps_mode = gps_mode
+
+ self.__external_obj = None
+ self.__internal_obj = quecgnss
+ self.__gps_match = GPSMatch()
+ self.__gps_parse = GPSParse()
+ self.__gps_power_gpio = None
+ self.__gps_standby_gpio = None
+ self.__gps_backup_gpio = None
+
+ self.__external_retrieve_queue = None
+ self.__queue_size = 2
+ self.__first_break = 0
+ self.__break = 0
+ self.__gps_data = ""
+ self.__rmc_data = ""
+ self.__gga_data = ""
+ self.__vtg_data = ""
+ self.__gsv_data = ""
+ self.__gps_timer = osTimer()
+ self.__gps_data_check_timer = osTimer()
+
+ if self.__gps_mode & _gps_mode.external:
+ self.__external_init()
+ elif self.__gps_mode & _gps_mode.internal:
+ self.__internal_init()
+ #print("GPS:__init__%d",self.__gps_mode)
+ def __gps_power_control(self, GPIOn, onoff, method):
+ if method == "power_switch":
+ if self.__gps_power_gpio is None:
+ self.__gps_power_gpio = Pin(GPIOn, Pin.OUT, Pin.PULL_DISABLE, onoff)
+ gpio_obj = self.__gps_power_gpio
+ elif method == "standby":
+ if self.__gps_standby_gpio is None:
+ self.__gps_standby_gpio = Pin(GPIOn, Pin.OUT, Pin.PULL_DISABLE, onoff)
+ gpio_obj = self.__gps_standby_gpio
+ elif method == "backup":
+ if self.__gps_backup_gpio is None:
+ self.__gps_backup_gpio = Pin(GPIOn, Pin.OUT, Pin.PULL_DISABLE, onoff)
+ gpio_obj = self.__gps_backup_gpio
+ else:
+ raise TypeError("Param method %s is not compare." % method)
+
+ if gpio_obj.read() != onoff:
+ gpio_obj.write(onoff)
+ if gpio_obj.read() != onoff:
+ return False
+ return True
+
+ def __reverse_gps_data(self, this_gps_data):
+ """Reverse GPS data for regular match get the latest data"""
+ log.debug("this_gps_data: \n%s" % this_gps_data)
+ delimiter = "\r\n"
+ if this_gps_data:
+ _gps_data = self.__get_gps_data()
+ if _gps_data:
+ _gps_data = delimiter.join(_gps_data.split(delimiter)[::-1])
+ _gps_data += this_gps_data.strip().replace("\r", "").replace("\n", "").replace("$", delimiter + "$")
+ _gps_data = delimiter.join(_gps_data.split(delimiter)[::-1])
+ self.__set_gps_data(_gps_data)
+
+ def __read_latitude(self, gps_data):
+ """Read latitude from gps data"""
+ return self.__gps_parse.GxGGA_latitude(self.__gps_match.GxGGA(gps_data))
+
+ def __read_longitude(self, gps_data):
+ """Read longitude from gps data"""
+ return self.__gps_parse.GxGGA_longitude(self.__gps_match.GxGGA(gps_data))
+
+ def __read_altitude(self, gps_data):
+ """Read altitude from gps data"""
+ return self.__gps_parse.GxGGA_altitude(self.__gps_match.GxGGA(gps_data))
+
+ def __set_gps_data(self, gps_data):
+ self.__gps_data = gps_data
+
+ def __get_gps_data(self):
+ return self.__gps_data
+
+ def __gps_timer_callback(self, args):
+ """GPS read timer callback
+ When over time to get uart data, break queue wait
+ """
+ self.__break = 1
+ if self.__external_retrieve_queue is not None:
+ self.__external_retrieve_queue.put(False)
+
+ def __gps_data_check_callback(self, args):
+ """GPS read old data clean timer callback
+ When GPS read over time, clean old gps data, wait to read new gps data.
+ """
+ clean = False
+ if "" in (self.__rmc_data, self.__gga_data, self.__gsv_data):
+ clean = True
+ else:
+ if self.__nmea_statement_exist(self.__GSA) and not self.__gsa_data:
+ clean = True
+ elif self.__nmea_statement_exist(self.__VTG) and not self.__vtg_data:
+ clean = True
+ elif self.__nmea_statement_exist(self.__GLL) and not self.__gll_data:
+ clean = True
+
+ if clean:
+ self.__gps_nmea_data_clean()
+
+ def __external_init(self):
+ """External GPS init"""
+ self.__external_retrieve_queue = Queue(maxsize=self.__queue_size)
+
+ def __external_open(self):
+ """External GPS start, UART init"""
+ self.power_switch(1)
+ self.__external_obj = UART(
+ self.__UARTn,
+ self.__buadrate,
+ self.__databits,
+ self.__parity,
+ self.__stopbits,
+ self.__flowctl
+ )
+ self.__external_obj.set_callback(self.__external_retrieve_cb)
+
+ def __external_close(self):
+ """External GPS close, UART close, NOT GPS stop"""
+ self.__external_obj.close()
+
+ def __external_retrieve_cb(self, args):
+ """
+ GPS data retrieve callback from UART
+ When data comes, send a message to queue of data length
+ """
+ # log.debug("GPS __external_retrieve_cb args: %s" % str(args))
+ if self.__external_retrieve_queue.size() >= self.__queue_size:
+ self.__external_retrieve_queue.get()
+ self.__external_retrieve_queue.put(True)
+
+ def __internal_init(self):
+ """Internal GPS init"""
+ if self.__internal_obj:
+ if self.__internal_obj.init() != 0:
+ self.__internal_open()
+ log.error("GNSS INIT Failed.")
+ else:
+ log.debug("GNSS INIT Success.")
+ else:
+ log.error("Module quecgnss Import Error.")
+
+ def __internal_open(self):
+ """Internal GPS enable"""
+ if self.__internal_obj.get_state() == 0:
+ return True if self.__internal_obj.gnssEnable(1) == 0 else False
+ else:
+ return True
+
+ def __internal_close(self):
+ """Internal GPS close"""
+ return True if self.__internal_obj.gnssEnable(0) == 0 else False
+
+ def __nmea_statement_exist(self, nmea_item):
+ return (self.__NMEA & (0b1 << nmea_item)) >> nmea_item
+
+ def __gps_nmea_data_clean(self):
+ self.__set_gps_data("")
+ self.__rmc_data = ""
+ self.__gga_data = ""
+ self.__gsv_data = ""
+ self.__gsa_data = ""
+ self.__vtg_data = ""
+ self.__gll_data = ""
+
+ def __check_gps_valid(self, gps_data):
+ self.__reverse_gps_data(gps_data)
+
+ if not self.__rmc_data:
+ self.__rmc_data = self.__gps_match.GxRMC(self.__get_gps_data())
+ loc_status = self.__gps_parse.GxRMC_loc_status(self.__rmc_data)
+
+ if self.__rmc_data and loc_status:
+ if self.__nmea_statement_exist(self.__GGA) and not self.__gga_data:
+ self.__gga_data = self.__gps_match.GxGGA(self.__get_gps_data())
+ if self.__nmea_statement_exist(self.__GSV) and not self.__gsv_data:
+ self.__gsv_data = self.__gps_match.GxGSV(self.__get_gps_data())
+ if self.__nmea_statement_exist(self.__GSA) and not self.__gsa_data:
+ self.__gsa_data = self.__gps_match.GxGSA(self.__get_gps_data())
+ if self.__nmea_statement_exist(self.__VTG) and not self.__vtg_data:
+ self.__vtg_data = self.__gps_match.GxVTG(self.__get_gps_data())
+ if self.__nmea_statement_exist(self.__GLL) and not self.__gll_data:
+ self.__gll_data = self.__gps_match.GxGLL(self.__get_gps_data())
+
+ if self.__nmea_statement_exist(self.__GGA) and not self.__gga_data:
+ return False
+ if self.__nmea_statement_exist(self.__GSV) and not self.__gsv_data:
+ return False
+ if self.__nmea_statement_exist(self.__GSA) and not self.__gsa_data:
+ return False
+ if self.__nmea_statement_exist(self.__VTG) and not self.__vtg_data:
+ return False
+ if self.__nmea_statement_exist(self.__GLL) and not self.__gll_data:
+ return False
+ return True
+
+ return False
+
+ def __external_read(self):
+ """Read external GPS data
+
+ Return:
+ $GPTXT,01,01,02,ANTSTATUS=OPEN*2B
+ $GNRMC,073144.000,A,3149.330773,N,11706.946971,E,0.00,337.47,150422,,,D,V*07
+ $GNVTG,337.47,T,,M,0.00,N,0.00,K,D*22
+ $GNGGA,073144.000,3149.330773,N,11706.946971,E,2,19,0.66,85.161,M,-0.335,M,,*56
+ $GNGSA,A,3,01,195,06,03,21,194,19,17,30,14,,,0.94,0.66,0.66,1*02
+ $GNGSA,A,3,13,26,07,10,24,25,08,03,22,,,,0.94,0.66,0.66,4*03
+ $GPGSV,3,1,12,14,84,210,31,195,67,057,46,17,52,328,28,50,51,161,33,1*54
+ $GPGSV,3,2,12,194,49,157,33,03,48,090,37,19,36,305,32,06,34,242,32,1*58
+ $GPGSV,3,3,12,01,32,041,35,30,17,204,22,21,07,051,13,07,03,183,,1*6B
+ $BDGSV,5,1,18,07,86,063,30,10,75,322,30,08,60,211,34,03,52,192,33,1*71
+ $BDGSV,5,2,18,24,44,276,33,13,43,215,33,01,43,135,30,26,40,208,37,1*71
+ $BDGSV,5,3,18,02,38,230,,04,32,119,,22,26,135,30,19,25,076,,1*70
+ $BDGSV,5,4,18,05,17,251,,25,06,322,27,09,02,211,22,21,02,179,,1*78
+ $BDGSV,5,5,18,29,02,075,,20,01,035,,1*72
+ $GNGLL,3149.330773,N,11706.946971,E,073144.000,A,D*4E
+ """
+ self.__external_open()
+ log.debug("__external_read start")
+
+ while self.__break == 0:
+ self.__gps_timer.start(50, 0, self.__gps_timer_callback)
+ signal = self.__external_retrieve_queue.get()
+ log.debug("[first] signal: %s" % signal)
+ if signal:
+ to_read = self.__external_obj.any()
+ log.debug("[first] to_read: %s" % to_read)
+ if to_read > 0:
+ self.__set_gps_data(self.__external_obj.read(to_read).decode())
+ self.__gps_timer.stop()
+ self.__break = 0
+
+ self.__gps_nmea_data_clean()
+ self.__gps_data_check_timer.start(2000, 1, self.__gps_data_check_callback)
+ cycle = 0
+ while self.__break == 0:
+ self.__gps_timer.start(1500, 0, self.__gps_timer_callback)
+ signal = self.__external_retrieve_queue.get()
+ log.debug("[second] signal: %s" % signal)
+ if signal:
+ to_read = self.__external_obj.any()
+ log.debug("[second] to_read: %s" % to_read)
+ if to_read > 0:
+ if self.__check_gps_valid(self.__external_obj.read(to_read).decode()):
+ self.__break = 1
+
+ self.__gps_timer.stop()
+ cycle += 1
+ if cycle >= self.__retry:
+ self.__break = 1
+ if self.__break != 1:
+ utime.sleep(1)
+ self.__gps_data_check_timer.stop()
+ self.__break = 0
+
+ # To check GPS data is usable or not.
+ self.__gps_data_check_callback(None)
+ self.__external_close()
+ log.debug("__external_read data: %s" % self.__get_gps_data())
+ return self.__get_gps_data()
+
+ def __internal_read(self):
+ import EventMesh
+ log.debug("__internal_read start.")
+ """Read internal GPS data
+
+ Return:
+ $GPTXT,01,01,02,ANTSTATUS=OPEN*2B
+ $GNRMC,073144.000,A,3149.330773,N,11706.946971,E,0.00,337.47,150422,,,D,V*07
+ $GNVTG,337.47,T,,M,0.00,N,0.00,K,D*22
+ $GNGGA,073144.000,3149.330773,N,11706.946971,E,2,19,0.66,85.161,M,-0.335,M,,*56
+ $GNGSA,A,3,01,195,06,03,21,194,19,17,30,14,,,0.94,0.66,0.66,1*02
+ $GNGSA,A,3,13,26,07,10,24,25,08,03,22,,,,0.94,0.66,0.66,4*03
+ $GPGSV,3,1,12,14,84,210,31,195,67,057,46,17,52,328,28,50,51,161,33,1*54
+ $GPGSV,3,2,12,194,49,157,33,03,48,090,37,19,36,305,32,06,34,242,32,1*58
+ $GPGSV,3,3,12,01,32,041,35,30,17,204,22,21,07,051,13,07,03,183,,1*6B
+ $BDGSV,5,1,18,07,86,063,30,10,75,322,30,08,60,211,34,03,52,192,33,1*71
+ $BDGSV,5,2,18,24,44,276,33,13,43,215,33,01,43,135,30,26,40,208,37,1*71
+ $BDGSV,5,3,18,02,38,230,,04,32,119,,22,26,135,30,19,25,076,,1*70
+ $BDGSV,5,4,18,05,17,251,,25,06,322,27,09,02,211,22,21,02,179,,1*78
+ $BDGSV,5,5,18,29,02,075,,20,01,035,,1*72
+ $GNGLL,3149.330773,N,11706.946971,E,073144.000,A,D*4E
+ """
+
+ #self.__gps_nmea_data_clean()
+
+ cycle = 0
+ #while self.__break == 0:
+ gnss_data = quecgnss.read(1024*3)
+ #print("__internal_read")
+ #print(gnss_data)
+ if gnss_data and gnss_data[1]:
+ this_gps_data = gnss_data[1].decode() if len(gnss_data) > 1 and gnss_data[1] else ""
+ _gps_valid = self.__check_gps_valid(this_gps_data)
+ log.debug("_gps_valid: %s" % _gps_valid)
+
+ #print("_gps_valid:",_gps_valid)
+ #print(str(_gps_valid),self.__get_gps_data())
+ if _gps_valid == True :
+ #EventMesh.publish("time", [self.__get_gps_data(),"0",str(_gps_valid),"0"])
+ return self.__get_gps_data()
+ else :
+ EventMesh.publish("time", [self.__get_gps_data(),"0",str(_gps_valid),"0"])
+ return ""
+
+ def read(self, retry=30):
+ """For user to read gps data
+
+ Return: (res_code, gps_data)
+ res_code:
+ - 0: Success
+ - -1: Failed
+ gps_data:
+ $GPTXT,01,01,02,ANTSTATUS=OPEN*2B
+ $GNRMC,073144.000,A,3149.330773,N,11706.946971,E,0.00,337.47,150422,,,D,V*07
+ $GNVTG,337.47,T,,M,0.00,N,0.00,K,D*22
+ $GNGGA,073144.000,3149.330773,N,11706.946971,E,2,19,0.66,85.161,M,-0.335,M,,*56
+ $GNGSA,A,3,01,195,06,03,21,194,19,17,30,14,,,0.94,0.66,0.66,1*02
+ $GNGSA,A,3,13,26,07,10,24,25,08,03,22,,,,0.94,0.66,0.66,4*03
+ $GPGSV,3,1,12,14,84,210,31,195,67,057,46,17,52,328,28,50,51,161,33,1*54
+ $GPGSV,3,2,12,194,49,157,33,03,48,090,37,19,36,305,32,06,34,242,32,1*58
+ $GPGSV,3,3,12,01,32,041,35,30,17,204,22,21,07,051,13,07,03,183,,1*6B
+ $BDGSV,5,1,18,07,86,063,30,10,75,322,30,08,60,211,34,03,52,192,33,1*71
+ $BDGSV,5,2,18,24,44,276,33,13,43,215,33,01,43,135,30,26,40,208,37,1*71
+ $BDGSV,5,3,18,02,38,230,,04,32,119,,22,26,135,30,19,25,076,,1*70
+ $BDGSV,5,4,18,05,17,251,,25,06,322,27,09,02,211,22,21,02,179,,1*78
+ $BDGSV,5,5,18,29,02,075,,20,01,035,,1*72
+ $GNGLL,3149.330773,N,11706.946971,E,073144.000,A,D*4E
+ """
+ self.__retry = retry
+ gps_data = ""
+ if self.__gps_mode & _gps_mode.external:
+ gps_data = self.__external_read()
+ elif self.__gps_mode & _gps_mode.internal:
+ gps_data = self.__internal_read()
+
+ res = 0 if gps_data else -1
+ return (res, gps_data)
+
+ def read_coordinates(self, gps_data):
+ """Read positioning coordinates.
+
+ Params:
+ gps_data: read gps data.
+ map_coordinate_system: `WGS84` or GCJ02
+
+ Return:
+ (longitude, latitude, altitude)
+ """
+ latitude = self.__read_latitude(gps_data)
+ latitude = float(latitude) if latitude else latitude
+ longitude = self.__read_longitude(gps_data)
+ longitude = float(longitude) if longitude else longitude
+ altitude = self.__read_altitude(gps_data)
+ altitude = float(altitude) if altitude else altitude
+ return (longitude, latitude, altitude)
+
+ def power_switch(self, onoff):
+ """GPS module power switch
+
+ Params:
+ onoff: 0 -- off, 1 -- on
+ """
+ if self.__gps_mode & _gps_mode.external:
+ if self.__PowerPin is not None:
+ return self.__gps_power_control(self.__PowerPin, onoff, "power_switch")
+ else:
+ return False
+ elif self.__gps_mode & _gps_mode.internal:
+ # TODO: Interal GNSS power down will not be used this api.
+ if onoff == 0:
+ return self.__internal_close()
+ else:
+ return self.__internal_open()
+
+ def backup(self, onoff):
+ """GPS module low enery mode backup
+
+ Params:
+ onoff: 0 -- off, 1 -- on
+ """
+ if self.__BackupPin is not None:
+ return self.__gps_power_control(self.__BackupPin, onoff, "backup")
+ else:
+ return False
+
+ def standby(self, onoff):
+ """GPS module low enery mode standby
+
+ Params:
+ onoff: 0 -- off, 1 -- on
+ """
+ if self.__StandbyPin is not None:
+ return self.__gps_power_control(self.__StandbyPin, onoff, "standby")
+ else:
+ return False
+
+ def set_nmea_statement(self, nmea_statement):
+ """Set NMEA statement to check gps info valid
+
+ RMC, GGA, GSV must be required.
+
+ Args:
+ nmea_statement(int):
+ RMC - 0b1 << 0 (bit0), 0 - off, 1 - on
+ GGA - 0b1 << 1 (bit1), 0 - off, 1 - on
+ GSV - 0b1 << 2 (bit2), 0 - off, 1 - on
+ GSA - 0b1 << 3 (bit3), 0 - off, 1 - on
+ VTG - 0b1 << 4 (bit4), 0 - off, 1 - on
+ GLL - 0b1 << 5 (bit5), 0 - off, 1 - on
+
+ Returns:
+ bool: True - success, False - falied.
+ """
+ if nmea_statement >= 0b111:
+ self.__NMEA = nmea_statement
+ return True
+ return False
+
+
+class CellLocator(object):
+ """This class is for reading cell location data"""
+
+ def __init__(self, serverAddr, port, token, timeout, profileIdx):
+ self.__serverAddr = serverAddr
+ self.__port = port
+ self.__token = token
+ self.__timeout = timeout
+ self.__profileIdx = profileIdx
+
+ def read(self):
+ read_loc_res = self.__read_loc()
+ read_cell_res = self.__read_cell()
+ res = 0 if read_loc_res[0] == 0 or read_cell_res[0] == 0 else -1
+ return (res, read_loc_res[1], read_cell_res[1])
+
+ def __read_loc(self):
+ """Read cell location data.
+
+ Return: (res_code, loc_data)
+ res_code:
+ - 0: Success
+ - -1: Initialization failed
+ - -2: The server address is too long (more than 255 bytes)
+ - -3: Wrong key length, must be 16 bytes
+ - -4: The timeout period is out of range, the supported range is (1 ~ 300) s
+ - -5: The specified PDP network is not connected, please confirm whether the PDP is correct
+ - -6: Error getting coordinates
+ loc_data:
+ (117.1138, 31.82279, 550)
+ """
+ res = -1
+ loc_data = cellLocator.getLocation(
+ self.__serverAddr,
+ self.__port,
+ self.__token,
+ self.__timeout,
+ self.__profileIdx
+ )
+ if isinstance(loc_data, tuple) and len(loc_data) == 3:
+ res = 0
+ else:
+ res = loc_data
+ loc_data = ()
+
+ return (res, loc_data)
+
+ def __read_cell(self):
+ res = -1
+ near_cell = []
+ server_cell = []
+
+ near_cells = net.getCi()
+ if near_cells != -1 and isinstance(near_cells, list):
+ near_cell = list(map(str, near_cells))
+
+ server_cells = net.getCellInfo()
+ if server_cells != -1 and isinstance(server_cells, tuple):
+ server_cell = server_cells
+
+ res = 0 if near_cell or server_cell else -1
+ return (res, {"near_cell": near_cell, "server_cell": server_cell})
+
+
+class WiFiLocator(object):
+ """This class is for reading wifi location data"""
+
+ def __init__(self, token):
+ self.__wifilocator_obj = wifilocator(token)
+
+ def read(self):
+ read_loc_res = self.__read_loc()
+ read_mac_res = self.__read_mac()
+ res = 0 if read_loc_res[0] == 0 or read_mac_res[0] == 0 else -1
+ return (res, read_loc_res[1], read_mac_res[1])
+
+ def __read_loc(self):
+ """Read wifi location data.
+
+ Return: (res_code, loc_data)
+ res_code:
+ - 0: Success
+ - -1: The current network is abnormal, please confirm whether the dial-up is normal
+ - -2: Wrong key length, must be 16 bytes
+ - -3: Error getting coordinates
+ loc_data:
+ (117.1138, 31.82279, 550)
+ """
+ res = -1
+ loc_data = self.__wifilocator_obj.getwifilocator()
+ if isinstance(loc_data, tuple) and len(loc_data) == 3:
+ res = 0
+ else:
+ res = loc_data
+ loc_data = ()
+
+ return (res, loc_data)
+
+ def __read_mac(self):
+ res = -1
+ macs = []
+ if wifiScan.support():
+ if wifiScan.control(1) == 0:
+ if wifiScan.getState():
+ wifisacn_start = wifiScan.start()
+ if wifisacn_start != -1 and wifisacn_start[0] > 0:
+ macs = [i[0] for i in wifisacn_start[1]]
+ res = 0
+ wifiScan.control(0)
+ return (res, macs)
+
+
+class Location(object):
+ """This class is for reading location data from gps, cell, wifi"""
+ gps = None
+ cellLoc = None
+ wifiLoc = None
+
+ def __init__(self, loc_method, locator_init_params):
+ """Init Location module
+
+ 1. If loc_method include gps then init gps module;
+ 2. If loc_method inculde cell then init cell module;
+ 3. If loc_method Include wifi then init wifi module;
+
+ Args:
+ loc_method(int):
+ 1 - gps
+ 2 - cell
+ 3 - cell & gps
+ 4 - wifi
+ 5 - wifi & gps
+ 6 - wifi & cell
+ 7 - wifi & cell & gps
+ locator_init_params(dict):
+ gps_cfg(dict):GPS module init args
+ cell_cfg(dict):CELL module init args
+ wifi_cfg(dict):WIFI module init args
+ """
+ self.__loc_method = loc_method
+ self.__locator_init_params = locator_init_params
+ self.__locater_init()
+
+ def __locater_init(self):
+ """Init gps, cell, wifi by loc_method"""
+
+ if self.__loc_method & _loc_method.gps:
+ if self.gps is None:
+ _gps_cfg = self.__locator_init_params.get("gps_cfg", {})
+ if _gps_cfg:
+ self.gps = GPS(**_gps_cfg)
+ if _gps_cfg.get("nmea_cfg") is not None:
+ self.gps.set_nmea_statement(_gps_cfg.get("nmea_cfg"))
+ else:
+ raise ValueError("Invalid gps init parameters.")
+ else:
+ self.gps = None
+
+ if self.__loc_method & _loc_method.cell:
+ if self.cellLoc is None:
+ _cell_cfg = self.__locator_init_params.get("cell_cfg")
+ if _cell_cfg:
+ self.cellLoc = CellLocator(**_cell_cfg)
+ else:
+ raise ValueError("Invalid cell-locator init parameters.")
+ else:
+ self.cellLoc = None
+
+ if self.__loc_method & _loc_method.wifi:
+ if self.wifiLoc is None:
+ _wifi_cfg = self.__locator_init_params.get("wifi_cfg")
+ if _wifi_cfg:
+ self.wifiLoc = WiFiLocator(**_wifi_cfg)
+ else:
+ raise ValueError("Invalid wifi-locator init parameters.")
+ else:
+ self.wifiLoc = None
+
+ def __read_gps(self, retry):
+ """Read loction data from gps module
+
+ Return:
+ $GPTXT,01,01,02,ANTSTATUS=OPEN*2B
+ $GNRMC,073144.000,A,3149.330773,N,11706.946971,E,0.00,337.47,150422,,,D,V*07
+ $GNVTG,337.47,T,,M,0.00,N,0.00,K,D*22
+ $GNGGA,073144.000,3149.330773,N,11706.946971,E,2,19,0.66,85.161,M,-0.335,M,,*56
+ $GNGSA,A,3,01,195,06,03,21,194,19,17,30,14,,,0.94,0.66,0.66,1*02
+ $GNGSA,A,3,13,26,07,10,24,25,08,03,22,,,,0.94,0.66,0.66,4*03
+ $GPGSV,3,1,12,14,84,210,31,195,67,057,46,17,52,328,28,50,51,161,33,1*54
+ $GPGSV,3,2,12,194,49,157,33,03,48,090,37,19,36,305,32,06,34,242,32,1*58
+ $GPGSV,3,3,12,01,32,041,35,30,17,204,22,21,07,051,13,07,03,183,,1*6B
+ $BDGSV,5,1,18,07,86,063,30,10,75,322,30,08,60,211,34,03,52,192,33,1*71
+ $BDGSV,5,2,18,24,44,276,33,13,43,215,33,01,43,135,30,26,40,208,37,1*71
+ $BDGSV,5,3,18,02,38,230,,04,32,119,,22,26,135,30,19,25,076,,1*70
+ $BDGSV,5,4,18,05,17,251,,25,06,322,27,09,02,211,22,21,02,179,,1*78
+ $BDGSV,5,5,18,29,02,075,,20,01,035,,1*72
+ $GNGLL,3149.330773,N,11706.946971,E,073144.000,A,D*4E
+ """
+ if self.gps:
+ return self.gps.read(retry)[1]
+ return ""
+
+ def __read_cell(self):
+ """Read loction data from cell module
+
+ Return:
+ (117.1138, 31.82279, 550) or ()
+ """
+ if self.cellLoc:
+ cell_loc_data = self.cellLoc.read()
+ return (cell_loc_data[1], cell_loc_data[2])
+ return ()
+
+ def __read_wifi(self):
+ """Read loction data from wifi module
+
+ Return:
+ (117.1138, 31.82279, 550) or ()
+ """
+ if self.wifiLoc:
+ wifi_loc_data = self.wifiLoc.read()
+ return (wifi_loc_data[1], wifi_loc_data[2])
+ return ()
+
+ def read(self, retry=30):
+ """Read location data
+
+ args:
+ retry(int): gps read uart data retry count.
+
+ Returns:
+ dict:
+ key:
+ 1 - GPS data
+ 2 - CELL data
+ 4 - WIFI data
+ .e.g:
+ {
+ 1: "$GPGGA,XXX",
+ 2: (0.00, 0.00, 0.00),
+ 4: (0.00, 0.00, 0.00),
+ }
+ """
+ loc_data = {}
+
+ if self.__loc_method & _loc_method.gps:
+ loc_data[_loc_method.gps] = self.__read_gps(retry)
+
+ if self.__loc_method & _loc_method.cell:
+ loc_data[_loc_method.cell] = self.__read_cell()
+
+ if self.__loc_method & _loc_method.wifi:
+ loc_data[_loc_method.wifi] = self.__read_wifi()
+
+ return loc_data
+
+ def wgs84togcj02(self, Longitude, Latitude):
+ return WGS84ToGCJ02(Longitude, Latitude)
+
+
+if __name__ == '__main__':
+ _gps_cfg = {
+ "UARTn": UART.UART1,
+ "buadrate": 115200,
+ "databits": 8,
+ "parity": 0,
+ "stopbits": 1,
+ "flowctl": 0,
+ "PowerPin": Pin.GPIO2,
+ "StandbyPin": Pin.GPIO3,
+ "BackupPin": None,
+ "gps_mode": 0x01,
+ }
+ gps = GPS(**_gps_cfg)
+ print("read {}".format(gps.read(300)))
--- /dev/null
+import sms
+
+class App(object):
+ def __init__(self):
+ self.managers = []
+
+ def append_manager(self, manager):
+ if isinstance(manager, Abstract):
+ manager.post_processor_after_instantiation()
+ self.managers.append(manager)
+ return self
+
+ def start(self):
+ for manager in self.managers:
+ manager.post_processor_before_initialization()
+ manager.initialization()
+ manager.post_processor_after_initialization()
+
+
+class watchApp(App):
+ def __init__(self):
+ super(watchApp, self).__init__()
+ self.__ui = None
+
+ def set_ui(self, ui):
+ self.__ui = ui
+
+ def start(self):
+ if self.__ui is not None:
+ self.__ui.start()
+ super().start()
+
+
+
+if __name__ == '__main__':
+ import uos
+ import ql_fs
+ import utime
+ if ql_fs.path_exists("/ext") == False:
+ ldev = uos.VfsLfs1(32, 32, 32, "ext_fs",0,3)
+ uos.mount(ldev,'/ext')
+ res = uos.statvfs("/ext")
+ res = list(res)
+ print('总ext空间:{} MB,剩余空间:{} MB'.format((((res[0] * res[2]) / 1024 / 1024)),((res[0] * res[3]) / 1024 / 1024)))
+ print("init1:{}".format(utime.localtime()))
+ import EventMesh
+ from common import Abstract
+ print("init2:{}".format(utime.localtime()))
+ from lcd import tp_cst816
+ print("init3:{}".format(utime.localtime()))
+
+ from usr.ui_main_menu import MainMenuScreen
+ # from ui_WatchFaceScreen import WatchFaceScreen
+
+ from appFactoryMode import FactoryModeLocationScreen,FactoryModeScreen ,FactoryModeAlipayInitScreen
+ import ui as _ui
+ # import ui as _ui
+ print("init4:{}".format(utime.localtime()))
+ ui = _ui.UI()
+ ui.post_processor_after_instantiation()
+ ui.add_screen(MainMenuScreen())
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ print("init5:{}".format(utime.localtime()))
+
+ ui.add_screen(_ui.PopupScreen())
+ ui.add_screen(_ui.PhoneScreen())
+ ui.add_screen(_ui.HeartrateScreen())
+ import ui_setting as _ui_setting
+ ui.add_screen(_ui_setting.SettingScreen())
+ ui.add_screen(_ui.ToolboxScreen())
+ ui.add_screen(_ui.StepScreen())
+ ui.add_screen(_ui.CountdownScreen())
+ ui.add_screen(_ui.StopwatchScreen())
+ ui.add_screen(_ui.WeatherScreen())
+ ui.add_screen(_ui.Spo2Screen())
+ ui.add_screen(_ui.TemperatureScreen())
+ ui.add_screen(_ui.ContactsScreen())
+ from appWechat import WechatScreen,TK_ProtoCol,MESSAGE_ProtoCol,NewWechatPopupScreen
+ ui.add_screen(WechatScreen())
+ from alarm import ClkListScreen,ClockManager,NewEditClk,CLKTimeScreen,ClkPeriod,PopupAlarmScreen
+ from ui_health import HealthScreen
+ ui.add_screen(ClkListScreen())
+ ui.add_screen(_ui.CountdownEndScreen())
+ ui.add_screen(NewEditClk())
+ ui.add_screen(CLKTimeScreen())
+ ui.add_screen(ClkPeriod())
+
+ # ui.add_screen(_ui_setting.LanguageScreen())
+ ui.add_screen(_ui_setting.DialswitchScreen())
+ # ui.add_screen(_ui.ThemeswitchScreen())
+ ui.add_screen(_ui_setting.ImeiScreen())
+ ui.add_screen(_ui_setting.AppScreen())
+ ui.add_screen(_ui_setting.BrightnessScreen())
+ ui.add_screen(_ui_setting.VolumeScreen())
+ ui.add_screen(_ui_setting.RestoreScreen())
+ ui.add_screen(_ui_setting.PoweroffScreen())
+ ui.add_screen(_ui_setting.VersionScreen())
+ ui.add_screen(_ui_setting.UpdateScreen())
+ ui.add_screen(_ui_setting.AlarmvolumeScreen())
+ ui.add_screen(_ui_setting.MsgvolumeScreen())
+ ui.add_screen(_ui_setting.PhoneringScreen())
+ ui.add_screen(_ui_setting.totalvolumeScreen())
+ ui.add_screen(_ui_setting.PoweroffConfirmScreen())
+ ui.add_screen(_ui.DialingScreen())
+ ui.add_screen(_ui.CallLogScreen())
+ from appAlipay import Alipay ,AlipayOpenScreen,Alipay_1_1,Alipay_invite,Alipay_inviting,\
+ Alipay_success,Alipay_paycode,Alipay_pay_success,Alipay_collect,Alipay_parent
+ ui.add_screen(AlipayOpenScreen())
+ ui.add_screen(Alipay_1_1())
+ ui.add_screen(Alipay_invite())
+ ui.add_screen(Alipay_inviting())
+ ui.add_screen(Alipay_success())
+ ui.add_screen(Alipay_paycode())
+ ui.add_screen(Alipay_pay_success())
+ ui.add_screen(Alipay_collect())
+ ui.add_screen(Alipay_parent())
+ ui.add_screen(_ui.UIFINDScreen())
+ ui.add_screen(_ui.MsgDetailScreen())
+ ui.add_screen(_ui.IncomingCallScreen())
+ ui.add_screen(_ui.OnCallScreen())
+ ui.add_screen(_ui.MessageFullScreen())
+ # ui.add_screen(_ui.PowerOnScreen())
+ ui.add_screen(FactoryModeLocationScreen())
+ ui.add_screen(FactoryModeScreen())
+ ui.add_screen(FactoryModeAlipayInitScreen())
+ ui.add_screen(PopupAlarmScreen())
+ ui.add_screen(_ui.LowPowerScreen())
+ ui.add_screen(_ui.NewMessageScreen())
+ ui.add_screen(NewWechatPopupScreen())
+ ui.add_screen(HealthScreen())
+ # ui.add_screen(_ui.Setting3Screen())
+ print("init6:{}".format(utime.localtime()))
+
+
+ from protocol import LK_ProtoCol,PING_ProtoCol,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,HRSTART_ProtoCol,CENTER_ProtoCol,UPLOAD_ProtoCol,\
+ TEMP_ProtoCol,DLT_ProtoCol,WT_ProtoCol,UD_ProtoCol,REMIND_ProtoCol, CR_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,\
+ ProtoColResolver,PHL_ProtoCol,MONITOR_ProtoCol,bootoff_ProtoCol,WDSTART_ProtoCol,LOWBAT_ProtoCol,sosHome_dial_ProtoCol,SockManager,NetManager
+ import mgr as mgr
+ print("init7:{}".format(utime.localtime()))
+
+ from mgr import ConfigStoreManager,getBootOffManager,getSosFlagManager,CountdownManager, LocationManager, getVolumSizeManager,gethistoryDataManager,getUpLoadDataManager, getplayAudiodStateManager,\
+ AddrBookManager,MsgdetailManager,PhoneCallingManager,getOldTimeManager,getStorageDataManager,getBrightnessManager,getHrTimeManager,getTempTimeManager,getLowBatManager
+ print("init8:{}".format(utime.localtime()))
+
+
+ #from ui_WatchFaceScreen import WatchFaceScreen
+
+
+ # from usr.test_sms import HRSTART_ProtoCol,getHrTimeManager,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,getBrightnessManager,\
+ # getStorageDataManager
+ print("init9:{}".format(utime.localtime()))
+ #from usr.ui_wechat import WechatScreen,TK_ProtoCol
+
+ print("init10:{}".format(utime.localtime()))
+
+
+ app = watchApp()
+ app.set_ui(ui)
+ app.append_manager(mgr.AlarmVolumeLevelManager()) \
+ .append_manager(mgr.MsgVolumeLevelManager()) \
+ .append_manager(mgr.PhoneVolumeLevelManager()) \
+ .append_manager(mgr.DeviceInfoManager()) \
+ .append_manager(mgr.BatteryManager()) \
+
+ # .append_manager(mgr.StopwatchManager()) \
+ # .append_manager(mgr.CountdownManager()) \
+
+ app.append_manager(Alipay())
+ app.append_manager(ConfigStoreManager())
+ app.append_manager(NetManager())
+ app.append_manager(LocationManager())
+ app.append_manager(AddrBookManager())
+ app.append_manager(mgr.MsgManager())
+ app.append_manager(MsgdetailManager())
+ app.append_manager(mgr.CallLogManager())
+ app.append_manager(mgr.getWeatherDataManager())
+ app.append_manager(PhoneCallingManager())
+ app.append_manager(ClockManager())
+ app.append_manager(gethistoryDataManager())
+ app.append_manager(getHrTimeManager())
+ app.append_manager(getBrightnessManager())
+ app.append_manager(getStorageDataManager())
+ app.append_manager(getUpLoadDataManager())
+ app.append_manager(getVolumSizeManager())
+ app.append_manager(getTempTimeManager())
+ app.append_manager(getplayAudiodStateManager())
+ app.append_manager(getLowBatManager())
+ app.append_manager(getBootOffManager())
+ app.append_manager(getOldTimeManager())
+ app.append_manager(getSosFlagManager())
+ app.append_manager(CountdownManager())
+
+ print("init21:{}".format(utime.localtime()))
+
+ print("init11:{}".format(utime.localtime()))
+ pcr = ProtoColResolver()
+ pcr.add_support(LK_ProtoCol())
+ pcr.add_support(PING_ProtoCol())
+ pcr.add_support(KA_ProtoCol())
+ pcr.add_support(UD_ProtoCol())
+ pcr.add_support(CR_ProtoCol())
+ pcr.add_support(FIND_ProtoCol())
+ pcr.add_support(POWEROFF_ProtoCol())
+ pcr.add_support(PHL_ProtoCol())
+ pcr.add_support(TK_ProtoCol())
+ pcr.add_support(MESSAGE_ProtoCol())
+ pcr.add_support(WT_ProtoCol())
+ pcr.add_support(REMIND_ProtoCol())
+ pcr.add_support(HRSTART_ProtoCol())
+ pcr.add_support(HEART_ProtoCol())
+ pcr.add_support(OXYGEN_ProtoCol())
+ pcr.add_support(OXYGEN_One_ProtoCol())
+ pcr.add_support(TEMP_ProtoCol())
+ pcr.add_support(DLT_ProtoCol())
+ pcr.add_support(UPLOAD_ProtoCol())
+ pcr.add_support(MONITOR_ProtoCol())
+ # pcr.add_support(CENTER_ProtoCol())
+ pcr.add_support(CENTER_ProtoCol())
+ pcr.add_support(bootoff_ProtoCol())
+ pcr.add_support(WDSTART_ProtoCol())
+ pcr.add_support(LOWBAT_ProtoCol())
+ pcr.add_support(sosHome_dial_ProtoCol())
+
+ sm = SockManager()
+ sm.add_support_resolver(pcr)
+ app.append_manager(sm)
+ print("init11.0:{}".format(utime.localtime()))
+ app.start()
+ sms_data = sms.getSaveLoc()
+ sms_lacv = sms_data[0][0]
+ if sms_lacv != 'SM':#每次开机设置一下短信的存储位置
+ sms.setSaveLoc('SM', 'SM', 'SM')
+ print("init12:{}".format(utime.localtime()))
+ import atcmd
+ resp=bytearray(50)
+ atcmd.sendSync('AT+log=52,1\r\n',resp,'',20)
+ print("AT+log=52,1:{}".format(resp))
+
+
--- /dev/null
+import sms
+import atcmd
+import net
+import machine
+from led import ledEventManager,led_mode,motorEventManager
+resp=bytearray(50)
+# atcmd.sendSync('AT+log=52,1\r\n',resp,'',200)
+# print("AT+log=52,1:{}".format(resp))
+from common import Abstract
+class App(object):
+ def __init__(self):
+ self.managers = []
+
+ def append_manager(self, manager):
+ if isinstance(manager, Abstract):
+ manager.post_processor_after_instantiation()
+ self.managers.append(manager)
+ return self
+
+ def start(self):
+ for manager in self.managers:
+ manager.post_processor_before_initialization()
+ manager.initialization()
+ manager.post_processor_after_initialization()
+
+
+class watchApp(App):
+ def __init__(self):
+ super(watchApp, self).__init__()
+ self.__ui = None
+
+ def set_ui(self, ui):
+ self.__ui = ui
+
+ def start(self):
+ if self.__ui is not None:
+ self.__ui.start()
+ super().start()
+
+
+
+def main_init():
+# if __name__ == '__main__':
+ import uos
+ import ql_fs
+ import utime
+ # if ql_fs.path_exists("/ext") == False:
+ # ldev = uos.VfsLfs1(32, 32, 32, "ext_fs",0,3)
+ # uos.mount(ldev,'/ext')
+ res = uos.statvfs("/usr")
+ res = list(res)
+ print('总usr空间:{} MB,剩余空间:{} MB'.format((((res[0] * res[2]) / 1024 / 1024)),((res[0] * res[3]) / 1024 / 1024)))
+ print("init1:{}".format(utime.localtime()))
+ import EventMesh
+
+ print("init2:{}".format(utime.localtime()))
+ print("init3:{}".format(utime.localtime()))
+ from btn_device_ec800m import BtnDevice,intervManager,wechatInforManager,resetFactoryUnbindManager
+
+ btn_device = BtnDevice()
+ btn_device.start()
+
+ import ui as _ui
+ # import ui as _ui
+ print("init4:{}".format(utime.localtime()))
+ ui = _ui.UI()
+ ui.post_processor_after_instantiation()
+
+ print("init5:{}".format(utime.localtime()))
+
+ # ui.add_screen(_ui.UIFINDScreen())
+ print("init6:{}".format(utime.localtime()))
+
+
+ from protocol import MESSAGE_ProtoCol,TK_ProtoCol,LK_ProtoCol,PING_ProtoCol,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,HRSTART_ProtoCol,CENTER_ProtoCol,UPLOAD_ProtoCol,\
+ TEMP_ProtoCol,DLT_ProtoCol,WT_ProtoCol,UD_ProtoCol,REMIND_ProtoCol, CR_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,Time_ProtoCol,\
+ ProtoColResolver,PHL_ProtoCol,MONITOR_ProtoCol,bootoff_ProtoCol,WDSTART_ProtoCol,LOWBAT_ProtoCol,sosHome_dial_ProtoCol,SockManager,NetManager
+
+ import mgr as mgr
+ print("init7:{}".format(utime.localtime()))
+
+ from mgr import testSmsSetIPManager,ConfigStoreManager,sosInfoCallManager,getBootOffManager,getSosFlagManager,CountdownManager, LocationManager, getVolumSizeManager,gethistoryDataManager,getUpLoadDataManager, getplayAudiodStateManager,\
+ AddrBookManager,MsgdetailManager,PhoneCallingManager,getOldTimeManager,getStorageDataManager,getBrightnessManager,getHrTimeManager,getTempTimeManager,getLowBatManager
+ print("init8:{}".format(utime.localtime()))
+
+
+ # from appWechat import TK_ProtoCol,MESSAGE_ProtoCol
+
+
+ # from usr.test_sms import HRSTART_ProtoCol,getHrTimeManager,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,getBrightnessManager,\
+ # getStorageDataManager
+ print("init9:{}".format(utime.localtime()))
+
+ print("init10:{}".format(utime.localtime()))
+
+
+ app = watchApp()
+ app.set_ui(ui)
+ app.append_manager(mgr.AlarmVolumeLevelManager()) \
+ .append_manager(mgr.MsgVolumeLevelManager()) \
+ .append_manager(mgr.PhoneVolumeLevelManager()) \
+ .append_manager(mgr.DeviceInfoManager()) \
+ .append_manager(mgr.BatteryManager()) \
+ .append_manager(intervManager())\
+ .append_manager(ledEventManager())\
+ .append_manager(wechatInforManager())\
+ .append_manager(resetFactoryUnbindManager())\
+ .append_manager(motorEventManager())
+ # .append_manager(playImeiManager())\
+ # .append_manager(playCurStepManager())\
+ # .append_manager(usbStateManager())\
+ # .append_manager(hrandBloodOxgenManager())\
+ # .append_manager(simManager())\
+ # .append_manager(PoweronManager())\
+ # .append_manager(sosManager())\
+ # .append_manager(playCurTimeManager())
+ # .append_manager(mgr.StopwatchManager()) \
+ # .append_manager(mgr.CountdownManager()) \
+
+
+ app.append_manager(ConfigStoreManager())
+ app.append_manager(NetManager())
+ app.append_manager(LocationManager())
+ app.append_manager(AddrBookManager())
+ app.append_manager(mgr.MsgManager())
+ app.append_manager(MsgdetailManager())
+ app.append_manager(mgr.CallLogManager())
+ app.append_manager(mgr.getWeatherDataManager())
+ app.append_manager(PhoneCallingManager())
+
+ app.append_manager(gethistoryDataManager())
+ app.append_manager(getHrTimeManager())
+ app.append_manager(getBrightnessManager())
+ app.append_manager(getStorageDataManager())
+ app.append_manager(getUpLoadDataManager())
+ app.append_manager(getVolumSizeManager())
+ app.append_manager(getTempTimeManager())
+ app.append_manager(getplayAudiodStateManager())
+ app.append_manager(getLowBatManager())
+ app.append_manager(getBootOffManager())
+ app.append_manager(getOldTimeManager())
+ app.append_manager(getSosFlagManager())
+ app.append_manager(CountdownManager())
+ app.append_manager(sosInfoCallManager())
+ app.append_manager(testSmsSetIPManager())
+
+ print("init21:{}".format(utime.localtime()))
+
+ print("init11:{}".format(utime.localtime()))
+ pcr = ProtoColResolver()
+ pcr.add_support(LK_ProtoCol())
+ pcr.add_support(PING_ProtoCol())
+ pcr.add_support(KA_ProtoCol())
+ pcr.add_support(UD_ProtoCol())
+ pcr.add_support(CR_ProtoCol())
+ pcr.add_support(FIND_ProtoCol())
+ pcr.add_support(POWEROFF_ProtoCol())
+ pcr.add_support(PHL_ProtoCol())
+ pcr.add_support(TK_ProtoCol())
+ pcr.add_support(MESSAGE_ProtoCol())
+ pcr.add_support(WT_ProtoCol())
+ pcr.add_support(REMIND_ProtoCol())
+ pcr.add_support(HRSTART_ProtoCol())
+ pcr.add_support(HEART_ProtoCol())
+ pcr.add_support(OXYGEN_ProtoCol())
+ pcr.add_support(OXYGEN_One_ProtoCol())
+ pcr.add_support(TEMP_ProtoCol())
+ pcr.add_support(DLT_ProtoCol())
+ pcr.add_support(UPLOAD_ProtoCol())
+ pcr.add_support(MONITOR_ProtoCol())
+ # pcr.add_support(CENTER_ProtoCol())
+ pcr.add_support(CENTER_ProtoCol())
+ pcr.add_support(bootoff_ProtoCol())
+ pcr.add_support(WDSTART_ProtoCol())
+ pcr.add_support(LOWBAT_ProtoCol())
+ pcr.add_support(sosHome_dial_ProtoCol())
+ pcr.add_support(Time_ProtoCol())
+
+ sm = SockManager()
+ sm.add_support_resolver(pcr)
+ app.append_manager(sm)
+ print("init11.0:{}".format(utime.localtime()))
+ app.start()
+ sms_data = sms.getSaveLoc()
+ if(sms_data != -1):
+ sms_lacv = sms_data[0][0]
+ if sms_lacv != 'SM':#每次开机设置一下短信的存储位置
+ sms.setSaveLoc('SM', 'SM', 'SM')
+ print("init12:{}".format(utime.localtime()))
+ timer_t = net.nitzTime()
+ print("timer_t:{}".format(timer_t))
+ if(timer_t != -1):
+ timeSecond = int(timer_t[1])
+ if timeSecond != 0:
+ next_alarm_time = utime.localtime(timeSecond)
+ 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))
+ EventMesh.publish("open_power_on", 1)#
+
+ # EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
--- /dev/null
+from common import Abstract, LogAdapter
+import EventMesh
+import usocket
+import ql_fs
+import ujson
+import _thread
+import modem
+import utime
+import sim
+import net
+import dataCall
+import checkNet
+import osTimer
+import constants
+import sms
+from common import Lock, Abstract, LogAdapter
+from location import GPS, GPSMatch,CellLocator
+from misc import USB, Power, ADC
+from machine import ExtInt, Pin,Timer,RTC,UART
+import EventMesh
+import usys
+import audio
+from machine import I2C
+from Gsensor import SC7A20
+try :
+ from Hsensor import GH3018
+except Exception as e:
+ print("Hsensor none GH3018:{}".format(e))
+#
+from machine import RTC
+import quecgnss
+import wifiScan
+import math
+import voiceCall
+from misc import PWM
+from led import led_mode,open_led_green,close_led_green,open_led_red,close_led_red,close_led_white
+from queue import Queue
+class PhoneVolumeLevelManager(Abstract):
+ def __init__(self):
+ self.level = 0
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("push_add_phonering_level", self.add)
+ EventMesh.subscribe("push_reduce_phonering_level", self.reduce)
+ EventMesh.subscribe("get_phonering_level", self.get)
+
+ def add(self, event, msg):
+ if self.level < 7:
+ self.level = self.level + 1
+
+ def reduce(self, event, msg):
+ if self.level > 0:
+ self.level = self.level - 1
+
+ def get(self, event=None, msg=None):
+ return self.level
+
+class MsgVolumeLevelManager(Abstract):
+ def __init__(self):
+ self.level = 0
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("push_add_msgvolume_level", self.add)
+ EventMesh.subscribe("push_reduce_msgvolume_level", self.reduce)
+ EventMesh.subscribe("get_msgvolume_level", self.get)
+
+ def add(self, event, msg):
+ if self.level < 7:
+ self.level = self.level + 1
+
+ def reduce(self, event, msg):
+ if self.level > 0:
+ self.level = self.level - 1
+
+ def get(self, event=None, msg=None):
+ return self.level
+
+class AlarmVolumeLevelManager(Abstract):
+ def __init__(self):
+ self.level = 0
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("push_add_alarmvolume_level", self.add)
+ EventMesh.subscribe("push_reduce_alarmvolume_level", self.reduce)
+ EventMesh.subscribe("get_alarmvolume_level", self.get)
+
+ def add(self, event, msg):
+ if self.level < 7:
+ self.level = self.level + 1
+
+ def reduce(self, event, msg):
+ if self.level > 0:
+ self.level = self.level - 1
+
+ def get(self, event=None, msg=None):
+ return self.level
+
+class StopwatchManager(Abstract):
+ def __init__(self):
+ self.level = 0
+ self.ms_value = 0
+ self.sec_value = 0
+ self.min_value = 0
+ self.timer = Timer(Timer.Timer1)
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("stopwatch_start", self.start)
+ EventMesh.subscribe("stopwatch_stop", self.paused)
+ EventMesh.subscribe("stopwatch_reset", self.reset)
+ EventMesh.subscribe("get_stopwatch_ms", self.get_ms)
+ EventMesh.subscribe("get_stopwatch_sec", self.get_sec)
+ EventMesh.subscribe("get_stopwatch_min", self.get_min)
+
+ def start(self, event, msg):
+ self.timer.start(period=100, mode=self.timer.PERIODIC, callback=self.fun)
+
+ def paused(self, event, msg):
+ self.timer.stop()
+
+ def reset(self, event, msg):
+ self.timer.stop()
+
+ self.sec_value = 0
+ self.min_value = 0
+ self.ms_value = 0
+
+ def fun(self):
+ self.ms_value += 1
+ if self.ms_value > 9:
+ self.ms_value = 0
+ self.sec_value += 1
+ if self.sec_value > 60:
+ self.sec_value = 0
+ self.min_value += 1
+ if self.min_value > 60:
+ self.timer.stop()
+
+ def get_ms(self, event=None, msg=None):
+ return self.ms_value
+
+ def get_min(self, event=None, msg=None):
+ return self.min_value
+
+ def get_sec(self, event=None, msg=None):
+ return self.sec_value
+
+class CountdownManager(Abstract):
+ def __init__(self):
+ self.sec = 0
+ self.min = 0
+ self.hour = 0
+ self.timer = osTimer()
+ self.total = 0
+ self.time_cb = 0
+ self.time_play = 0
+ self.total_sec = 0
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("add_countdown_sec", self.add_sec)
+ EventMesh.subscribe("reduce_countdown_sec", self.reduce_sec)
+ EventMesh.subscribe("add_countdown_min", self.add_min)
+ EventMesh.subscribe("reduce_countdown_min", self.reduce_min)
+ EventMesh.subscribe("add_countdown_hour", self.add_hour)
+ EventMesh.subscribe("reduce_countdown_hour", self.reduce_hour)
+ EventMesh.subscribe("get_countdown_sec", self.get_sec)
+ EventMesh.subscribe("get_countdown_min", self.get_min)
+ EventMesh.subscribe("get_countdown_hour", self.get_hour)
+
+ EventMesh.subscribe("set_countdown_off_state", self.set_countdown_off_state)
+ EventMesh.subscribe("get_countdown_off_state", self.get_countdown_off_state)
+
+
+ EventMesh.subscribe("set_countdown_all_time", self.set_countdown_all_time)
+ EventMesh.subscribe("get_countdown_all_time", self.get_countdown_all_time)
+
+ EventMesh.subscribe("countdown_end_cb", self.countdown_end_cb)
+
+ EventMesh.subscribe("reset_time_countdown",self.reset)
+
+ def set_countdown_all_time(self, event, msg):
+ self.total = msg[0]
+ self.total_sec = msg[1]
+ # print("self.total:{} self.total_sec:{}".format(self.total,self.total_sec))
+
+
+ def get_countdown_all_time(self, event, msg):
+ return self.total
+
+ def set_countdown_off_state(self, event, msg):
+
+ self.time_cb = msg[0]
+ self.time_play = msg[1]
+ # print("self.time_cb:{} self.total_sec:{}".format(self.time_cb,self.time_play))
+
+
+ def get_countdown_off_state(self, event, msg):
+ return [self.time_cb,self.time_play]
+
+ def countdown_end_cb(self, event, msg):
+
+ if self.time_cb == 1 and self.time_play == 1:
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ reduce = time_tmp- self.total_sec
+ print("self.time_cb:{} self.time_play:{} self.total:{} self.total_sec:{}".format(self.time_cb,self.time_play, self.total,self.total_sec))
+ self.total = self.total - reduce
+ if self.total <= 0:
+ self.total = 0
+ self.time_cb = 0
+ self.time_play = 0
+ self.sec = 0
+ self.min = 0
+ self.hour = 0
+
+ EventMesh.publish("load_screen", {"screen": "countdown_end"})
+ return
+ self.total_sec = time_tmp
+
+
+ def add_sec(self, event, msg):
+ if self.sec < 59:
+ self.sec = self.sec + 1
+
+ def reduce_sec(self, event, msg):
+ if self.sec > 0:
+ self.sec = self.sec - 1
+
+ def add_min(self, event, msg):
+ if self.min < 59:
+ self.min = self.min + 1
+
+ def reduce_min(self, event, msg):
+ if self.min > 0:
+ self.min = self.min - 1
+
+ def add_hour(self, event, msg):
+ if self.hour < 99:
+ self.hour = self.hour + 1
+
+ def reduce_hour(self, event, msg):
+ if self.hour > 0:
+ self.hour = self.hour - 1
+
+ def get_sec(self, event=None, msg=None):
+ return self.sec
+
+ def get_min(self, event=None, msg=None):
+ return self.min
+
+ def get_hour(self, event=None, msg=None):
+ return self.hour
+
+
+
+ def reset(self, event=None, msg=None):
+ self.hour = 0
+ self.min = 0
+ self.sec = 0
+
+
+
+BATTERY_OCV_TABLE = {
+ "nix_coy_mnzo2": {
+ 55: {
+ 4270: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,
+ 3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3355: 0,
+ },
+ 20: {
+ 4270: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,
+ 3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3355: 0,
+ },
+ 0: {
+ 4270: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,
+ 3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3355: 0,
+ },
+ },
+}
+
+
+
+class Battery(object):
+ """This class is for battery info.
+
+ This class can get battery voltage and energy.
+ if adc_args is not None, use cbc to read battery
+
+ adc_args: (adc_num, adc_period, factor)
+
+ adc_num: ADC channel num
+ adc_period: Cyclic read ADC cycle period
+ factor: calculation coefficient
+ """
+
+ def __init__(self, adc_args=None, chrg_gpion=None, stdby_gpion=None):
+ self.__energy = 100
+ self.__temp = 55
+
+ # ADC params
+ self.__adc = None
+ if adc_args:
+ self.__adc_num, self.__adc_period, self.__factor = adc_args
+ if not isinstance(self.__adc_num, int):
+ raise TypeError("adc_args adc_num is not int number.")
+ if not isinstance(self.__adc_period, int):
+ raise TypeError("adc_args adc_period is not int number.")
+ if not isinstance(self.__factor, float):
+ raise TypeError("adc_args factor is not int float.")
+ self.__adc = ADC()
+
+ # Charge params
+ self.__charge_callback = None
+ self.__charge_status = None
+ self.__chrg_gpion = chrg_gpion
+ self.__stdby_gpion = stdby_gpion
+ self.__chrg_gpio = None
+ self.__stdby_gpio = None
+ self.__chrg_exint = None
+ self.__stdby_exint = None
+ if self.__chrg_gpion is not None and self.__stdby_gpion is not None:
+ self.__init_charge()
+
+ def __chrg_callback(self, args):
+ self.__update_charge_status()
+ if self.__charge_callback is not None:
+ self.__charge_callback(self.__charge_status)
+
+ def __stdby_callback(self, args):
+ self.__update_charge_status()
+ if self.__charge_callback is not None:
+ self.__charge_callback(self.__charge_status)
+
+ def __update_charge_status(self):
+ if self.__chrg_gpio.read() == 1 and self.__stdby_gpio.read() == 1:
+ self.__charge_status = 0
+ elif self.__chrg_gpio.read() == 0 and self.__stdby_gpio.read() == 1:
+ self.__charge_status = 1
+ elif self.__chrg_gpio.read() == 1 and self.__stdby_gpio.read() == 0:
+ self.__charge_status = 2
+ else:
+ raise TypeError("CHRG and STDBY cannot be 0 at the same time!")
+
+ def __init_charge(self):
+ self.__chrg_gpio = Pin(self.__chrg_gpion, Pin.IN, Pin.PULL_DISABLE)
+ self.__stdby_gpio = Pin(self.__stdby_gpion, Pin.IN, Pin.PULL_DISABLE)
+ self.__chrg_exint = ExtInt(self.__chrg_gpion, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.__chrg_callback)
+ self.__stdby_exint = ExtInt(self.__stdby_gpion, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU,
+ self.__stdby_callback)
+ self.__chrg_exint.enable()
+ self.__stdby_exint.enable()
+ self.__update_charge_status()
+
+ def __get_soc_from_dict(self, key, volt_arg):
+ """Get battery energy from map"""
+ if key in BATTERY_OCV_TABLE["nix_coy_mnzo2"]:
+ volts = sorted(BATTERY_OCV_TABLE["nix_coy_mnzo2"][key].keys(), reverse=True)
+ pre_volt = 0
+ volt_not_under = 0 # Determine whether the voltage is lower than the minimum voltage value of soc.
+ for volt in volts:
+ if volt_arg > volt:
+ volt_not_under = 1
+ soc1 = BATTERY_OCV_TABLE["nix_coy_mnzo2"][key].get(volt, 0)
+ soc2 = BATTERY_OCV_TABLE["nix_coy_mnzo2"][key].get(pre_volt, 0)
+ break
+ else:
+ pre_volt = volt
+ # print("__get_soc_from_dict:{}".format(soc2 - (soc2 - soc1) * (pre_volt - volt_arg) // (pre_volt - volt)))
+ if pre_volt == 0: # Input Voltarg > Highest Voltarg
+ return soc1
+ elif volt_not_under == 0:
+ return 0
+ else:
+ return soc2 - (soc2 - soc1) * (pre_volt - volt_arg) // (pre_volt - volt)
+
+ def __get_soc(self, temp, volt_arg, bat_type="nix_coy_mnzo2"):
+ """Get battery energy by temperature and voltage"""
+ if bat_type == "nix_coy_mnzo2":
+ if temp > 30:
+ return self.__get_soc_from_dict(55, volt_arg)
+ elif temp < 10:
+ return self.__get_soc_from_dict(0, volt_arg)
+ else:
+ return self.__get_soc_from_dict(20, volt_arg)
+
+ def __get_power_vbatt(self):
+ return int(sum([Power.getVbatt() for i in range(100)]) / 100)
+
+ def __get_adc_vbatt(self):
+ self.__adc.open()
+ utime.sleep_ms(self.__adc_period)
+ adc_list = list()
+ for i in range(self.__adc_period):
+ adc_list.append(self.__adc.read(self.__adc_num))
+ utime.sleep_ms(self.__adc_period)
+ adc_list.remove(min(adc_list))
+ adc_list.remove(max(adc_list))
+ adc_value = int(sum(adc_list) / len(adc_list))
+ self.__adc.close()
+ vbatt_value = adc_value * (self.__factor + 1)
+ return vbatt_value
+
+ def set_temp(self, temp):
+ """Set now temperature."""
+ if isinstance(temp, int) or isinstance(temp, float):
+ self.__temp = temp
+ return True
+ return False
+
+ def get_voltage(self):
+ """Get battery voltage"""
+ if self.__adc is None:
+ return self.__get_power_vbatt()
+ else:
+ return self.__get_adc_vbatt()
+
+ def get_energy(self,volt_arg ):
+ """Get battery energy"""
+ if( volt_arg == None) :
+ volt_arg = self.get_voltage()
+ self.__energy = self.__get_soc(self.__temp, volt_arg)
+ # print("get_energy:volt_arg {} __energy{}".format(volt_arg,self.__energy))
+ return self.__energy
+
+ def set_charge_callback(self, charge_callback):
+ if self.__chrg_gpion is not None and self.__stdby_gpion is not None:
+ if callable(charge_callback):
+ self.__charge_callback = charge_callback
+ return True
+ return False
+
+ def get_charge_status(self):
+ return self.__charge_status
+
+class BatteryManager(Abstract):
+ def __init__(self):
+ """电池管理器"""
+ self.battery = Battery()
+ self.low_battery = False
+
+ def post_processor_after_instantiation(self):
+ """订阅此类所有的事件到 EventMesh中"""
+ EventMesh.subscribe("get_battery", self.get_battery)
+
+ def get_battery(self, event=None, msg=None):
+ battery = self.battery.get_energy(msg)
+ return battery
+
+ def get_voltage(self, event=None, msg=None):
+ voltage = self.battery.get_voltage()
+ return voltage
+
+class ConfigStoreManager(Abstract):
+ """
+ 持久化落盘存储
+ """
+
+ def __init__(self):
+ self.file_name = "/usr/conf_store.json"
+ self.lock = Lock()
+ self.map = dict()
+
+ def post_processor_after_instantiation(self):
+ if ql_fs.path_exists(self.file_name):
+ self.map = ql_fs.read_json(self.file_name)
+ else:
+ self.__store()
+ EventMesh.subscribe("persistent_config_get", self.__read)
+ EventMesh.subscribe("persistent_config_store", self.__store)
+
+ def __read(self, event, msg):
+ with self.lock:
+ return self.map.get(msg)
+
+ def __store(self, event=None, msg=None):
+ if msg is None:
+ msg = dict()
+ with self.lock:
+ self.map.update(msg)
+ ql_fs.touch(self.file_name, self.map)
+
+class sosInfoCallManager(Abstract):
+ # 通讯录
+ def __init__(self):
+ pass
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_sos_info_call", self.set_sos_info_call)
+
+ def set_sos_info_call(self, event, msg):
+ hangup_mode = EventMesh.publish("get_hangup_mode")
+ if hangup_mode == 1:
+ EventMesh.publish("set_sos_flag",0)
+ EventMesh.publish("set_sos_num",0)
+ EventMesh.publish("set_hangup_mode",0)
+ print('hangup_mode disconnect',hangup_mode)
+ sos_flag = EventMesh.publish("get_sos_flag")
+ print('voicecall sos_flag',sos_flag)
+ if sos_flag == 0 :
+ EventMesh.publish("set_sos_num",0)
+ else:
+ num = EventMesh.publish("get_sos_num")
+ number = EventMesh.publish("get_dial_sos_number")
+ if number != None:
+ if len(number) > 0:
+ if num == None:
+ num = 0
+ num+=1
+ num_len = 0
+
+ if len(number) == 1:
+ num_len = len(number)
+ elif len(number) == 2:
+ num_len = len(number)+1
+ elif len(number) == 3:
+ num_len = len(number)+2
+ # print("number:{} number_len :{} num:{} num_len:{}".format(number,len(number),num,num_len))
+ if num > num_len :
+ EventMesh.publish("set_sos_flag",0)
+ EventMesh.publish("set_sos_num",0)
+ else:
+ # print("number:{} number_len :{}".format(number,len(number)))
+ EventMesh.publish("set_sos_num",num)
+ if len(number) == 1:
+ EventMesh.publish("set_callnumer_cb",number[0])
+ print("phone 1")
+ elif len(number) == 2:
+ if num == 1 or num == 3:
+ print("phone 2")
+ EventMesh.publish("set_callnumer_cb",number[1])
+ elif num == 2:
+ print("phone 3")
+ EventMesh.publish("set_callnumer_cb",number[0])
+ elif len(number) == 3:
+ if num == 1 or num == 4:
+ EventMesh.publish("set_callnumer_cb",number[1])
+ print("phone 4")
+ elif num == 2 or num == 5:
+ print("phone 5")
+ EventMesh.publish("set_callnumer_cb",number[2])
+ elif num == 3:
+ print("phone 6")
+ EventMesh.publish("set_callnumer_cb",number[0])
+
+def voice_callback(args):
+ print('voicecall iinfo:{}'.format(args))
+ if args[0] == 10:
+ get_UI_high_priority = EventMesh.publish("get_UI_high_priority")#如果在拨出去或者通话中屏蔽来电
+ if get_UI_high_priority == 1:
+ EventMesh.publish("set_interrup_incall",1)
+ return
+ print('voicecall incoming call, PhoneNO.: ', args[6])
+ size_len = len(str(args[6]))
+ tmp = []
+ tmp = args[6]
+ find_num = tmp[0]
+ b = tmp[0].isdigit()#判断是否不是数字开头 暂时不用 因为截取了+判断不了 判断号码是否大于11位数,如果大于11位数 并且第一个字符是数字就按照最后11位做存储
+
+ if b == True and size_len > 11:
+ tmp = tmp[size_len-11:]
+ EventMesh.publish("set_call_state",2)
+ EventMesh.publish("dialin_call_event")#电话拨进响铃
+ # EventMesh.publish("load_screen", {"screen": "incoming_call","meta":str(tmp)})
+
+ elif args[0] == 11:
+ EventMesh.publish("set_UI_high_priority",0)
+ sos_flag = EventMesh.publish("get_sos_flag")
+ if sos_flag == 1:
+ sos_flag = 0
+ EventMesh.publish("set_sos_flag",0)
+
+ print('voicecall connected, PhoneNO.: ', args[6])
+ size_len = len(str(args[6]))
+ tmp = []
+ tmp = args[6]
+ find_num = tmp[0]
+ b = tmp[0].isdigit()#判断是否不是数字开头 暂时不用 因为截取了+判断不了
+ if b == True and size_len > 11:
+ tmp = tmp[size_len-11:]
+ EventMesh.publish("set_call_state",3)
+ # EventMesh.publish("load_screen", {"screen": "on_call","meta":str(tmp)})
+
+ elif args[0] == 12:
+ set_interrup_call = EventMesh.publish("get_interrup_incall")#打断这次不需要来电的ui事件 以免通话中退出当前界面进不去了
+ if set_interrup_call == 1:
+ EventMesh.publish("set_interrup_incall",0)
+ return
+
+ EventMesh.publish("set_interrup_incall",0)
+ EventMesh.publish("set_UI_high_priority",0)
+
+
+
+
+ EventMesh.publish("set_sos_info_call")
+ flag = EventMesh.publish("get_call_state")
+ if flag == 2:
+ EventMesh.publish("close_motor_infor")#关闭马达和定时器
+ EventMesh.publish("close_timer_all")#
+ EventMesh.publish("set_call_state",0)
+
+ print('voicecall disconnect end')
+
+
+ elif args[0] == 13:
+ print('voicecall is waiting, PhoneNO.: ', args[6])
+ elif args[0] == 14:
+
+ print('voicecall dialing, PhoneNO.: ', args[6])
+ EventMesh.publish("set_UI_high_priority",0)
+ EventMesh.publish("set_call_state",1)
+ # EventMesh.publish("load_screen", {"screen": "dialing"})
+
+
+ elif args[0] == 15:
+ print('voicecall alerting, PhoneNO.: ', args[6])
+
+ elif args[0] == 16:
+ print('voicecall holding, PhoneNO.: ', args[6])
+
+class DeviceInfoManager(Abstract):
+
+ """
+ 设备信息管理
+ """
+
+ def __init__(self):
+
+ self.DeviceInfo_queue = Queue()
+ _thread.start_new_thread(self.DeviceInfo_queue_thread, ())
+ EventMesh.subscribe("publish_message_event_DeviceInfo",self.publish_message_event_DeviceInfo)
+ self.key = ""
+ self.imei = ""
+ self.cid = "ETEST20221014010"
+ self.imsi = ""
+ self.password = "000000"
+ #self.__city = None
+ #self.__location = None
+ self.timer_push_schedule = osTimer()
+ self.timer_pusht_test = osTimer()
+
+ #self.battery_push_schedule = osTimer()
+ self.check_battery_list = []
+
+ self.step = [0,0,0,0]
+ self.timer_push=0
+ self.timer_push_tmp=60
+ self.PING = "0" #绑定状态
+ self.connect = 0 #服务器连接状态
+ self.KA_time = 0
+ self.HR_time = 0
+ self.SENSOR_time = 0
+ self.HR_state = 0
+ self.HR_Onestate = 0
+ self.get_hr_state = 0
+ self.get_spo2_state = 0
+ self.set_hsenor_crt = 0
+ self.HR_OneTime = 0
+ self.Hr_Need_Open = 0
+ self.Spo2_Need_Open = 0
+ self.bat_time = 0
+ self.sms_full_flag = 0
+ self.clear_step = 0
+ self.test = 0
+ self.old_time = 0
+ self.UD_time = 0
+ self.upload_time = 0
+ self.UD_timeout = 7*60
+
+ self.temp_time = 0
+ self.temp_state = 0
+ self.temp_one_state = 0
+
+ self.vbat_count = 0
+
+ self.vbat_buf=[]
+
+ self.curr_battery_level = 4200
+ self.bat_count = 0
+
+ self.mearsure_btn = 0
+ self.mearsure_timer = 0
+
+ self.no_smi_count = 0
+ 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__)
+ self.rtc = RTC()
+ self.aud = audio.Audio(0)
+ print("DeviceInfoManager:1")
+ self.gsensor = SC7A20()
+ print("DeviceInfoManager:1.0")
+ self.gsensor.activate()
+ print("DeviceInfoManager:1.1")
+ self.gsensor.init()
+ print("DeviceInfoManager:2")
+ self.gsensor.set_callback(self.gsensor_cb)
+
+ try :
+ self.hsensor = GH3018()
+ except Exception as e:
+ print("Hsensor none GH3018:{}".format(e))
+ #
+ 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")
+ self.i2c0 = I2C(I2C.I2C0, I2C.FAST_MODE)
+ self.stop_temp( None, None)
+
+ 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)
+ EventMesh.subscribe("get_curr_battery_level", self.get_curr_battery_level)
+ EventMesh.subscribe("get_fw_version", self.get_device_fw_version)
+ EventMesh.subscribe("get_standby_time", self.get_standby_time)
+ EventMesh.subscribe(constants.EVENT.GET_STEP, self.get_step_count)
+ EventMesh.subscribe("sim_slot_get", self.sim_slot_get)
+ EventMesh.subscribe("sim_slot_switch", self.sim_slot_switch)
+ EventMesh.subscribe(constants.EVENT.GET_KEY, self.get_key)
+ EventMesh.subscribe(constants.EVENT.SET_KEY, self.set_key)
+ EventMesh.subscribe(constants.EVENT.GET_IMEI, self.get_imei)
+ EventMesh.subscribe(constants.EVENT.GET_CID, self.get_cid)
+ EventMesh.subscribe(constants.EVENT.SET_CID, self.set_cid)
+ EventMesh.subscribe(constants.EVENT.GET_IMSI, self.get_imsi)
+ EventMesh.subscribe(constants.EVENT.GET_PASSWORD, self.get_password)
+ EventMesh.subscribe(constants.EVENT.SET_PASSWORD, self.set_password)
+ EventMesh.subscribe(constants.EVENT.SET_PING, self.set_ping)
+ EventMesh.subscribe(constants.EVENT.GET_PING, self.get_ping)
+ EventMesh.subscribe(constants.EVENT.SET_CONNECT, self.set_connect)
+ EventMesh.subscribe(constants.EVENT.GET_CONNECT, self.get_connect)
+
+
+ EventMesh.subscribe(constants.EVENT.START_BLOOD_OXYGEN, self.start_blood_oxygen)
+ EventMesh.subscribe(constants.EVENT.START_HEART, self.start_heart)
+ EventMesh.subscribe(constants.EVENT.STOP_BLOOD_OXYGEN, self.stop_blood_oxygen)
+ EventMesh.subscribe(constants.EVENT.STOP_HEART, self.stop_heart)
+ EventMesh.subscribe(constants.EVENT.GET_BLOOD_OXYGEN, self.get_blood_oxygen)
+ EventMesh.subscribe(constants.EVENT.GET_HEART, self.get_heart)
+ EventMesh.subscribe(constants.EVENT.GET_WEAR, self.get_wear)
+ EventMesh.subscribe("get_Hsensor", self.get_Hsensor)
+ EventMesh.subscribe("Hsensor_set_sleep", self.Hsensor_set_sleep)
+
+ EventMesh.subscribe(constants.EVENT.START_TEMP, self.start_temp)
+ EventMesh.subscribe(constants.EVENT.STOP_TEMP, self.stop_temp)
+ EventMesh.subscribe(constants.EVENT.GET_TEMP, self.get_temp)
+
+ print("post_processor_after_instantiation:2")
+ self.timer_push_schedule.start(10000, 1, self.publish_event_cb)
+ # self.timer_pusht_test.start(2000, 1, self.publish_test)
+ # self.battery_push_schedule.start(3000, 1, self.__check_battery)
+ self.log.debug("post_processor_after_instantiation finished")
+ #EventMesh.publish(constants.EVENT.START_HEART)
+ # 设备开机立刻更新一次参数
+ self.publish_event_cb()
+
+ print("post_processor_after_instantiation:3")
+
+ def publish_message_event_DeviceInfo(self,event,msg):
+ self.DeviceInfo_queue.put(msg)
+
+ #DeviceInfo的消息队列处理,防止卡顿
+ def DeviceInfo_queue_thread(self):
+ while True:
+ data = self.DeviceInfo_queue.get()
+ #print("DeviceInfo_queue_thread:data = {}".format(data))
+ if data != None:
+ try:
+ data["func"](data["data"])
+ except Exception as e:
+ print("DeviceInfo_queue_thread:ERROR:{}".format(e))
+ usys.print_exception(e)
+
+
+ def gsensor_cb(self, para):
+ print("gsensor_cb:{}".format(para))
+ flip_sw = EventMesh.publish("get_storage_config","flip_sw")
+
+ if para == 0: #跌倒报警
+ pass
+ #EventMesh.publish("load_screen", {"screen": "FIND"})
+ elif para == 1: #抬腕
+
+ if flip_sw == 1:
+ EventMesh.publish(constants.EVENT.SYSTEM_UP)
+
+ elif para == 2: #放手
+ pass
+ # if flip_sw == 1:
+ # EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)
+
+ def publish_event_cb(self, *args, **kwargs):
+ EventMesh.publish("publish_message_event_DeviceInfo",{"func":self.publish_event,"data":0})
+ def publish_event(self,data):
+ """
+ 定时事件处理
+ :param args:
+ :param kwargs:
+ :return:
+ """
+
+
+ self.timer_push = self.timer_push+1
+
+ #if self.timer_push > 10 :
+ # EventMesh.publish("time", self.get_time())
+ # EventMesh.publish("battery", self.get_battery())
+ # EventMesh.publish("signal", self.get_signal())
+
+ self.timer_push = 0
+ date_tmp = utime.localtime()
+ 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
+ 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.gsensor.clean_status()#清除运动次数
+ EventMesh.publish(constants.EVENT.PUSH_STEP, self.get_step_count())
+
+ """电池平均值"""
+ temp = Power.getVbatt()
+ if self.bat_count < 10:
+ self.vbat_buf.append(temp)
+ self.bat_count += 1
+ else:
+ for i in range(9):
+ self.vbat_buf[i] = self.vbat_buf[i+1]
+ self.vbat_buf[9] = temp
+ curr_count = len(self.vbat_buf)
+ bat_total_value = 0
+ for i in range(curr_count):
+ bat_total_value += self.vbat_buf[i]
+ bat_total_value = bat_total_value//curr_count#一分钟更新一次电量 10个平均值
+ EventMesh.publish("set_curr_battery_level",bat_total_value)
+ # print("self.vbat_buf:{} curr_count :{} bat_total_value:{} temp:{}".format(self.vbat_buf,curr_count,bat_total_value,temp))
+ bat_tmp = EventMesh.publish("screen_get_battery")
+ self.vbat_count+=10
+ if self.vbat_count >= 60:
+ self.vbat_count = 0
+ if bat_tmp != None:
+ bat_value = bat_tmp[1]
+ if bat_value <= 0:
+ pass
+ # EventMesh.publish("load_screen", {"screen": "LOW_ONE_POWER"})
+
+
+ """"隔天清步数"""
+ 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()
+ hour = data[4]
+ min = data[5]
+ next_alarm_time = utime.localtime(old_Timesec)
+ # print("data[5]:{} {} next_alarm_time:{} old_Timesec:{}".format(data[1],data[2],next_alarm_time,old_Timesec))
+ month = next_alarm_time[1]
+ day = next_alarm_time[2]
+ if month != data[1] or day != data[2]:
+ step = EventMesh.publish("get_old_step_value")
+ if step > 0:
+ self.gsensor.reset_step()
+ EventMesh.publish("set_old_step_value",0)
+
+ hr = EventMesh.publish("get_old_hr_data",)
+ if hr != 0:
+ EventMesh.publish("set_old_hr_data", 0)
+
+ spo2 = EventMesh.publish("get_old_spo2_data")
+ if spo2 != 0:
+ EventMesh.publish("set_old_spo2_data", 0)
+ EventMesh.publish("set_old_time_data",time_tmp)
+ if hour == 0:#清步数
+ if min <= 1:
+ if self.clear_step == 0:
+ step = EventMesh.publish("get_old_step_value")
+ EventMesh.publish("set_old_time_data",time_tmp)
+ if step > 0:
+ EventMesh.publish("set_old_step_value",0)
+ self.gsensor.reset_step()
+ hr = EventMesh.publish("get_old_hr_data")
+ if hr != 0:
+ EventMesh.publish("set_old_hr_data", 0)
+
+ spo2 = EventMesh.publish("get_old_spo2_data")
+ if spo2 != 0:
+ EventMesh.publish("set_old_spo2_data", 0)
+ self.clear_step = 1
+ else:
+ if self.clear_step == 1:
+ self.clear_step = 0
+ else:
+ if self.clear_step == 1:
+ self.clear_step = 0
+
+ """电量小于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))
+ if get_low_btn != None:#低电使能开关
+ if get_low_btn == 1:
+ self.bat_time+=10
+ # print("date_tmp:{} self.bat_time:{}".format(date_tmp,self.bat_time))
+
+ if self.bat_time > 5*60:
+ self.bat_time = 0
+ if battery[1] <= 20 and battery[1] > 0:
+ pass
+ # EventMesh.publish("load_screen", {"screen": "LOW_POWER"})
+ 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("long_press_power_off") #未检测到sim卡15分钟后关机
+ 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:#每十分钟提醒一次
+ # pass
+ # # 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()
+ sms_max = sms_data[0][2]
+ if msg_nums >= sms_max-1:
+ self.sms_full_flag+=10
+ if self.sms_full_flag >= 120:
+ self.sms_full_flag=0
+ # EventMesh.publish("load_screen", {"screen": "message_full"})
+ 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 = {}
+ hr_time = EventMesh.publish("get_time_hr_spo2")#获取时间是否大于0
+ # if get_temp_state != None : #突然脱腕
+ # if get_temp_state > 1 and WEAR != 1:
+ # EventMesh.publish(constants.EVENT.STOP_TEMP)
+ # EventMesh.publish("set_temp_state",0)
+ # if (self.get_hr_state > 1 or self.get_spo2_state > 1) and WEAR != 1:
+ # if self.get_hr_state > 1 :
+ # EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率
+ # EventMesh.publish(constants.EVENT.STOP_HEART)
+ # elif self.get_spo2_state > 1:
+ # EventMesh.publish("set_spo2_state",0)#2代表后台进入测试
+ # EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+
+ #if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1 and battery[0] != "1": #:
+ if 0:
+ # print("get_temp_time:{} self.temp_one_state:{}".format(get_temp_time,self.temp_one_state))
+ if get_temp_time != None:#定时测量体温
+ if get_temp_time > 0:
+ if get_temp_state != None:
+ if get_temp_state == 0 or get_temp_state == 2 or get_temp_state == 3 :
+ if (time_tmp-self.temp_time) >= get_temp_time:#大于一个周期的时间,重新赋值
+ self.temp_one_state = 0
+ self.temp_state = 0
+ self.temp_time = time_tmp
+
+ if self.old_temp_time != get_temp_time:#重复修改测量间隔时间
+ self.temp_one_state = 0
+ self.temp_time = time_tmp#防止改变时间的时候正在开启测量突然10s就停止测量
+ self.temp_state = 0
+ self.old_temp_time = get_temp_time
+
+ if (time_tmp-self.temp_time) == 0 and self.temp_state == 0:#一开始就测量 测量一分钟停止测量体温
+ self.temp_state = 1
+ self.temp_one_state = 0
+ EventMesh.publish("set_temp_state",2)
+ print("AUTO temp:")
+ EventMesh.publish(constants.EVENT.START_TEMP)
+
+ elif (time_tmp-self.temp_time) >= 60 and self.temp_state == 1:
+ self.temp_state = 0
+ self.temp_one_state = 0
+ temp = EventMesh.publish(constants.EVENT.GET_TEMP)
+ temp += 0.5
+ if temp < 25 or temp > 42:
+ temp = 0
+ EventMesh.publish("set_temp_state",0)
+ if temp > 0:
+ tmp_f = str(temp).split('.')[0]
+ tmp_f_tmp = int(tmp_f)
+
+
+ tmp_d = str(temp).split('.')[1][:1]
+ tmp_d_tmp = int(tmp_d)
+ if temp != 0:
+ EventMesh.publish("set_history_temp_value",temp)
+ EventMesh.publish("play_temp_value",temp)#播放体温数值
+ EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
+ else:
+ EventMesh.publish("set_history_temp_value",0)
+ EventMesh.publish("play_temp_value",0)#播放体温数值
+ EventMesh.publish(constants.EVENT.STOP_TEMP)
+ print("AUTO temp:{} tmp_f:{} tmp_f_tmp:{} tmp_d:{} tmp_d_tmp:{}".format(temp,tmp_f,tmp_f_tmp,tmp_d,tmp_d_tmp))
+
+
+
+ if self.temp_state == 0 or get_temp_state == 3:#只有不在测量的时候才测单次的
+ if get_temp_state == 3:#单次测量
+ self.temp_one_state+=1
+ if self.temp_one_state == 1:
+ EventMesh.publish("set_temp_state",3)
+ print("AUTO one temp:1")
+ EventMesh.publish(constants.EVENT.START_TEMP)
+ elif self.temp_one_state > 6:
+ self.temp_one_state = 0
+ temp = EventMesh.publish(constants.EVENT.GET_TEMP)
+ temp += 0.5
+ if temp < 25 or temp > 42:
+ temp = 0
+ EventMesh.publish("set_temp_state",0)
+ if temp > 0:
+ tmp_f = str(temp).split('.')[0]
+ tmp_f_tmp = int(tmp_f)
+
+
+ tmp_d = str(temp).split('.')[1][:1]
+ tmp_d_tmp = int(tmp_d)
+ if temp != None:
+ if temp != 0:
+ EventMesh.publish("set_history_temp_value",temp)
+ EventMesh.publish("play_temp_value",temp)#播放体温数值
+ EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
+ else:
+ EventMesh.publish("set_history_temp_value",0)
+ EventMesh.publish("play_temp_value",0)#播放体温数值
+ EventMesh.publish(constants.EVENT.STOP_TEMP)
+ print("once temp:{} tmp_f:{} tmp_f_tmp:{} tmp_d:{} tmp_d_tmp:{}".format(temp,tmp_f,tmp_f_tmp,tmp_d,tmp_d_tmp))
+
+ else:
+ self.temp_one_state = 0
+ self.temp_state = 0
+ self.old_temp_time = 0
+
+ else:
+ self.old_temp_time = 0
+ get_temp_end_state = EventMesh.publish("get_temp_state")
+ if self.temp_state != 0:
+ if self.temp_state == 2:
+ self.temp_state = 0
+ EventMesh.publish(constants.EVENT.STOP_TEMP)
+ if get_temp_end_state == 1:
+ self.temp_one_state = 0
+
+ if get_temp_end_state == 3:#单次测量
+ self.temp_one_state+=1
+ if self.temp_one_state == 1:
+ print("AUTO one temp:2")
+ EventMesh.publish("set_temp_state",3)
+ EventMesh.publish(constants.EVENT.START_TEMP)
+ elif self.temp_one_state > 6:
+ self.temp_one_state = 0
+ temp = EventMesh.publish(constants.EVENT.GET_TEMP)
+ temp += 0.5
+ if temp < 25 or temp > 42:
+ temp = 0
+ EventMesh.publish("set_temp_state",0)
+ if temp > 0:
+ tmp_f = str(temp).split('.')[0]
+ tmp_f_tmp = int(tmp_f)
+
+ tmp_d = str(temp).split('.')[1][:1]
+ tmp_d_tmp = int(tmp_d)
+ if temp != None:
+ if temp != 0:
+ EventMesh.publish("set_history_temp_value",temp)
+ EventMesh.publish("play_temp_value",temp)#播放体温数值
+ EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
+ else:
+ EventMesh.publish("set_history_temp_value",0)
+ EventMesh.publish("play_temp_value",temp)#播放体温数值
+ else:
+ EventMesh.publish("set_history_temp_value",0)
+ EventMesh.publish("play_temp_value",0)#播放体温数值
+ EventMesh.publish(constants.EVENT.STOP_TEMP)
+ print("AUTO once temp:{} tmp_f:{} tmp_f_tmp:{} tmp_d:{} tmp_d_tmp:{}".format(temp,tmp_f,tmp_f_tmp,tmp_d,tmp_d_tmp))
+
+
+ self.mearsure_btn = int(hr_time[0])
+ self.mearsure_timer = int(hr_time[1])
+ if self.mearsure_btn != None and self.mearsure_timer != None:
+ print("hr......01....{} {}\r\n".format(hr_time[0],hr_time[1]))
+ if self.mearsure_btn > 0:
+ if self.mearsure_timer > 0:
+ #print("get_hr_state:{} get_spo2_state:{} self.old_time:{} mearsure_timer:{}".format(self.get_hr_state,self.get_spo2_state,self.old_time,mearsure_timer))
+ if self.get_hr_state != 1 and self.get_spo2_state != 1:
+ if self.get_hr_state == 0 and self.get_spo2_state == 0:
+ if self.HR_state == 0 or self.HR_state == 3:
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+
+ if self.old_time != self.mearsure_timer:#重复修改测量间隔时间
+ self.SENSOR_time = time_tmp#防止改变时间的时候正在开启测量突然10s就停止测量
+ if self.get_hr_state == 2 and self.HR_state == 1:#自动检测的心率还在测量立马关了测试
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish("play_hr_value",heart_value)#测量成功
+ EventMesh.publish("set_history_hr_value",heart_value)
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)
+ else:
+ EventMesh.publish("play_hr_value",0)#测量失败
+ print("stop debug1")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ self.HR_state = 0
+ elif self.get_spo2_state == 2 and self.HR_state == 2:
+ self.HR_state = 0
+ spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish("play_spo2_value",spo2_value)
+ EventMesh.publish("set_history_spo2_value",spo2_value)
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ else:
+ EventMesh.publish("play_spo2_value",0)
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+ self.old_time = self.mearsure_timer
+
+ if self.HR_state == 3 or self.HR_state == 0:#
+ if (time_tmp - self.SENSOR_time) >= self.mearsure_timer:
+ if self.get_spo2_state == 3 or self.get_hr_state == 3:#单次测量没有完毕优先测量间隔时间测量的
+ if self.get_hr_state == 3:
+ print("stop debug2")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish("play_hr_value",heart_value)
+ EventMesh.publish("set_history_hr_value",heart_value)
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)
+ else:
+ EventMesh.publish("play_hr_value",0)
+
+ elif self.get_spo2_state == 3:
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+ spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish("set_history_spo2_value",spo2_value)
+ EventMesh.publish("set_old_spo2_data",spo2_value)
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ else:
+ EventMesh.publish("play_hr_value",0)
+
+ self.HR_state = 0
+ self.SENSOR_time = time_tmp
+ self.SENSOR_time = time_tmp
+ self.HR_state = 0
+
+ #print("time_tmp :{} self.SENSOR_time :{} time_tmp - self.SENSOR_time:{} self.HR_state:{}".format(time_tmp,self.SENSOR_time,time_tmp - self.SENSOR_time,self.HR_state))
+ if (time_tmp - self.SENSOR_time) == 0 and self.HR_state == 0:
+ print("START_HEART:1")
+ EventMesh.publish("set_hr_state",2)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_HEART)
+ self.HR_state = 1
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+ elif (time_tmp - self.SENSOR_time) >= 60 and self.HR_state == 1:
+ EventMesh.publish("set_hr_state",0)#2代表后台进入测试
+ print("stop debug3")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ print("heart_value:{}".format(heart_value))
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish("play_hr_value",heart_value)
+ EventMesh.publish("set_history_hr_value",heart_value)
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
+ else:
+ EventMesh.publish("play_hr_value",0)
+ #获取心率数据上传数据app
+ print("STOP_HEART:")
+
+ self.HR_state = 3
+ # EventMesh.publish("set_spo2_state",2)#2代表后台进入血氧测试
+ # EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
+ # print("START_BLOOD_OXYGEN:")
+ # elif (time_tmp - self.SENSOR_time) >= 120 and self.HR_state == 2:#有需要再打开
+ # print("STOP_BLOOD_OXYGEN:")
+ # EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ # EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#停止血氧测试
+ # spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ # print("spo2_value:{}".format(spo2_value))
+ # if spo2_value > 85 and spo2_value != None:
+ # EventMesh.publish("set_old_spo2_data",spo2_value)
+ # EventMesh.publish("set_history_spo2_value",spo2_value)
+ # EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ # self.HR_state = 3
+ else:
+ self.HR_state = 0
+ self.old_time = self.mearsure_timer
+
+ if self.HR_state == 3 or self.HR_state == 0:#只有不在测量的时候才测单次的
+ if self.get_spo2_state == 3 or self.get_hr_state == 3:#单次测量
+ self.HR_state = 0
+ self.HR_OneTime+=1
+ if self.HR_OneTime == 1 and self.HR_Onestate == 0:
+ print("hr..........\r\n")
+ if self.get_hr_state == 3:
+ self.Hr_Need_Open = 1
+ EventMesh.publish("set_hr_state",3)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_HEART)
+ else:
+ self.Hr_Need_Open = 0
+
+ if self.get_spo2_state == 3 and self.Hr_Need_Open == 0:
+ self.Spo2_Need_Open = 1
+ EventMesh.publish("set_spo2_state",3)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
+ else:
+ self.Spo2_Need_Open = 0
+ self.HR_Onestate = 1
+ # print("self.HR_Onestate....3..:{} {} {} {} {}".format(self.HR_Onestate,self.get_hr_state,self.get_spo2_state,self.Hr_Need_Open,self.Spo2_Need_Open))
+ elif self.HR_OneTime > 6 and self.HR_Onestate == 1:
+ # print("self.HR_Onestate...4....:{} {} {} {} {}".format(self.HR_Onestate,self.get_hr_state,self.get_spo2_state,self.Hr_Need_Open,self.Spo2_Need_Open))
+ if self.Hr_Need_Open == 1:#需要关闭心率测量
+ print("stop debug4")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish("set_history_hr_value",heart_value)
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
+ EventMesh.publish("play_hr_value",heart_value)
+ else:
+ EventMesh.publish("play_hr_value",0)
+
+ if self.Spo2_Need_Open == 0 and self.get_spo2_state == 3:
+ EventMesh.publish("set_spo2_state",3)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
+
+ self.HR_Onestate = 2
+ self.set_hsenor_crt = 2#血氧关闭
+ else:
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+ self.set_hsenor_crt = 0#
+
+ EventMesh.publish("set_hr_state",0)#2代表后台进入血氧测试
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ else:
+ if self.Spo2_Need_Open == 1:#停止测试血氧
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#K开血氧
+ spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+
+ if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ EventMesh.publish("play_spo2_value",spo2_value)
+ EventMesh.publish("set_history_spo2_value",spo2_value)
+ else:
+ EventMesh.publish("play_spo2_value",0)
+
+ if self.Hr_Need_Open == 0 and self.get_hr_state == 3:
+ EventMesh.publish("set_hr_state",3)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_HEART)
+ self.HR_Onestate = 2
+ self.set_hsenor_crt = 1#心率
+ else:
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+ self.set_hsenor_crt = 2#血氧关闭
+
+
+ elif self.HR_OneTime > 6+6 and self.HR_Onestate == 2:
+ print("HR_OneTime:....05")
+ if self.set_hsenor_crt == 2:
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#停止血氧测试
+ spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish("set_history_spo2_value",spo2_value)
+ EventMesh.publish("set_old_spo2_data",spo2_value)
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ else:
+ EventMesh.publish("play_hr_value",0)
+
+ elif self.set_hsenor_crt == 1:
+ EventMesh.publish("set_hr_state",0)#0代表g关闭测试
+ print("stop debug5")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish("set_history_hr_value",heart_value)
+ EventMesh.publish("play_hr_value",heart_value)
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
+ else:
+ EventMesh.publish("play_hr_value",0)
+ self.HR_Onestate = 0
+ else:
+ if self.get_spo2_state == 2 or self.get_hr_state == 2:#单次测量
+ if self.get_hr_state == 2:
+ EventMesh.publish("set_hr_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ elif self.get_spo2_state == 2:
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+ self.HR_state = 0
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+ self.set_hsenor_crt = 0
+ else:
+ #print("hr......01....{} {} self.HR_Onestate {} {}".format(self.get_hr_state,self.get_spo2_state,self.HR_OneTime,self.HR_Onestate))
+ self.SENSOR_time = time_tmp#进入最后一次的时间戳
+ self.old_time = 0
+
+ self.set_hsenor_crt = 0
+ if self.get_hr_state != 1 and self.get_spo2_state != 1:#没有设置间隔时间单次测量
+ if self.get_spo2_state == 3 or self.get_hr_state == 3:#单次测量
+ self.HR_state = 0
+ self.HR_OneTime+=1
+ if self.HR_OneTime == 1 and self.HR_Onestate == 0:
+ if self.get_hr_state == 3:
+ self.Hr_Need_Open = 1
+ EventMesh.publish("set_hr_state",3)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_HEART)
+ else:
+ self.Hr_Need_Open = 0
+
+ if self.get_spo2_state == 3 and self.Hr_Need_Open == 0:
+ self.Spo2_Need_Open = 1
+ EventMesh.publish("set_spo2_state",3)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
+ else:
+ self.Spo2_Need_Open = 0
+ self.HR_Onestate = 1
+
+ elif self.HR_OneTime > 6 and self.HR_Onestate == 1:
+ print("stop_heart Onec ")
+ if self.Hr_Need_Open == 1:#需要关闭心率测量
+ print("stop debug6")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ print("stop_heart heart_value:{}".format(heart_value))
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish("play_hr_value",heart_value)
+ EventMesh.publish("set_history_hr_value",heart_value)
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
+ else:
+ EventMesh.publish("play_hr_value",0)
+ if self.Spo2_Need_Open == 0 and self.get_spo2_state == 3:
+ EventMesh.publish("set_spo2_state",3)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
+ self.HR_Onestate = 2
+ self.set_hsenor_crt = 2#血氧关闭
+ else:
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+ self.set_hsenor_crt = 0#
+ EventMesh.publish("set_hr_state",0)#2代表后台进入血氧测试
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ else:
+ if self.Spo2_Need_Open == 1:#停止测试血氧
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#K开血氧
+ spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ print("spo2_value:{}.......01..".format(spo2_value))
+ if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish("play_spo2_value",spo2_value)
+ EventMesh.publish("set_history_spo2_value",spo2_value)
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ else:
+ EventMesh.publish("play_spo2_value",0)
+
+ if self.Hr_Need_Open == 0 and self.get_hr_state == 3:
+ EventMesh.publish("set_hr_state",3)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_HEART)
+ self.HR_Onestate = 2
+ self.set_hsenor_crt = 1#心率
+ else:
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+ self.set_hsenor_crt = 2#血氧关闭
+ print("STOP_BLOOD_OXYGEN:....06.....")
+
+ elif self.HR_OneTime > 6+6 and self.HR_Onestate == 2:
+ if self.set_hsenor_crt == 2:
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#停止血氧测试
+ spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish("play_spo2_value",spo2_value)
+ EventMesh.publish("set_history_spo2_value",spo2_value)
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ else:
+ EventMesh.publish("play_spo2_value",0)
+ elif self.set_hsenor_crt == 1:
+ EventMesh.publish("set_hr_state",0)#0代表g关闭测试
+ print("stop debug7")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish("play_hr_value",heart_value)
+ EventMesh.publish("set_history_hr_value",heart_value)
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
+ else:
+ EventMesh.publish("play_hr_value",0)
+ self.HR_Onestate = 0
+ else:
+ if self.get_spo2_state == 2 or self.get_hr_state == 2:#单次测量
+ if self.get_hr_state == 2:
+ EventMesh.publish("set_hr_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ elif self.get_spo2_state == 2:
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+ self.old_time = 0
+ else:
+ self.old_temp_time = 0
+ self.old_time = 0
+ if battery[0] == "1":
+ get_hr_state = EventMesh.publish("get_hr_state")
+ get_spo2_state = EventMesh.publish("get_spo2_state")
+ if get_hr_state != None and get_spo2_state != None:
+ if get_hr_state == 2 or get_hr_state == 3:
+ EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率
+ print("stop debug8")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ elif get_spo2_state == 2 or get_spo2_state == 3:
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+
+ if get_temp_time != None:
+ get_temp_state = EventMesh.publish("get_temp_state")
+ if get_temp_state == 2 or get_temp_state == 3:
+ self.temp_one_state = 0
+ self.temp_state = 0
+ temp = EventMesh.publish(constants.EVENT.GET_TEMP)
+ temp += 0.5
+ if temp < 25 or temp > 42:
+ temp = 0
+ EventMesh.publish("set_temp_state",0)
+ if temp > 0:
+ tmp_f = str(temp).split('.')[0]
+ tmp_f_tmp = int(tmp_f)
+
+ tmp_d = str(temp).split('.')[1][:1]
+ tmp_d_tmp = int(tmp_d)
+
+ if temp != None:
+ if temp != 0:
+ EventMesh.publish("set_history_temp_value",temp)
+ EventMesh.publish("play_temp_value",temp)#播放体温数值
+ EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
+ else:
+ EventMesh.publish("set_history_temp_value",0)
+ EventMesh.publish("play_temp_value",0)#播放体温数值
+ EventMesh.publish(constants.EVENT.STOP_TEMP)
+
+ self.SENSOR_time = time_tmp
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+ self.HR_state = 0
+ self.old_time = 0
+ self.set_hsenor_crt = 0
+
+ if 0:
+ hr_state = EventMesh.publish("get_hr_state")
+ spo2_state = EventMesh.publish("get_spo2_state")
+ temp_state = EventMesh.publish("get_temp_state")
+ if hr_state != None or spo2_state != None or temp_state != None:#手动测试
+ if hr_state == 1:
+ time_s = EventMesh.publish("get_start_measure_time")#设置开始测量的时间戳时间
+ if time_s != None:
+ if time_s != 0:
+ if (time_tmp - time_s) >= 60:#大于60s关闭测试
+ EventMesh.publish("set_hr_state",0)#0代表g关闭测试
+ print("stop debug7")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish("play_hr_value",heart_value)
+ EventMesh.publish("set_history_hr_value",heart_value)
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
+ else:
+ EventMesh.publish("play_hr_value",0)
+
+ pass
+ if spo2_state == 1:#手动测试血氧
+ time_s = EventMesh.publish("get_start_measure_time")#设置开始测量的时间戳时间
+ if time_s != None:
+ if time_s != 0:
+ if (time_tmp - time_s) >= 60:#大于60s关闭测试
+ EventMesh.publish("set_spo2_state",0)#0代表g关闭测试
+ print("stop spo2 debug7")
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+ spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish("play_spo2_value",spo2_value)
+ EventMesh.publish("set_old_spo2_data",spo2_value)
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ else:
+ EventMesh.publish("play_spo2_value",0)
+ pass
+
+ if temp_state == 1:#手动测试体温
+ time_s = EventMesh.publish("get_start_temp_measure_time")#设置开始测量的时间戳时间
+ if time_s != None:
+ if time_s != 0:
+ if (time_tmp - time_s) >= 60:#大于60s关闭测试
+ print("体温测量结束")
+ temp = EventMesh.publish(constants.EVENT.GET_TEMP)
+ temp += 0.5
+ if temp < 25 or temp > 42:
+ temp = 0
+ print("temp",temp)
+ EventMesh.publish("set_temp_state",0)
+ if temp > 0:
+ tmp_f = str(temp).split('.')[0]
+ tmp_f_tmp = int(tmp_f)
+
+ tmp_d = str(temp).split('.')[1][:1]
+ tmp_d_tmp = int(tmp_d)
+
+ if temp != None:
+ if temp != 0:
+ EventMesh.publish("set_history_temp_value",temp)
+ EventMesh.publish("play_temp_value",temp)#播放体温数值
+ EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
+ else:
+ EventMesh.publish("set_history_temp_value",0)
+ EventMesh.publish("play_temp_value",0)#播放体温数值
+
+ EventMesh.publish(constants.EVENT.STOP_TEMP)
+ pass
+
+ # EventMesh.publish("play_unread_wechat_infor")#每10s检测是否有未读语音数据
+
+ if battery[0] == "1":
+ if battery[1] >= 100:#充电已满
+ if self.charge_full_count == 0:
+ EventMesh.publish("set_usb_state",3)#
+ print("charge R_CHARGE_full")
+ self.charge_full_count = 1
+ else:
+ self.charge_full_count = 0
+ else:
+ self.charge_full_count = 0
+ low_power = battery[1]
+ if low_power <= 5:#小于5%红色灯慢闪
+ EventMesh.publish("set_led_time_arg",[1,2,10*11,led_mode.FLASH_LIGHT_RED,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1000,400,52,led_mode.FLASH_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#開始測量
+
+
+ # self.charge_full_count+=1
+ # print("self.charge_full_count",self.charge_full_count)
+ # if self.charge_full_count == 6:
+ # EventMesh.publish("set_usb_state", 1)#
+ # elif self.charge_full_count == 7:
+ # EventMesh.publish("set_usb_state", 2)#
+ # elif self.charge_full_count >= 8:
+ # self.charge_full_count = 0
+ # EventMesh.publish("set_usb_state", 2)#
+
+
+ def get_sim_Status(self, event, msg):
+ return sim.getStatus()
+ def get_device_ope(self, event, msg):
+ """
+ 获取设备运营商信息
+ :param event:
+ :param msg:
+ :return: 运营商
+ """
+ net_ope_map = {
+ "UNICOM": "中国联通HD",
+ "CMCC": "中国移动HD",
+ "CT": "中国电信HD"
+ }
+ """获取运营商"""
+ try:
+ short_eons = net.operatorName()[1]
+ except Exception:
+ return "无"
+ return net_ope_map.get(short_eons, None)
+
+ def get_signal(self, event=None, msg=None):
+ """
+ 获取信号事件
+ :param event:
+ :param msg:
+ :return: int 类型
+ """
+ return net.csqQueryPoll()
+
+ def get_time_bucket(self, time):
+ if time < 12:
+ return '上午'
+ else:
+ return '下午'
+
+ def get_week(self, week):
+ if week == 1:
+ return '一'
+ elif week == 2:
+ return '二'
+ elif week == 3:
+ return '三'
+ elif week == 4:
+ return '四'
+ elif week == 5:
+ return '五'
+ elif week == 6:
+ return '六'
+ elif week == 7 or week == 0:
+ return '日'
+
+ def get_time(self, event=None, msg=None):
+ """
+ 获取时间事件
+ :param event:
+ :param msg:
+ :return: HH:MM 格式
+ """
+ rtc_time = self.rtc.datetime()
+
+ date = ("%d月%d日" % (rtc_time[1], rtc_time[2]))
+ year = ("%04d年" % (rtc_time[0]))
+ week = ("星期%s"%(self.get_week(rtc_time[3])))
+ week_data = rtc_time[3]
+ time = [rtc_time[4], rtc_time[5]]
+ time_quantum = ("%s" % (self.get_time_bucket(rtc_time[4])))
+
+ result = [time, time_quantum, date , week,year,week_data]
+ #时分,上午下午,日期,星期,年 星期
+ return result
+
+ def get_step_count(self, event=None, msg=None):
+ """
+ 获取步数
+ """
+ XYZ = self.gsensor.get_x_y_z()
+ tmp = 0
+
+ tmp = self.gsensor.get_step()
+ # print("x:%d,y:%d,z:%d tmp %d",XYZ[0],XYZ[1],XYZ[2],tmp)
+ self.step[0]= tmp
+ self.step[1] = XYZ[0]
+ self.step[2] = XYZ[1]
+ self.step[3] = XYZ[2]
+
+ return self.step
+
+ def get_ic_cid(self, event, msg):
+ """
+ 获取ic cid事件
+ :param event:
+ :param msg:
+ :return: str ic cid
+ """
+ return sim.getIccid()
+
+ def get_phone_num(self, event, msg):
+ """
+ 获取电话号码事件
+ :param event:
+ :param msg:
+ :return: str number
+ """
+ return sim.getPhoneNumber()
+
+ def get_battery(self, event=None, msg=None):
+ """
+ 获取电池事件,暂时没支持
+ :param event:
+ :param msg:
+ :return:
+ """
+
+ charge_state = '0'
+ if self.get_usb_state() == 1:
+ charge_state = '1'
+ else:
+ charge_state = '0'
+
+ #temp = Power.getVbatt()
+ temp = EventMesh.publish("get_curr_battery_level")
+ vbat = EventMesh.publish("get_battery",temp)
+ if vbat == None:
+ vbat = 100
+ # print("vbat",vbat)
+ # if temp != None :
+ # if temp <= 3505:
+ # vbat = 0
+ # elif temp <= 3699:
+ # vbat = 20 #"E:/vbat_20.jpg"
+ # elif temp <= 3772:
+ # vbat = 40 #"E:/vbat_40.jpg"
+ # elif temp <= 3882:
+ # vbat = 60 #"E:/vbat_60.jpg"
+ # elif temp <= 4070:
+ # vbat = 80 #"E:/vbat_80.jpg"
+ # elif temp <= 4200:
+ # vbat = 90 #
+ # else:
+ # vbat = 100 #"E:/vbat_100.jpg"
+ # else:
+ # vbat = 100
+
+ result = [charge_state, vbat]
+
+ return result
+ #Set the current average battery level
+ def set_curr_battery_level(self, event=None, msg=None):
+ self.curr_battery_level = msg
+
+ def get_curr_battery_level(self, event=None, msg=None):
+ return self.curr_battery_level
+
+ def get_device_fw_version(self, *args):
+ '''
+ 获取设备固件版本号
+ '''
+ fw_version = modem.getDevFwVersion()
+ if isinstance(fw_version, str):
+ return fw_version
+ return "--"
+
+ def get_standby_time(self, *args):
+ '''
+ 获取设备单次开机待机时间
+ '''
+ time_msg = utime.time()
+ d = int(
+ time_msg / 86400) # The int call removes the decimals. Conveniently, it always rounds down. int(2.9) returns 2 instead of 3, for example.
+ time_msg -= (
+ d * 86400) # This updates the value of x to show that the already counted seconds won't be double counted or anything.
+ h = int(time_msg / 3600)
+ time_msg -= (h * 3600)
+ m = int(time_msg / 60)
+ time_msg -= (m * 60)
+ s = time_msg
+ result = "{}天{}小时{}分".format(d, h, m)
+ return result
+
+ def set_key(self, topic, msg):
+ self.key = msg["value"]
+ def get_key(self, topic, msg):
+ return self.key
+
+ def get_imei(self, topic, msg):
+ if not self.imei:
+ self.imei = modem.getDevImei()
+ return self.imei
+
+ def get_cid(self, topic, msg):
+ return self.cid
+
+ def set_cid(self, topic, msg):
+ self.cid = msg["value"]
+
+ def get_imsi(self, topic, msg):
+ if not self.imei:
+ self.imei = sim.getImsi()
+ return self.imsi
+
+ def get_password(self, topic, msg):
+ return self.password
+
+ def set_password(self, topic, msg):
+ self.password = msg["value"]
+
+ def set_ping(self, topic, msg):
+ self.PING = msg
+ def get_ping(self, topic, msg):
+ return self.PING
+
+ def set_connect(self, topic, msg):
+ #print("set_connect:{}".format(msg))
+ self.connect = msg
+ def get_connect(self, topic, msg):
+ return self.connect
+
+ def start_blood_oxygen(self, topic, msg):
+ print("start_blood_oxygen!!!")
+ self.hsensor.open_blood_oxygen()
+
+ def start_heart(self, topic, msg):
+ print("start_heart!!!")
+ self.hsensor.open_heart()
+
+ def stop_blood_oxygen(self, topic, msg):
+ print("stop_blood_oxygen!!!")
+ self.hsensor.close()
+
+ def stop_heart(self, topic, msg):
+ print("stop_heart!!!")
+ self.hsensor.close()
+
+ def get_blood_oxygen(self, topic, msg):
+ data = self.hsensor.get_all_data()
+ return data[1]
+
+ def get_heart(self, topic, msg):
+ data = self.hsensor.get_all_data()
+ return data[0]
+
+ def get_wear(self, topic, msg):
+ pass
+ # return self.hsensor.get_wear()
+
+ def get_Hsensor(self, topic, msg):
+ return self.hsensor
+
+ def Hsensor_set_sleep(self, topic, msg):
+ self.hsensor.set_sleep()
+
+ def start_temp(self, topic, msg):
+ print("start_temp!!!!!!!")
+ WHO_AM_I = bytearray([0x01, 0])
+ I2C_SLAVE_ADDR = 0x49
+ r_data = bytearray(2)
+ data = bytearray([0x61A0, 0]) # 唤醒
+ return self.i2c0.write(I2C_SLAVE_ADDR, WHO_AM_I, 1, data, 2)
+ def stop_temp(self, topic, msg):
+ print("stop_temp!!!!!!!")
+ WHO_AM_I = bytearray([0x01, 0])
+ I2C_SLAVE_ADDR = 0x49
+ r_data = bytearray(2)
+ data = bytearray([0x60A0, 0]) #休眠
+ return self.i2c0.write(I2C_SLAVE_ADDR, WHO_AM_I, 1, data, 2)
+
+ def get_temp(self, topic, msg):
+ WHO_AM_I = bytearray([0x00, 0])
+ I2C_SLAVE_ADDR = 0x49
+ r_data = bytearray(2)
+ self.i2c0.read(I2C_SLAVE_ADDR, WHO_AM_I, 1, r_data, 2, 0)
+ #print("temp_data:{}".format(r_data))
+ temp_s = ((r_data[0]<<8) | (r_data[1]))>>4
+ #print("temp_s:{}".format(temp_s))
+ temp_data = temp_s * 0.0625
+ #print("temp_data:{}".format(temp_data))
+ return temp_data
+
+
+
+ def sim_slot_get(self, topic=None, msg=None):
+ return sim.getCurSimid()
+
+ def sim_slot_switch(self, topic=None, slot=None):
+ """
+ sim 卡槽切换
+ :param topic:
+ :param slot:
+ :return: 切换sim卡卡槽 0 切换成功, 1 无需切换, -1 切换失败
+ """
+ if self.sim_slot_get() == slot:
+ return 1
+ else:
+ return sim.switchCard(slot)
+
+ def usb_event_cb(self, state):
+ status = state
+
+ if status == 1:#插入USB
+ print("charge R_CHARGE_in")
+ EventMesh.publish("set_usb_state", 1)#
+ pass
+ elif status == 0:#拨出usbs
+ EventMesh.publish("set_usb_state", 2)#
+ print("charge R_CHARGE_out")
+
+
+
+
+
+ def get_usb_state(self):
+ state = self.usb.getStatus()
+ if state == -1:
+ state = 0
+ return state
+
+
+def wifiScan_cb(args):
+ EventMesh.publish(constants.EVENT.WIFIINFO, args)
+
+class LocationManager(Abstract):
+
+ def __init__(self):
+ self.gps = None
+ self.match = GPSMatch()
+ self.timer_read_GPS_info = osTimer()
+ self.wifi_data = []
+ self.gps_data = []
+ self.cell_data = []
+ self.location_timer_count = 0
+ self.location_check_data_timer_count = 0
+ self.location_type = 0 #定位类型,0:正常定位,有gps数据或60秒关闭;1:测试模式,只有发CLOSE_LOCATION消息才关闭
+ self.location_flag = 0
+ self.start_location_flag = 0
+ self.location_thread_id = 0
+ self.location_thread_id = _thread.start_new_thread(self.location_thread, ())
+ self.location_queue = Queue(100)
+ #quecgnss.init()
+ #quecgnss.gnssEnable(0)
+ @staticmethod
+ def get_date():
+ return "{:04d}-{:02d}-{:02d}".format(*utime.localtime()[0:3])
+
+ @staticmethod
+ def get_time():
+ return "{:02d}:{:02d}:{:02d}".format(*utime.localtime()[3:6])
+
+ def post_processor_after_instantiation(self):
+ _gps_cfg = {
+ "UARTn": UART.UART1,
+ "buadrate": 115200,
+ "databits": 8,
+ "parity": 0,
+ "stopbits": 1,
+ "flowctl": 0,
+ "PowerPin": Pin.GPIO2,
+ "StandbyPin": Pin.GPIO3,
+ "BackupPin": None,
+ "gps_mode": 0x01,
+ }
+ self.gps = GPS(**_gps_cfg)
+ self.gps.power_switch(0)#关闭GPS
+ EventMesh.subscribe(constants.EVENT.GPSOPEN, self.gps_open)
+ EventMesh.subscribe(constants.EVENT.GPSCLOSE, self.gps_close)
+ EventMesh.subscribe(constants.EVENT.START_LOCATION, self.start_location)
+ EventMesh.subscribe(constants.EVENT.START_LOCATION_TEST, self.start_location_test)
+ EventMesh.subscribe(constants.EVENT.WIFIINFO, self.WIFI_INFO)
+ EventMesh.subscribe(constants.EVENT.WIFISCANOPEN,self.WIFI_scan_open)
+ EventMesh.subscribe(constants.EVENT.CLOSE_LOCATION,self.close_location)
+ EventMesh.subscribe("get_location_flag",self.get_location_flag)
+
+ #EventMesh.subscribe(constants.EVENT.GPSCLOSE, self.gps_close)
+ def get_location_flag(self, event, msg):
+ return self.location_flag
+ def start_location(self, event, msg):
+ self.location_queue.put(msg)#测试类型入队
+ print("start_location:{}".format(msg))
+ self.timer_read_GPS_info.start(1000, 1, self.location_timer)
+ if( self.location_flag == 1):
+ return
+ self.location_timer_count = 0
+ self.location_flag = 1
+ #self.gps_open(event, msg)
+
+ self.start_location_flag = 1
+
+ def start_location_test(self, event, msg):
+ print("start_location_test")
+ self.timer_read_GPS_info.start(1000, 1, self.location_timer)
+ if( self.location_flag == 1):
+ return
+ self.location_timer_count = 0
+ self.location_flag = 1
+ #self.gps_open(event, msg)
+ self.location_type = 1
+ self.start_location_flag = 1
+
+ def close_location(self, event, msg):
+ self.location_flag = 0
+ self.location_type = 0
+ self.gps.power_switch(0)
+ wifiScan.control(0)
+ self.timer_read_GPS_info.stop()
+
+
+ def WIFI_INFO(self, event, msg):
+ self.wifi_data = msg
+ # print("WIFI_INFO:")
+ # print([msg[0],msg])
+
+ def WIFI_scan_open(self, event, msg):
+ #print("WIFI_scan_open")
+ self.wifi_data = []
+ if wifiScan.support():
+ if wifiScan.getState() == False :
+ wifiScan.control(1)
+ wifiScan.setConfig(4, 2, 5, 6, 0) #设置WiFi参数,10秒上层,两轮,最多6个,6秒底层,PS优先
+ wifiScan.setCallback(wifiScan_cb) #注册回调函数
+ wifiScan.asyncStart()
+ #print("wifiScan.asyncStart")
+ else :
+ print("WIFI_scan_open:error1")
+ def gps_open(self, event, msg):
+ #print("publish:gps_open")
+ #quecgnss.init()
+ quecgnss.gnssEnable(1)
+ self.gps.__gps_nmea_data_clean()
+ def gps_close(self, event, msg):
+ quecgnss.gnssEnable(0)
+ def location_timer(self, *args, **kwargs):
+
+ self.location_timer_count = self.location_timer_count +1
+ self.location_check_data_timer_count = self.location_check_data_timer_count+1
+
+ def Location_send(self, msg) :
+ #print("Location_send1")
+ date = "{:04d}{:02d}{:02d},{:02d}{:02d}{:02d}".format(*utime.localtime()[0:6])
+ date = date[2:]
+ GPS_type = "V"
+ latitude = "0.000000,N"
+ longitude = "0.000000,E"
+ speed = "0.00"
+ direction = "0.0"
+ high = "100.0"
+ number = "0"
+ if msg[0] != [] :#有GPS数据
+ GPS_type = "A"
+ # 纬度
+ latitude = msg[0]["latitude"]
+ # 经度
+ longitude = msg[0]["longitude"]
+ # 速度
+ speed = msg[0]["speed"]
+ # 方向
+ direction = "0"
+ if msg[0]["direction"] :
+ direction = msg[0]["direction"]
+ # 高度
+ high = msg[0]["high"]
+ high_tmp = high.split(".")
+ if len(high_tmp) >= 2 :
+ high = "%s"%(high_tmp[0])
+ # 讯号质量:搜索到的卫星数目
+ number = msg[0]["number"]
+ #gsm 信号强度
+ gsm_sig = str((100//31)*EventMesh.publish("screen_get_sig"))
+ # 电池电量百分比
+ bat_tmp = EventMesh.publish("screen_get_battery")
+ battery_caption = str(bat_tmp[1])
+ #步数
+ old_step = 0
+ step = 0
+ step = EventMesh.publish("get_old_step_value")
+ if step != 0:
+ tmp_data = EventMesh.publish("get_storage_config","old_step_new")
+ if tmp_data != None:
+ old_step = tmp_data
+ if old_step != step:
+ EventMesh.publish("set_storage_config",["old_step",step])
+ EventMesh.publish("set_storage_config",["old_step_new",step])
+
+ old_step = step
+ # step = str(EventMesh.publish(constants.EVENT.GET_STEP)[0])
+ #翻转次数
+ turn_count = "0"
+ #终端状态
+ state = "00000000"
+ #基站数据
+ CELL_num = len(msg[2])
+ CELL_data = "1," #时延
+ if msg[2] != []:
+ for CELL in msg[2] :
+ if CELL[0] == 0 :
+ CELL_data += "%X,"%(int(CELL[2])) #MCC
+ CELL_data += str(CELL[3]) +","#MNC
+ CELL_data += str(CELL[5]) +","#tac,区域码
+ CELL_data += str(CELL[1]) +","#基站编号 CID
+ CELL_data += str(int(CELL[7]+140)) +","#信号强度 rssi
+ else :
+ CELL_data += str(CELL[5]) +","#tac,区域码
+ CELL_data += str(CELL[1]) +","#基站编号 CID
+ CELL_data += str(int(CELL[7]+140)) +","#信号强度 rssi
+ CELL_data = CELL_data[:(len(CELL_data)-1)]
+ #WIFI数据
+ WIFI_num = 0
+ WIFI_data = ""
+ if msg[1] :
+ WIFI_num = msg[1][0]
+ i = 0
+ for MAC in msg[1][1] :
+ WIFI_data += "wifi%d,%s,%d,"%(i,str(MAC[0]),MAC[1])
+ i += 1
+ WIFI_data = WIFI_data[:(len(WIFI_data)-1)]
+ WIFI_data = WIFI_data.lower()
+ #send_data = "UD ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%s ,%d ,%s ,%d ,%s"\
+ # %(date,GPS_type,latitude,longitude,speed,direction,high,number,gsm_sig,battery_caption,step,turn_count,state,CELL_num,CELL_data,WIFI_num,WIFI_data)
+ #定位数据
+ send_data = "%s,%s,%s"%(date,GPS_type,latitude)
+ send_data += ",%s,%s,%s"%(longitude,speed,direction)
+ send_data += ",%s,%s,%s"%(high,number,gsm_sig,)
+ send_data += ",%s,%s,%s"%(battery_caption,step,turn_count)
+ send_data += ",%s,%d,%s"%(state,CELL_num,CELL_data)
+ send_data += ",%d,%s"%(WIFI_num,WIFI_data)
+ #print("Location_send2:{} q_size:{}".format(send_data,self.location_queue.size()))
+ while True:
+ if self.location_queue.empty() == False:
+ TYPE = self.location_queue.get()
+ #print("Location_send3:{}".format(TYPE))
+ EventMesh.publish(TYPE,send_data)
+ else :
+ break
+
+
+ def location_thread(self):
+
+ gnss_r_data = ""
+ while True:
+ 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)
+ self.location_timer_count
+ #quecgnss.read(4096)#去掉第一次错误数据
+ match_gga_data = []
+ #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)
+ 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*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: #测试模式
+ 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 > 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
+ utime.sleep_ms(1000)
+ #print("location_timer_count:{}".format(self.location_timer_count))
+ 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))
+ self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
+ EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
+
+
+
+class AddrBookManager(Abstract):
+ # 通讯录
+ def __init__(self):
+ self.read_phonebook = {}
+ self.check_json = 0
+ self.check_json = ql_fs.path_exists("/usr/static/storage_file/phonebook.json")
+
+ if self.check_json == True:
+ with open("/usr/static/storage_file/phonebook.json","r",encoding="utf-8") as fd:
+ self.read_phonebook = ujson.load(fd)
+ print("读取电话本")
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("get_phonebook_list", self.get)
+ EventMesh.subscribe("set_phonebook_list", self.set)
+ EventMesh.subscribe("call_phonebook_one_call", self.call_phonebook_one_call)
+ EventMesh.subscribe("call_phonebook_two_call", self.call_phonebook_two_call)
+ EventMesh.subscribe("call_phonebook_three_call", self.call_phonebook_three_call)
+
+ def get(self, event, msg):
+ self.check_json = ql_fs.path_exists("/usr/static/storage_file/phonebook.json")
+ return [self.check_json,self.read_phonebook]
+
+ def call_phonebook_one_call(self, event, msg):
+ name = ''
+ key_tmp = ''
+ if self.read_phonebook != {}:
+ if len(self.read_phonebook) >= 1:
+ phonebook_keys = sorted(self.read_phonebook.keys())
+ name = self.read_phonebook[phonebook_keys[0]]
+ key_tmp = phonebook_keys[0]
+ if len(name) != 0:
+ EventMesh.publish("save_phonename",str(name))
+ EventMesh.publish("save_phonenum",str(name))
+ EventMesh.publish("dial_out_call_center_cb",str(name))#电话拨出去
+ else:
+ EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
+ else:
+ EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
+ else:
+ EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
+ print("call_phonebook_one_call name:{} key_tmp:{} len:{}".format(name,key_tmp,len(self.read_phonebook)))
+
+ def call_phonebook_two_call(self, event, msg):
+ name = ''
+ key_tmp = ''
+ if self.read_phonebook != {}:
+ if len(self.read_phonebook) >= 2:
+ phonebook_keys = sorted(self.read_phonebook.keys())
+ name = self.read_phonebook[phonebook_keys[1]]
+ key_tmp = phonebook_keys[1]
+ if len(name) != 0:
+ #voiceCall.callStart(str(name))
+ EventMesh.publish("save_phonename",str(name))
+ EventMesh.publish("save_phonenum",str(name))
+ EventMesh.publish("dial_out_call_center_cb",str(name))#电话拨出去
+ else:
+ EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
+
+ else:
+ EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
+ else:
+ EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
+ print("call_phonebook_two_call name:{} key_tmp:{}".format(name,key_tmp))
+
+ def call_phonebook_three_call(self, event, msg):
+ name = ''
+ key_tmp = ''
+ if self.read_phonebook != {}:
+ if len(self.read_phonebook) >= 3:
+ phonebook_keys = sorted(self.read_phonebook.keys())
+ name = self.read_phonebook[phonebook_keys[2]]
+ key_tmp = phonebook_keys[2]
+ if len(name) != 0:
+ EventMesh.publish("save_phonename",str(name))
+ EventMesh.publish("save_phonenum",str(name))
+ EventMesh.publish("dial_out_call_center_cb",str(name))#电话拨出去
+ # voiceCall.callStart(str(name))
+ else:
+ EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
+
+ else:
+ EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
+ print("call_phonebook_three_call name:{} key_tmp:{}".format(name,key_tmp))
+
+ def set(self, event, msg):
+ self.check_json = msg[0]
+ self.read_phonebook = msg[1]
+
+import sms
+class MsgManager(Abstract):
+ # 短信
+ def __init__(self):
+ self.msg_nums = 0
+ self.msg_detail = ""
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("get_msg_nums", self.get_msg_nums)
+ # 可通过此push_addr_book_list主动推送
+ EventMesh.subscribe("get_msg_detail", self.get_msg_detail)
+
+ def get_msg_nums(self, event, msg):
+
+ self.msg_nums = sms.getMsgNums()
+ print("self.msg_nums {}:".format(self.msg_nums))
+ return self.msg_nums
+
+ def get_msg_detail(self, event, msg):
+
+ # self.msg_detail = sms.searchTextMsg(self.msg_nums)
+ # print("self.msg_detai {}:".format(self.msg_detai))
+ return{
+ "小明":"有内鬼,停止交易",
+ "小红":"今晚十点一起吃饭"
+ }
+
+class MsgdetailManager(Abstract):
+ def __init__(self):
+ self.level = 0
+ self.msg_name = ""
+ self.msg_content = ""
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("save_msg_name", self.save_msg_name)
+ EventMesh.subscribe("save_msg_content", self.save_msg_content)
+ EventMesh.subscribe("get_msg_name", self.get_msg_name)
+ EventMesh.subscribe("get_msg_content", self.get_msg_content)
+
+ def save_msg_name(self, event, msg):
+ self.msg_name = str(msg)
+ print("save_msg_name:msg".format(msg))
+
+ def save_msg_content(self, event, msg):
+ self.msg_content = str(msg)
+ print("save_msg_content:msg".format(msg))
+
+ def get_msg_content(self, event, msg):
+ return self.msg_content
+
+ def get_msg_name(self, event, msg):
+ return self.msg_name
+
+class CallLogManager(Abstract):
+ # 通话记录
+ def __init__(self):
+ self.read_call_log = {}
+ self.check_json = ql_fs.path_exists("/usr/static/storage_file/Call_log.json")
+
+ if self.check_json == True:
+ with open("/usr/static/storage_file/Call_log.json","r",encoding="utf-8") as fd:
+ self.read_call_log = ujson.load(fd)
+ print("读取通话记录")
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("get_call_log_list", self.get)
+ EventMesh.subscribe("set_call_log_list", self.set)
+
+ def get(self, event, msg):
+ self.check_json = ql_fs.path_exists("/usr/static/storage_file/Call_log.json")
+ return [self.check_json,self.read_call_log]
+
+ def set(self, event, msg):
+ return
+ self.check_json = msg[0]
+ self.read_call_log = msg[1]
+ with open("/usr/static/storage_file/Call_log.json","w+",encoding="utf-8") as fd:
+ ujson.dump(self.read_call_log,fd)
+ # def call_usr(self,event,msg):
+ # content = self.log[msg]
+ # # 参数1 姓名 参数2 电话 参数3 1/主动呼叫 0别人呼叫
+ # EventMesh.publish("call_in", [content[2], content[0], 1])
+
+
+
+class PhoneCallingManager(Abstract):
+ def __init__(self):
+ self.phonenum = ""
+ self.phonename = ""
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("save_phonenum", self.save_phonenum)
+ EventMesh.subscribe("get_phonenum", self.get_phonenum)
+ EventMesh.subscribe("get_phonename", self.get_phonename)
+ EventMesh.subscribe("save_phonename", self.save_phonename)
+
+ def get_phonename(self, event, msg):
+ return self.phonename
+
+ def save_phonename(self, event, msg):
+ self.phonename = str(msg)
+
+ def save_phonenum(self, event, msg):
+ self.phonenum = str(msg)
+
+ def get_phonenum(self, event, msg):
+ return self.phonenum
+
+#获取心率 血氧 步数历史数据
+class gethistoryDataManager(Abstract):
+ def __init__(self):
+ self.oldHr = 0
+ self.oldspo2 = 0
+ self.oldstep = 0
+ self.old_step = 0
+ self.read_histroy_hr_data = []
+ self.read_histroy_temp_data = []
+ self.read_histroy_spo2_data = []
+
+ oldHr = EventMesh.publish("get_storage_config","old_hr")
+ if oldHr != None:
+ self.oldHr = oldHr
+ old_spo2 = EventMesh.publish("get_storage_config","old_spo2")
+ if old_spo2 != None:
+ self.oldspo2 = old_spo2
+ old_step = EventMesh.publish("get_storage_config","old_step")
+ if old_step != None:
+ self.oldstep = old_step
+
+
+ check_hr= ql_fs.path_exists("/usr/static/storage_file/history_hr.json")
+ if check_hr == True :
+ with open("/usr/static/storage_file/history_hr.json","r") as fd:#音频文件编号
+ self.read_histroy_hr_data = ujson.load(fd)
+
+ check_temp= ql_fs.path_exists("/usr/static/storage_file/history_temp.json")
+ if check_temp == True :
+ with open("/usr/static/storage_file/history_temp.json","r") as fd:#音频文件编号
+ self.read_histroy_temp_data = ujson.load(fd)
+
+ check_spo2= ql_fs.path_exists("/usr/static/storage_file/history_spo2.json")
+ if check_spo2 == True :
+ with open("/usr/static/storage_file/history_spo2.json","r") as fd:#音频文件编号
+ self.read_histroy_spo2_data = ujson.load(fd)
+ self.temp_value = 0
+
+ # self.read_histroy_hr_data=[{"timeSec":16789890,"value":90},{"timeSec":16789888,"value":78},{"timeSec":16789688,"value":68},{"timeSec":16789898,"value":58},\
+ # {"timeSec":16789897,"value":88},{"timeSec":16789867,"value":77},{"timeSec":16789895,"value":70}]
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_old_hr_data", self.save_hr_value)
+ EventMesh.subscribe("get_old_hr_data", self.get_hr_value)
+ EventMesh.subscribe("set_old_spo2_data", self.save_spo2_value)
+ EventMesh.subscribe("get_old_spo2_data", self.get_spo2_value)
+
+ EventMesh.subscribe("get_old_step_value", self.get_old_step_value)
+ EventMesh.subscribe("set_old_step_value", self.set_old_step_value)
+
+
+ EventMesh.subscribe("get_history_hr_value", self.get_history_hr_value)
+ EventMesh.subscribe("set_history_hr_value", self.set_history_hr_value)
+
+ EventMesh.subscribe("get_history_temp_value", self.get_history_temp_value)
+ EventMesh.subscribe("set_history_temp_value", self.set_history_temp_value)
+
+ EventMesh.subscribe("get_history_spo2_value", self.get_history_spo2_value)
+ EventMesh.subscribe("set_history_spo2_value", self.set_history_spo2_value)
+
+
+
+ def get_history_spo2_value(self, event, msg): #近7次血氧历史数据统计显示
+ return self.read_histroy_spo2_data
+
+ def set_history_spo2_value(self, event, msg):
+ pass
+
+
+
+ def get_history_temp_value(self, event, msg): #近7次体温历史数据统计显示
+ return self.read_histroy_temp_data
+
+ def set_history_temp_value(self, event, msg):
+ self.temp_value = msg
+ if self.temp_value > 0:
+ # date_tmp = utime.localtime()
+ # time_tmp = utime.mktime(date_tmp)
+ # if len(self.read_histroy_temp_data) >= 7:
+ # sort_new = {}
+ # sort_new = sorted(self.read_histroy_temp_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条
+ # print(sort_new)
+ # for i in range(len(self.read_histroy_temp_data)-1):
+ # sort_new[i] = sort_new[i+1]#0==1 1== 2 2== 3 3==4 4==5 5==6 6==7
+ # self.read_histroy_temp_data[i] = sort_new[i]
+ # pass
+ # self.read_histroy_temp_data[6] = {"timeSec": time_tmp, "temp": self.temp_value}
+ # else:
+ # self.read_histroy_temp_data.append({"timeSec": time_tmp, "temp": self.temp_value})
+
+ # with open("/usr/static/storage_file/history_temp.json","w",encoding="utf-8") as fd:
+ # ujson.dump(self.read_histroy_temp_data,fd)
+ #print(self.read_histroy_temp_data)
+ pass
+ else:
+ pass
+
+ def get_history_hr_value(self, event, msg): #近7次心率历史数据统计显示
+ return self.read_histroy_hr_data
+
+ def set_history_hr_value(self, event, msg):
+ pass
+
+
+
+ def save_hr_value(self, event, msg):
+ if msg >= 50:
+ EventMesh.publish("set_storage_config",["old_hr",msg])
+ self.oldHr = msg
+
+
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ if len(self.read_histroy_hr_data) >= 7:
+ sort_new = {}
+ sort_new = sorted(self.read_histroy_hr_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条
+ print(sort_new)
+ for i in range(len(self.read_histroy_hr_data)-1):
+ sort_new[i] = sort_new[i+1]#0==1 1== 2 2== 3 3==4 4==5 5==6 6==7
+ self.read_histroy_hr_data[i] = sort_new[i]
+ pass
+ self.read_histroy_hr_data[6] = {"timeSec": time_tmp, "hr": self.oldHr}
+ else:
+ self.read_histroy_hr_data.append({"timeSec": time_tmp, "hr": self.oldHr})
+
+
+ with open("/usr/static/storage_file/history_hr.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_histroy_hr_data,fd)
+ pass
+ else:
+ pass
+
+
+ def get_hr_value(self, event, msg):
+ return self.oldHr
+
+ def save_spo2_value(self, event, msg):
+ if msg >= 85:
+ # EventMesh.publish("set_storage_config",["old_spo2",msg])
+ # self.oldspo2 = msg
+
+
+ # date_tmp = utime.localtime()
+ # time_tmp = utime.mktime(date_tmp)
+ # if len(self.read_histroy_spo2_data) >= 7:
+ # sort_new = {}
+ # sort_new = sorted(self.read_histroy_spo2_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条
+ # print(sort_new)
+ # for i in range(len(self.read_histroy_spo2_data)-1):
+ # sort_new[i] = sort_new[i+1]#0==1 1== 2 2== 3 3==4 4==5 5==6 6==7
+ # self.read_histroy_spo2_data[i] = sort_new[i]
+ # pass
+ # self.read_histroy_spo2_data[6] = {"timeSec": time_tmp, "spo2": self.oldspo2}
+ # else:
+ # self.read_histroy_spo2_data.append({"timeSec": time_tmp, "spo2": self.oldspo2})
+
+ # with open("/usr/static/storage_file/history_spo2.json","w",encoding="utf-8") as fd:
+ # ujson.dump(self.read_histroy_spo2_data,fd)
+ # #print(self.read_histroy_spo2_data)
+ #播放语音
+ # EventMesh.publish("set_hr_blood_led",2)#测量成功
+ pass
+ else:
+ pass
+ pass
+
+ def get_spo2_value(self, event, msg):
+ return self.oldspo2
+
+ def set_old_step_value(self, event, msg):
+ self.oldstep = msg
+
+
+ def get_old_step_value(self, event, msg):
+ step = EventMesh.publish(constants.EVENT.GET_STEP)
+ self.old_step = self.oldstep + step[0]
+ return self.old_step
+#获取旧的时间戳
+class getOldTimeManager(Abstract):
+ # 获取天气数据
+ def __init__(self):
+ self.time_sec = 0
+ tmp_data = EventMesh.publish("get_storage_config","old_time")
+ if tmp_data !=None :
+ self.time_sec = tmp_data
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("get_old_time_data", self.get_old_time_data)
+ EventMesh.subscribe("set_old_time_data", self.set_old_time_data)
+
+ def get_old_time_data(self, event, msg):
+ return self.time_sec
+
+ def set_old_time_data(self, event, msg):
+ self.time_sec = msg
+ EventMesh.publish("set_storage_config",["old_time",msg])
+
+
+
+
+
+
+
+class getWeatherDataManager(Abstract):
+ # 获取天气数据
+ def __init__(self):
+ self.date = {} #日期23-04-07
+ self.time = {} #14:41:41
+ self.content = {} #天气描述
+ self.type = None #天气类型
+ self.temp = None #当前温度
+ self.min_temp = None #最低温度
+ self.max_temp = None #最高温度
+ self.city = {} #城市
+ self.no_data = 0#0沒有数据 1有数据
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("get_weather_data", self.get)
+ EventMesh.subscribe("set_weather_data", self.set)
+
+ def get(self, event, msg):
+ return [self.date,self.time,self.content,self.type,self.temp,self.min_temp,self.max_temp,self.city,self.no_data]
+
+ def set(self, event, msg):
+ self.date = msg[0]
+ self.time = msg[1]
+ self.content = msg[2]
+ self.type = msg[3]
+ self.temp = msg[4]
+ self.min_temp = msg[5]
+ self.max_temp = msg[6]
+ self.city = msg[7]
+ self.no_data = msg[8]
+
+
+class getHrTimeManager(Abstract):
+ def __init__(self):
+ self.set_time = 0
+ self.set_hr = 0 #0关闭 1手动 2 自动测量按照时间间隔测试心率
+ self.set_spo2 = 0
+ self.open_btn = 0
+ read_data = EventMesh.publish("get_storage_config","measure_time")
+ if read_data != None:
+ self.set_time = read_data
+ read_data = EventMesh.publish("get_storage_config","open_hr_btn")
+
+ if read_data != None:
+ self.open_btn = read_data
+
+
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_time_hr_spo2", self.set_time_hr_spo2)
+ EventMesh.subscribe("get_time_hr_spo2", self.get_time_hr_spo2)
+ EventMesh.subscribe("set_hr_state", self.set_hr_state)
+ EventMesh.subscribe("get_hr_state", self.get_hr_state)
+ EventMesh.subscribe("set_spo2_state", self.set_spo2_state)
+ EventMesh.subscribe("get_spo2_state", self.get_spo2_state)
+
+
+ def set_time_hr_spo2(self, event, msg):
+ self.open_btn = msg[0]
+ self.set_time = msg[1]
+ EventMesh.publish("set_storage_config",["measure_time",self.set_time])
+ EventMesh.publish("set_storage_config",["open_hr_btn",self.open_btn])
+
+ def get_time_hr_spo2(self, event, msg):
+ return [self.open_btn,self.set_time]
+
+ def set_hr_state(self, event, msg):
+ if msg != 0:
+ EventMesh.publish("set_hr_blood_led",1)#红绿灯交替闪烁
+ self.set_hr = msg
+
+
+ def get_hr_state(self, event, msg):
+ return self.set_hr
+
+ def set_spo2_state(self, event, msg):
+ if msg != 0:
+ EventMesh.publish("set_hr_blood_led",1)##红绿灯交替闪烁
+ self.set_spo2 = msg
+
+
+ def get_spo2_state(self, event, msg):
+ return self.set_spo2
+
+#体温
+class getTempTimeManager(Abstract):
+ def __init__(self):
+ self.set_time = 0
+ self.get_temp = 0
+ read_data = EventMesh.publish("get_storage_config","temp_time")
+
+ if read_data != None:
+ self.set_time = read_data
+
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_temp_time", self.set_temp_time)
+ EventMesh.subscribe("get_temp_time", self.get_temp_time)
+
+ EventMesh.subscribe("set_temp_state", self.set_temp_state)
+ EventMesh.subscribe("get_temp_state", self.get_temp_state)
+
+
+ def set_temp_time(self, event, msg):
+ self.set_time = msg
+ EventMesh.publish("set_storage_config",["set_temp_time",self.set_time])
+
+ def get_temp_time(self, event, msg):
+ return self.set_time
+
+ def set_temp_state(self, event, msg):
+ self.get_temp = msg
+
+ def get_temp_state(self, event, msg):
+ return self.get_temp
+
+class getBrightnessManager(Abstract):#获取亮度级别
+ def __init__(self):
+ self.level = 6#默认值6
+ # self.read_data = {}
+ self.time = 5
+ self.PWM_backlight = None
+
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("get_brightness_level", self.get_brightness_level)
+ EventMesh.subscribe("push_add_brightness_level", self.add)
+ EventMesh.subscribe("push_reduce_brightness_level", self.reduce)
+ EventMesh.subscribe("set_brightness_level", self.set_brightness_level)
+
+ EventMesh.subscribe("set_brightness_time", self.set_brightness_time)
+ EventMesh.subscribe("get_brightness_time", self.get_brightness_time)
+
+ def set_brightness_level(self, event, msg):
+ self.level = msg
+ EventMesh.publish("set_storage_config", ["brightness_level",self.level])
+
+ def get_brightness_level(self, event, msg):
+ tmp = EventMesh.publish("get_storage_config","brightness_level")
+ if tmp != None:
+ self.level = tmp
+ return self.level
+
+ def set_brightness_time(self, event, msg):
+ self.time = msg
+ EventMesh.publish("set_storage_config", ["brightness_time",self.time])
+
+ def get_brightness_time(self, event, msg):
+ tmp = EventMesh.publish("get_storage_config","brightness_time")
+ if tmp != None:
+ self.time = tmp
+ return self.time
+
+
+
+ def add(self, event, msg):
+ if self.level < 10:
+ self.level = self.level + 2
+ self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, self.level, 10)
+ self.PWM_backlight.open()
+ EventMesh.publish("set_storage_config", ["brightness_level",self.level])
+
+
+ def reduce(self, event, msg):
+ if self.level > 0:
+ self.level = self.level - 2
+ if self.level <= 0:
+ self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, 1, 10)
+ else:
+ self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS,self.level, 10)
+
+ self.PWM_backlight.open()
+ EventMesh.publish("set_storage_config", ["brightness_level",self.level])
+
+
+class getStorageDataManager(Abstract):#获取内存数据
+ def __init__(self):
+ self.config_data = {}
+ check = ql_fs.path_exists("/usr/static/storage_file/config.json")
+ if check == True:
+ with open("/usr/static/storage_file/config.json","r") as fd:
+ self.config_data = ujson.load(fd)
+ else :
+ self.config_data = {'old_time': 0, 'flip_sw': 0}
+ pass
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_storage_data", self.set_storage_data)
+ EventMesh.subscribe("set_storage_config", self.set_storage_config)
+ EventMesh.subscribe("get_storage_data", self.get_storage_data)
+ EventMesh.subscribe("get_storage_config", self.get_storage_config)
+
+ def set_storage_data(self, event, msg):
+ # print("set_storage_data:{}".format(msg))
+ if msg != None:
+ self.config_data = msg
+ with open("/usr/static/storage_file/config.json",'w+',encoding="utf-8") as fd:
+ ujson.dump(self.config_data,fd)
+
+
+ def set_storage_config(self,event,msg):
+ # print("set_storage_key_data1:{}".format(msg))
+ if len(msg) >= 2:
+ self.config_data[msg[0]]=msg[1]
+ # print("set_storage_key_data2:{}".format(self.config_data[msg[0]]))
+ EventMesh.publish("publish_message_event_ui",{"func":self.set_storage_save,"data":0})
+ def set_storage_save(self, data):
+ with open("/usr/static/storage_file/config.json",'w+',encoding="utf-8") as fd:
+ ujson.dump(self.config_data,fd)
+ def get_storage_data(self, event, msg):
+ # print("get_storage_data:{}".format(self.config_data))
+ return self.config_data
+ def get_storage_config(self,event,msg):
+ # print("get_storage_key_data1:{}".format(msg))
+ b = msg in self.config_data.keys()
+ if b == True:
+ # print("get_storage_key_data2:{}".format(self.config_data[msg]))
+ return self.config_data[msg]
+ else :
+ return None
+ # try:
+ # return self.config_data[msg]
+ # except:
+ # print("get_storage_key_data:none key:{}",msg)
+ # return None
+#定位频率
+class getUpLoadDataManager(Abstract):#
+ def __init__(self):
+ self.upload_time = 1800
+ read_data = EventMesh.publish("get_storage_config","upload_time")
+ if read_data != None:
+ self.upload_time = read_data
+
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_upload_data", self.set_upload_data)
+ EventMesh.subscribe("get_upload_data", self.get_upload_data)
+
+ def set_upload_data(self, event, msg):
+ self.upload_time = msg
+
+ def get_upload_data(self, event, msg):
+ return self.upload_time
+
+class getplayAudiodStateManager(Abstract):#获取设置播放音频状态
+ def __init__(self):
+ self.play = 0
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_audio_state", self.set_audio_state)
+ EventMesh.subscribe("get_audio_state", self.get_audio_state)
+
+ def set_audio_state(self, event, msg):
+ self.play = msg
+
+ def get_audio_state(self, event, msg):
+ return self.play
+
+class getVolumSizeManager(Abstract):#设置或获取音量大小数据
+ def __init__(self):
+ self.volume_size = 8
+ read_data = EventMesh.publish("get_storage_config","volum")
+ if read_data != None:
+ self.volume_size = read_data
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_volum_size", self.set_volum_size)
+ EventMesh.subscribe("get_volum_size", self.get_volum_size)
+
+ def set_volum_size(self, event, msg):
+ self.volume_size = msg
+ EventMesh.publish("set_storage_config", ["volum",self.volume_size])
+
+ def get_volum_size(self, event, msg):
+ return self.volume_size
+
+class getSosFlagManager(Abstract):#设置sos
+ def __init__(self):
+ self.aud = audio.Audio(0)
+ self.sos_flag = 0
+ self.sos_num = 0
+ self.hangup_mode = 0
+ self.call_timer = osTimer()
+ self.sos_numer1 = []
+ self.callnumer =""
+ SOS_NUMBER1 = EventMesh.publish("get_storage_config","SOS_NUMBER1")
+ if SOS_NUMBER1 != None:
+ self.sos_numer1 = SOS_NUMBER1
+ SOS_NUMBER2 = EventMesh.publish("get_storage_config","SOS_NUMBER2")
+ if SOS_NUMBER1 != None:
+ self.sos_numer1 = [SOS_NUMBER1, SOS_NUMBER2]
+
+ SOS_NUMBER3 = EventMesh.publish("get_storage_config","SOS_NUMBER3")
+ if SOS_NUMBER3 != None:
+ self.sos_numer1 = [SOS_NUMBER1, SOS_NUMBER2,SOS_NUMBER3]
+
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_sos_flag", self.set_sos_flag)#设置sos拨打标识
+ EventMesh.subscribe("get_sos_flag", self.get_sos_flag)
+
+ EventMesh.subscribe("set_sos_num", self.set_sos_num)#设置拨打循环次数
+ EventMesh.subscribe("get_sos_num", self.get_sos_num)
+
+ EventMesh.subscribe("set_dial_sos_number", self.set_dial_sos_number)
+ EventMesh.subscribe("get_dial_sos_number", self.get_dial_sos_number)#设置家庭号码三个
+
+ EventMesh.subscribe("set_callnumer_cb", self.set_callnumer_cb)#延时回调
+
+ EventMesh.subscribe("set_hangup_mode", self.set_hangup_mode)
+ EventMesh.subscribe("get_hangup_mode", self.get_hangup_mode)#获取挂断方式 是对方挂断 还是手表按键主动挂断
+
+ def get_hangup_mode(self, event, msg): # 1是设备端手表主动挂断 0是手机端
+ return self.hangup_mode
+
+ def set_hangup_mode(self, event, msg):
+ self.hangup_mode = msg
+
+ def set_sos_flag(self, event, msg):
+ self.sos_flag = msg
+
+ # if self.sos_flag == 1:
+ # number = EventMesh.publish("get_dial_sos_number")
+ # print("set_sos_flag")
+ # if number != None:
+ # if len(number) > 0:
+ # EventMesh.publish("save_phonename",number[0])
+ # EventMesh.publish("save_phonenum",number[0])
+ # EventMesh.publish("set_sos_num",0)
+ # phone_num = EventMesh.publish("get_phonenum")
+ # EventMesh.publish("dial_out_call_center_cb",phone_num)#电话拨出去
+ # else:
+ # EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去
+
+ def set_callnumer_cb(self, event, msg):
+ self.callnumer = msg
+ self.call_timer.start(10000, 0, self.call_timer_cb)#延迟10S 继续拨打
+
+ def call_timer_cb(self, *args, **kwargs):
+ # print("call_timer_cb:{}".format(self.callnumer))
+ EventMesh.publish("save_phonename",str(self.callnumer))
+ EventMesh.publish("save_phonenum",str(self.callnumer))
+ phone_num = EventMesh.publish("get_phonenum")
+ EventMesh.publish("dial_out_call_center_cb",phone_num)#电话拨出去
+ # phone_num = EventMesh.publish("get_phonenum")
+ # voiceCall.callStart(phone_num)
+ # self.aud.play(1, 1, 'U:/static/R_SOS_ALERT.mp3') #电话呼叫启动中
+
+ def get_sos_flag(self, event, msg):
+ return self.sos_flag
+
+ def set_sos_num(self, event, msg):
+ self.sos_num = msg
+
+ def get_sos_num(self, event, msg):
+ return self.sos_num
+
+ def set_dial_sos_number(self, event, msg):
+ self.sos_numer1 = msg
+
+
+ def get_dial_sos_number(self, event, msg):
+ return self.sos_numer1
+class getLowBatManager(Abstract):#低电提醒
+ def __init__(self):
+
+ self.low_btn = 0
+ read_data = EventMesh.publish("get_storage_config","low_on")
+ if read_data != None:
+ self.low_btn = read_data
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_low_bat_btn", self.set_low_bat_btn)#
+ EventMesh.subscribe("get_low_bat_btn", self.get_low_bat_btn)
+
+ def set_low_bat_btn(self, event, msg):
+ self.low_btn = msg
+ EventMesh.publish("set_storage_config",["low_on",self.low_btn])
+
+ def get_low_bat_btn(self, event, msg):
+ return self.low_btn
+
+
+
+class playPowerAudioManager(Abstract):#播放开关机音频文件
+ def __init__(self):
+ self.aud = audio.Audio(0)
+
+ def post_processor_after_instantiation(self):
+
+ EventMesh.subscribe("play_poewr_on_event", self.play_poewr_on_event)#
+ EventMesh.subscribe("play_poewr_off_event", self.play_poewr_off_event)
+
+ def play_poewr_on_event(self, event, msg):
+ self.aud.play(1, 1, 'U:/static/R_POWER_1.mp3') #播放播放开机铃声
+
+ def play_poewr_off_event(self, event, msg):
+ self.aud.setVolume(11)
+ self.aud.play(1, 1, 'U:/static/R_POWER_OFF_1.mp3') #播放关机铃声
+
+class getBootOffManager(Abstract):#开关机时间
+ def __init__(self):
+ self.off_msg = {}
+ self.off_flag = 0
+ self.rtc = RTC()
+
+ read_data = EventMesh.publish("get_storage_config","off_on")
+ if read_data != None:
+ self.off_on = read_data
+ read_data = EventMesh.publish("get_storage_config","off_start")
+ if read_data != None:
+ self.off_start= read_data
+ read_data = EventMesh.publish("get_storage_config","off_end")
+ if read_data != None:
+ self.off_end = read_data
+
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_boot_off_time", self.set_boot_off_time)#设置关机时间
+ EventMesh.subscribe("get_boot_off_time", self.get_boot_off_time)
+
+ def set_boot_off_time(self, event, msg):
+ EventMesh.publish("get_storage_config",["off_on",msg[0]])
+ EventMesh.publish("get_storage_config",["off_start",msg[1]])
+ EventMesh.publish("get_storage_config",["off_end",msg[2]])
+ self.off_msg = msg
+
+
+ def get_boot_off_time(self, event, msg):
+ flag = 0
+ msg_tmp = EventMesh.publish("get_check_alarm_list")
+ # print("len(msg_tmp):{} len(self.off_msg):{}".format(msg_tmp,len(self.off_msg)))
+ if len(self.off_msg) > 0:
+ if msg_tmp > len(self.off_msg)-1:#判断闹钟是否有数据 总的数据大于开关机的时间 说明有闹钟列表
+ flag = 1
+ else:
+ flag = 0
+ else:
+ if msg_tmp > 0:
+ flag = 1
+
+ return [self.off_msg,flag]
+class setSmsIndexManager(Abstract):#
+ def __init__(self):
+ self.index = -1
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_sms_index", self.set_sms_index)#设置关机时间
+ EventMesh.subscribe("get_sms_index", self.get_sms_index)
+
+ def set_sms_index(self, event, msg):
+ self.index = msg
+
+
+ def get_sms_index(self, event, msg):
+
+ return self.index
+
+class testSmsSetIPManager(Abstract):#
+ def __init__(self):
+ self.timer = osTimer()
+ self.newip = "api.xcloudtech.com"#默认防走丢协议
+ self.newcom = 9000
+ self.newmd5 = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
+ tmp_data = EventMesh.publish("get_storage_config","set_new_ip_addr")
+ if tmp_data != None:
+ self.newip = tmp_data
+ tmp_data = EventMesh.publish("get_storage_config","set_new_com")
+ if tmp_data != None:
+ self.newcom = tmp_data
+ tmp_data = EventMesh.publish("get_storage_config","set_new_md5")
+ if tmp_data != None:
+ self.newmd5 = tmp_data
+
+
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_new_ip", self.set_new_ip)#设置关机时间
+ EventMesh.subscribe("get_new_ip", self.get_new_ip)
+
+ def set_new_ip(self, event, msg):
+ self.newip = str(msg[0])
+ self.newcom = int(msg[1])
+ # self.newmd5 = str(msg[2])
+ #短信格式: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])
+
+ number = str(msg[2])
+ sms.sendPduMsg(number, 'set ok', 'UCS2')
+ self.timer.start(10*1000,0,self.fun)
+
+ def fun(self,*argc):
+ 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]
+ if(tmp_data != None):
+ return [self.newip,self.newcom]
+
+
+
\ No newline at end of file
--- /dev/null
+import ujson
+import utime
+import EventMesh
+import constants
+from common import Abstract
+import uhashlib
+import ubinascii
+from misc import Power
+import audio
+from machine import Pin
+import ujson
+import ql_fs
+import dataCall
+import checkNet
+import net
+import usocket
+import osTimer
+
+import machine
+
+import _thread
+import usys
+
+
+def server_init(server_type = None):
+ #服务器选择1,防走丢,2大锤,3三基同创,4童信
+ 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"
+ elif server_type == 4:
+ d_server_addr = "tcp.tx.kidxin.com"
+ d_server_port = 20500
+ elif server_type == 5:
+ d_server_addr = "device.miwitracker.com"
+ d_server_port = 8505
+ 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
+ result = ref
+
+ #取最后六位
+ a = src & 0x3f
+
+ #将最后六位放在ref最后六位的空位置
+ result = result | a
+ src = src >> 6
+
+ #取接下来的六位
+ a = src & 0x3f
+
+ #放在ref对应的六个位置
+ result = result | (a << 8)
+
+ #保留最后四位
+ src = src >> 6
+
+ #放在ref对应的四个位置
+ result = result | (src << 16)
+ return result
+
+def UnicodeHexStr_To_Utf8Str(str):
+ odata = 0
+
+ result = bytes()
+ su =str.upper()
+
+ i = 0
+ for c in su:
+ tmp=ord(c)
+ if tmp <= ord('9') :
+ odata = odata << 4
+ odata += tmp - ord('0')
+
+ elif ord('A') <= tmp <= ord('F'):
+ odata = odata << 4
+ odata += tmp - ord('A') + 10
+ if(i%4==3): #每2字节获取一个int,拿到转换后的unicode int
+ #print(odata.to_bytes(2, 'big'))
+ #result.append(odata)
+ if odata > 255:
+ tmp = unicode_to_utf8(odata)#拿到转换后的utf8 int
+ tmp2 = tmp.to_bytes(3, 'big') #转bytes
+ else :
+ tmp2 = odata.to_bytes(1, 'big')
+ #print("tmp2:{}".format(tmp2))
+ result = result + tmp2
+ odata = 0
+ i+=1
+ return result.decode('utf-8') #返回utf8的str
+class SockManager(Abstract):
+ def __init__(self):
+ self.sock = None
+ self.resolver = None
+ self.run_flag = False
+ self.lost_conn_check_time = 5 * 60 * 30
+ self.monitor_timer = osTimer()
+ self.publish_timer = osTimer()
+ self.reconnect_timer = osTimer()
+ self.reconnect_time = 1000
+ self.reconnect_flag = 0
+ self.connect_tmp = 0
+ 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))
+
+ 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.socket_send_queue = Queue()
+ _thread.start_new_thread(self.socket_send_queue_thread, ())
+
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe(constants.EVENT.CHANNEL_SOCKET_SEND, self.send)
+ self.monitor_timer.start(7 * 60 * 1000, 1, self.check)
+
+ def add_support_resolver(self, resolver):
+ self.resolver = resolver
+
+ def initialization(self, *args, **kwargs):
+ _thread.stack_size(16*1024)
+ _thread.start_new_thread(self.recv, ())
+ _thread.stack_size(8*1024)
+
+
+ def connect(self):
+ print("connect1{}:{}".format(self.server_addr, self.server_port))
+ if EventMesh.publish("network_state") == 0: #没注网
+ return
+ try:
+ if(self.sock != None) :
+ self.sock.close()
+ self.sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
+ #self.sock.setblocking(False) &self.sock.settimeout(0)不阻塞
+ self.sock.connect((self.server_addr, self.server_port))
+
+ #utime.sleep_ms(500)
+ # 发送数据
+ self.publish_timer.start(1000, 0, self.publish_timer_cb)
+
+ except Exception as e:
+ usys.print_exception(e)
+ self.run_flag = False
+ else:
+ self.run_flag = True
+ print("connect2{}:{}".format(self.server_addr, self.server_port))
+ self.reconnect_flag = 0
+ def publish_timer_cb(self, *args):
+ EventMesh.publish(constants.PROTOCOL.LK_SEND)
+
+ def check(self, *args):
+ if (not self.run_flag) or (self.connect_tmp == 0) : #7分钟无数据读取,则认为是掉线了
+ print("tcp reconnect!!!!!!!!!!!!!!!!!!")
+ EventMesh.publish(constants.EVENT.SET_CONNECT,0) #标记断网
+ self.reconnect()
+ self.connect_tmp = 0
+
+ def reconnect(self):
+ if(self.reconnect_flag == 1):
+ return
+ self.reconnect_flag = 1
+ self.reconnect_timer.start(self.reconnect_time, 0, self.reconnect_timer_cb)
+ if self.reconnect_time < 60*1000:
+ self.reconnect_time += 30*1000
+
+ def reconnect_timer_cb(self, *args):
+ _thread.start_new_thread(self.connect, ())
+
+ def socket_send_queue_thread(self):
+ while True:
+ data = self.socket_send_queue.get()
+ print("TCP:send data1 len:{}".format(len(data)))
+
+ # print("ui_queue_thread:data = {}".format(data))
+ socketsta = self.sock.getsocketsta()
+ if(socketsta == -1): #给释放了或者出错了
+ continue
+ if(socketsta == 4):#正常连击
+ if data != None:
+ try:
+ self.sock.send(data)
+ print("TCP:send data2 len:{}".format(len(data)))
+ except Exception as e:
+ self.reconnect()
+ self.socket_send_queue.put(data)#重新把数据加回队列
+ print("socket_send_queue_thread1:ERROR:")
+ usys.print_exception(e)
+ elif socketsta < 4:#正在连接,等待连接成功重新发送
+ count = 0
+ while True:
+ if count > 15 :
+ break
+ utime.sleep(1)
+ if(self.sock.getsocketsta() == 4):#
+ try:
+ self.sock.send(data)
+ print("TCP:send data3 len:{}".format(len(data)))
+ except Exception as e:
+ self.reconnect()
+ self.socket_send_queue.put(data)#重新把数据加回队列
+ print("socket_send_queue_thread2:ERROR:")
+ usys.print_exception(e)
+ break
+ else :#连接错误
+ print("socket_send_queue_thread:ERROR:reconnect")
+ self.reconnect()
+ utime.sleep(1)
+
+ def send(self, topic, msg):
+ # print("TCP:send data:{}".format(msg))
+ if EventMesh.publish("network_state") == 0: #没注网,则不发送
+ EventMesh.publish(constants.EVENT.SET_CONNECT, 0)#标记断网
+ print("dataCall not connect")
+ return
+ else :
+ try:
+ self.socket_send_queue.put(msg)
+ except Exception as e:
+ print("self.socket_send_queue.put:ERROR:")
+ usys.print_exception(e)
+ # self.run_flag = False
+
+ def recv(self):
+ data = b''
+ while True:
+ try:
+ r = b''
+ r = self.sock.recv(1024*5)
+
+ if not r:
+ self.run_flag = False
+ self.reconnect()
+
+ data = data + r
+ print("TCP recv: data:len:{}".format(len(data)))
+
+ # print("TCP recv: data:{}".format(data))
+ if data[-1] != 0x5d and len(data)<20*1024: #']':
+ continue
+ self.connect_tmp = 1 #有数据,就认为是连接状态
+ self.reconnect_time = 1000
+ EventMesh.publish(constants.EVENT.SET_CONNECT, 1)
+ data_str = data.decode('ascii')
+ data_str = data_str.split(']')
+ if len(data_str) < 3 :
+ self.resolver.handler(data)
+ else :
+ for i in range(len(data_str)-1):
+ self.resolver.handler(data_str[i])
+
+ data = b''
+ except Exception as e:
+ print("TCP:ERROR:recv:")
+ usys.print_exception(e)
+ self.run_flag = False
+ self.reconnect()
+
+ data = b''
+ utime.sleep(2)
+
+
+
+class NetManager(Abstract):
+ THRESHOLD = 10
+
+ def __init__(self):
+ self.__data_call = dataCall
+ self.__net = net
+ self.check_net = checkNet.CheckNetwork("QuecPython_Helios_Framework", "this latest version")
+ EventMesh.subscribe("get_network_state", self.get_network_state)
+ self.network_state = 0
+
+ def post_processor_after_instantiation(self, *args, **kwargs):
+ count = 0
+ while True:
+ count += 1
+ if count > 5 :
+ return
+ data = dataCall.getInfo(1, 0)
+ print("data call INFO {}".format(data))
+ if data[2][0]:
+ self.network_state = 1
+ break
+ utime.sleep(1)
+ self.__data_call.start(2, 0, "", "", "", 0)
+ self.__data_call.setCallback(self.__datacall_cb)
+
+ def __datacall_cb(self, args):
+ pdp = args[0]
+ nw_sta = args[1]
+ if nw_sta == 1:
+ self.network_state = 1
+ print("*** network %d connected! ***" % pdp)
+
+ else:
+ self.network_state = 0
+ print("*** network %d not connected! ***" % pdp)
+
+ def get_network_state(self, topic, msg):
+ return self.network_state
+
+
+class ProtoCol(Abstract):
+ TYPE = ""
+ HEADER = "#@{}@#;"
+ SEPARATOR = ";"
+ END = ";" + chr(0x01)
+ #PID = "SZKW"
+ #PID = "qAELPTKmFanR4RHe"
+
+ def __init__(self):
+ self.content = None
+ self.check_sum = None
+ self.password = EventMesh.publish(constants.EVENT.GET_PASSWORD)
+ self.imei = EventMesh.publish(constants.EVENT.GET_IMEI)
+ self.cid = EventMesh.publish(constants.EVENT.GET_CID)
+ self.imsi = EventMesh.publish(constants.EVENT.GET_IMSI)
+ self.key = EventMesh.publish(constants.EVENT.GET_KEY)
+ self.HEADER = self.HEADER.format(self.TYPE)
+ server_data = server_init()
+ self.md5_key = server_data[2]
+ self.PID = server_data[3]
+
+
+ # ip_infor = {}
+ # ip_infor = EventMesh.publish("get_new_ip")
+ # if ip_infor != None:
+ # self.md5_key = ip_infor[2]
+ # print("md5_key",self.md5_key)
+
+ def initialization(self, *args, **kwargs):
+ EventMesh.subscribe(self.TYPE + "_SEND", self.handler)
+ EventMesh.subscribe(self.TYPE + "_RECV", self.handler)
+
+ def handler(self, event, msg):
+ self.password = EventMesh.publish(constants.EVENT.GET_PASSWORD)
+ self.imei = EventMesh.publish(constants.EVENT.GET_IMEI)#"867387060319166"#EventMesh.publish(constants.EVENT.GET_IMEI)#"867387060319166" #EventMesh.publish(constants.EVENT.GET_IMEI)#"867387060319166"#EventMesh.publish(constants.EVENT.GET_IMEI) #"867387060319166"#EventMesh.publish(constants.EVENT.GET_IMEI) #"867387060319166"#"867387060319188"#"867387060319177"#"867387060319166"#"860132060004322"#"867387060319166"#"860132060004322"#EventMesh.publish(constants.EVENT.GET_IMEI)
+ self.cid = EventMesh.publish(constants.EVENT.GET_CID)
+ self.imsi = EventMesh.publish(constants.EVENT.GET_IMSI)
+ self.key = EventMesh.publish(constants.EVENT.GET_KEY)
+ if event.endswith("_SEND"):
+ self.send(event, msg)
+ else:
+ self.recv(event, msg)
+
+ def send(self, event, msg):
+ pass
+
+ def recv(self, event, msg):
+ pass
+
+ @staticmethod
+ def get_date():
+ return "{:04d}-{:02d}-{:02d}".format(*utime.localtime()[0:3])
+
+ @staticmethod
+ def get_time():
+ return "{:02d}:{:02d}:{:02d}".format(*utime.localtime()[3:6])
+
+ def calc_crc(self):
+ data = self.content
+ if not isinstance(data, bytes):
+ data = data.encode()
+ count = 0
+ for x in data:
+ count += x
+ self.check_sum = 100 - count % 100
+
+ def pack(self):
+ self.calc_crc()
+ return self.HEADER.encode() + self.content.encode() + self.SEPARATOR.encode() + int(self.check_sum).to_bytes(1,'little') + self.END.encode()
+
+ 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()
+
+ # 转成十六进制表示
+ MD5_head = ubinascii.hexlify(res)
+ MD5_head = MD5_head.decode('ascii')
+ #print("data+self.md5_key:{}".format(data+self.md5_key))
+ #print(res)
+ #print(MD5_head)
+ return MD5_head
+
+class LK_ProtoCol(ProtoCol):
+ """链路保持"""
+ TYPE = "LK"
+
+ def send(self, event, msg):
+ #[SZKW*334588000000156*0002*LK]
+ #print('self.imei:%s'%(self.imei))
+ send_data = self.PID+"*%s*0002*LK"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ # print("LK_ProtoCol:send:%s"%(data))
+
+
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+ def recv(self, event, msg):
+ """
+
+ @param event: LK成功
+ @param msg: 接收到的下行数据
+ """
+ print("LK_ProtoCol:recv:%s"%(msg))
+ EventMesh.publish(constants.PROTOCOL.PING_SEND)
+ EventMesh.publish(constants.PROTOCOL.KA_SEND)
+ EventMesh.publish(constants.PROTOCOL.TIME_SEND)
+ EventMesh.publish(constants.EVENT.START_LOCATION,constants.PROTOCOL.UD_SEND) #开始UD定位
+ EventMesh.publish(constants.EVENT.START_LOCATION,constants.PROTOCOL.WT_SEND) #开始WT定位
+
+class PING_ProtoCol(ProtoCol):
+ """获取绑定状态"""
+ TYPE = "PING"
+
+ def send(self, event, msg):
+ #[SZKWT*YYYYYYYYYYYYYYY*LEN*PING]
+ send_data = self.PID+"*%s*0004*PING"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ #print("PING_ProtoCol:send:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+ def recv(self, event, msg):
+ """
+
+ @param event: PING
+ @param msg: 接收到的下行数据
+ """
+ #print("PING_ProtoCol:recv:%s"%(msg))
+ data_tmp = msg.decode('ascii')
+ data_tmp = data_tmp.split(']')[0] #去掉]
+ EventMesh.publish(constants.EVENT.SET_PING, data_tmp.split(',')[1])
+
+class KA_ProtoCol(ProtoCol):
+ """心跳"""
+ TYPE = "KA"
+
+ def send(self, event, msg):
+ #"{:04d}-{:02d}-{:02d}".format(*utime.localtime()[0:3])
+ #[XT*YYYYYYYYYYYYYYY*LEN*KA,日期,步数,翻滚次数,电量百分数,车载里程数(km)] 实例:[XT*334588000000156*0014*KA,120414,50,100,100,100.12]
+ date = "{:04d}{:02d}{:02d}".format(*utime.localtime()[0:3])
+ date = date[2:]
+ #print("date:",date)
+ #步数
+ old_step = 0
+ step = 0
+ step = EventMesh.publish("get_old_step_value")
+ 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]
+ # 电池电量百分比
+ bat_tmp = EventMesh.publish("screen_get_battery")
+ battery_caption = bat_tmp[1]
+ send_data = "KA,%s,%d,%d,%d"%(date,step,0,battery_caption)
+ send_len = len(send_data)
+
+ send_data = self.PID+"*%s*%04X*%s"%(self.imei,send_len,send_data)
+ MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,send_len,"KA")
+
+ MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ #print("KA_ProtoCol:send:%s"%(data))
+
+
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+ def recv(self, event, msg):
+ """
+
+ @param event: PING
+ @param msg: 接收到的下行数据
+ """
+ #print("KA_ProtoCol:recv:%s"%(msg))
+
+class UD_ProtoCol(ProtoCol):
+ """位置信息"""
+ TYPE = "UD"
+ UD_count = 0#每6次定位获取一次天气数据
+ def send(self, event, msg):
+ #"{:04d}-{:02d}-{:02d}".format(*utime.localtime()[0:3])
+ #[6f62cfc40fc50173f9a7b21e87be3424IS*861217001020120*00f6*UD,220726,211210,A,22.649529,N,114.119165,E,0.28,137.4,100.0,8,24,63,119,0,00000000,2,1,460,11,30472,125667122,24,30472,218944048,19,4,
+ # wifi0,34:93:44:01:28:b9,-74,wifi1,34:20:03:96:35:ad,-78,wifi2,ea:b5:7b:e8:56:54,-80,wifi3,c4:49:bb:d4:d9:78,-88]
+
+
+ self.UD_count+=1
+ #每6次定位获取一次天气数据
+ if self.UD_count>=6:
+ self.UD_count = 0
+ EventMesh.publish(constants.PROTOCOL.WT_SEND,msg)
+
+ send_data ="UD,"+msg
+ send_len = len(send_data)
+ #wt_data = "%s"%(send_data)
+ send_data = self.PID+"*%s*%04X*%s"%(self.imei,send_len,send_data)
+ MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,send_len,"UD")
+
+ MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ print("UD:data:{}".format(data))
+ # wt_data = EventMesh.publish("get_weather_data")
+ # # #如果没有天气数据,则获取天气数据
+ # if wt_data != None or wt_data[0] == None :
+ #
+
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+ def recv(self, event, msg):
+ pass
+ # print("UD_ProtoCol:recv:%s"%(msg))
+
+class CR_ProtoCol(ProtoCol):
+ """立即定位"""
+ TYPE = "CR"
+
+ def send(self, event, msg):
+ #[SZKWT*YYYYYYYYYYYYYYY*LEN*PING]
+ send_data = self.PID+"*%s*0002*CR"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ #print("CR_ProtoCol:send:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+ def recv(self, event, msg):
+ """
+
+ @param event: PING
+ @param msg: 接收到的下行数据
+ """
+ EventMesh.publish(constants.PROTOCOL.CR_SEND)
+ EventMesh.publish(constants.EVENT.START_LOCATION,constants.PROTOCOL.UD_SEND) #开始ud定位
+ #print("CR_ProtoCol:recv:%s"%(msg))
+
+class FIND_ProtoCol(ProtoCol):
+ """查找设备"""
+ TYPE = "FIND"
+
+ def send(self, event, msg):
+ #[SZKWT*YYYYYYYYYYYYYYY*LEN*PING]
+ send_data = self.PID+"*%s*0004*FIND"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ #print("FIND_ProtoCol:send:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+ def recv(self, event, msg):
+ """
+
+ @param event: FIND,播放铃声
+ @param msg: 接收到的下行数据
+ """
+ EventMesh.publish(constants.PROTOCOL.FIND_SEND)
+ # a = audio.Audio(0)
+ # a.set_pa(Pin.GPIO29)
+ # a.setVolume(10)
+ # a.play(1, 1, 'E:/audio_audio_haixiu.mp3') #文件名前面要加上路径
+
+ # EventMesh.publish("load_screen", {"screen": "FIND"})
+ EventMesh.publish("OPEN_FIND_WATCH")#
+ #print("FIND_ProtoCol:recv:%s"%(msg))
+
+class POWEROFF_ProtoCol(ProtoCol):
+ """关机"""
+ TYPE = "POWEROFF"
+
+ def send(self, event, msg):
+ # [SZKW*867387060319491*0008*POWEROFF]
+ send_data = self.PID+"*%s*0008*POWEROFF"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ #print("POWEROFF_ProtoCol:send:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+ def recv(self, event, msg):
+ """
+
+ @param event: POWEROFF关机
+ @param msg: 接收到的下行数据
+ """
+ EventMesh.publish(constants.PROTOCOL.POWEROFF_SEND)
+ #print("POWEROFF_ProtoCol:recv:%s"%(msg))
+ EventMesh.publish("load_screen", {"screen": "poweroff_comfirm"})
+
+class PHL_ProtoCol(ProtoCol):
+ """电话本同步"""
+ TYPE = "PHL"
+
+
+ def send(self, event, msg):
+ # [SZKW*867387060319491*0008*PHL]
+ send_data = self.PID+"*%s*0003*PHL"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ #print("POWEROFF_ProtoCol:send:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+ def recv(self, event, msg):
+ """
+
+ @param event: 电话本同步
+ @param msg: 接收到的下行数据
+ """
+ msg = msg[1:-1]
+ # print("phonebook:msg:%s\r\n"%msg)
+ msg_tmp = msg.decode('ascii')
+ msg_tmp = msg_tmp.split(',')
+ # print("phonebook:len:{}\r\n data:{}".format(len(msg_tmp),msg_tmp))
+
+ phonebook = {}
+ msg_tmp = msg_tmp[1:]
+
+ j = 0
+ i = 0
+ phonebook_oldtmp = {}
+ # 0 1 2 3
+ for phonebook_tmp in msg_tmp:
+ j+=1
+ # print("phonebook_tmp:{} len:{}".format(phonebook_tmp,len(phonebook_tmp)))
+
+ if (j%2) == 0:
+ i+=1
+ if len(phonebook_tmp) != 0:
+ phonebook_name = UnicodeHexStr_To_Utf8Str(phonebook_tmp)
+ phonebook_name = "{}:{}".format("%03d"%i,phonebook_name)
+ phonebook[phonebook_name] = phonebook_oldtmp
+
+ phonebook_oldtmp = phonebook_tmp
+ # print("phonebook_oldtmp!!!:{}".format(str(phonebook_oldtmp)))
+ # print("phonebook!!!:{}".format(str(phonebook)))
+ with open("/usr/static/storage_file/phonebook.json","w",encoding="utf-8") as fd:
+ ujson.dump(phonebook,fd)
+ print("创建电话簿")
+
+ EventMesh.publish(constants.PROTOCOL.PHL_SEND)
+ EventMesh.publish("set_phonebook_list",[1,phonebook])
+ EventMesh.publish("contact_updata_list_show")
+
+
+class WT_ProtoCol(ProtoCol):
+ """天气数据"""
+ TYPE = "WT"
+ WT_T = 0
+
+ def send(self, event, msg):
+ # [SZKW*867387060319491*0008*WT]
+ # if self.WT_T != 0:
+ # tmp_WT =
+ if(msg != ""):
+ msg_tmp = "WT," + msg
+ data_len = len(msg_tmp)
+ MD5_head_data = self.PID+"*%s*%04X*WT"%(self.imei,data_len)
+ MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+ send_data = self.PID+"*%s*%04X*%s"%(self.imei,data_len,msg_tmp)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ print("WT_ProtoCol:send:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+
+ def recv(self, event, msg):
+ """
+
+ @param event: T天气温度数据下发
+ @param msg: 接收到的下行数据
+ """
+ # b'SZKW*860132060004322*0035*WT,23-04-06,14:41:06,b6e0d4c6,1,27,-1,40,6DF157335E02'
+ msg = msg[1:-1]
+ msg_tmp = msg.decode('ascii')
+ msg_tmp = msg_tmp.split('WT,')
+ # print("phonebook:len:{}\r\n data:{}".format(len(msg_tmp),msg_tmp))
+ msg_tmp = msg_tmp[1]
+
+ # print("msg_tmp :%s"%(msg_tmp))
+
+ msg_date = msg_tmp.split(',')[0]
+
+ msg_time = msg_tmp.split(',')[1]
+ msg_weather_content = msg_tmp.split(',')[2]
+ msg_type = msg_tmp.split(',')[3]
+ msg_temp = msg_tmp.split(',')[4]
+ msg_min_temp = msg_tmp.split(',')[5]
+ msg_max_temp = msg_tmp.split(',')[6]
+ msg_city = msg_tmp.split(',')[7]
+
+ msg_city = UnicodeHexStr_To_Utf8Str(msg_city)
+ msg_weather_content = UnicodeHexStr_To_Utf8Str(msg_weather_content)
+ # print("msg_date:{} msg_time:{} msg_weather_content:{} msg_type:{} msg_temp:{} msg_min_temp:{} msg_max_temp:{} msg_city:{}".format(msg_date,msg_time,\
+ # msg_weather_content,msg_type,msg_temp,msg_min_temp,msg_max_temp,msg_city))
+ print("WT_ProtoCol RECV msg:%s"%(msg))
+
+ EventMesh.publish("set_weather_data",[msg_date,msg_time,msg_weather_content,msg_type,msg_temp,msg_min_temp,msg_max_temp,msg_city,1])
+ EventMesh.publish("updata_weather_show")
+
+
+class REMIND_ProtoCol(ProtoCol):
+ """闹钟数据"""
+ TYPE = "REMIND"
+
+
+ def send(self, event, msg):
+ # [SZKW*867387060319491*0008*REMIND]
+ send_data = self.PID+"*%s*0006*REMIND"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ # print("REMIND_ProtoCol:send:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+ def recv(self, event, msg):
+ """
+ @param event: 闹钟数据下发
+ @param msg: 接收到的下行数据
+ """
+ # b'SZKW*860132060004322*0035*REMIND,23-04-06,14:41:06,b6e0d4c6,1,27,-1,40,6DF157335E02'
+ # print("REMIND_ProtoCol RECV msg:%s"%(msg))
+ alarm_new = []
+
+ msg = msg[1:-1]
+ msg_tmp = msg.decode('ascii')
+ msg_tmp = msg_tmp.split('REMIND,')
+ msg_tmp = msg_tmp[1]
+
+ alarm_new = EventMesh.publish("read_alarminjson")
+ # print("alarm_list:{} msg_tmp:{}",alarm_new,msg_tmp)
+
+ k=0
+ if len(alarm_new) < 5 :
+ alarm_new = []
+ for i in range(5):
+ alarm_new.append({'hour': 16, 'repeart': 1, 'idx': i, 'enabled': 0, 'days': [], 'minute': 39})
+ for j in range(2,5):#0 1是开关机,234是闹钟
+ alarm_day = []
+ alarm_week = []
+ alarm_total_data = []
+ alarm_total_data = msg_tmp.split(',')[k]
+ k+=1
+ b = alarm_total_data.find('-')
+ if b != -1:
+ alarm_data = alarm_total_data.split('-')#-作为分隔符
+ alarm_switch = int(alarm_data[1])#开关
+ alarm_day_num = int(alarm_data[2])#天
+ alarm_time = alarm_data[0]#时间
+ alarm_time_tmp = alarm_time.split(':')#冒号分隔时间 时 分
+ alarm_time_hour = int(alarm_time_tmp[0])
+ alarm_time_min = int(alarm_time_tmp[1])
+ if alarm_day_num == 3:
+ alarm_week = alarm_data[3]#星期
+
+ if alarm_day_num == 2:#每一天
+ alarm_day = [1,2,3,4,5,6,0]
+ elif alarm_day_num == 3:#自定义
+ for i in range(0,7):
+ if alarm_week[i] != '0':
+ alarm_day.append(i)
+ alarm_new[j] = {"idx": j, "hour": alarm_time_hour, "minute": alarm_time_min, "days":alarm_day, "enabled": alarm_switch,"repeart":alarm_day_num}
+
+ # print("self.alarm_list: {}".format(alarm_new))
+ with open("/usr/static/storage_file/alarm_msg.json", 'w',encoding='utf-8') as fd:
+ ujson.dump(alarm_new,fd)
+ EventMesh.publish("push_update_alarm_show")
+
+ # EventMesh.publish("add_alarm",[0,msg_tmp])
+ EventMesh.publish(constants.PROTOCOL.REMIND_SEND)
+
+class HRSTART_ProtoCol(ProtoCol):
+ """心率频率数据"""
+ TYPE = "hrtstart"
+
+
+ def send(self, event, msg):
+ # [SZKW*867387060319491*0008*hrtstart]
+ send_data = self.PID+"*%s*0008*hrtstart"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ # print("HRSTART_ProtoCol:send:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event: 心率数据下发
+ @param msg: 接收到的下行数据
+ """
+ # b'SZKW*860132060004322*0035*REMIND,23-04-06,14:41:06,b6e0d4c6,1,27,-1,40,6DF157335E02'
+ # print("REMIND_ProtoCol RECV msg:%s"%(msg))
+ # HRSTART_ProtoCol RECV msg:b'SZKW*860132060004322*000D*hrtstart,7200' msg_:7200
+ msg = msg[1:-1]
+ msg_tmp = msg.decode('ascii')
+ msg_tmp = msg_tmp.split(',')
+ msg_tmp = msg_tmp[1]
+ print("HRSTART_ProtoCol RECV msg:{} msg_:{}".format(msg,msg_tmp))
+ hrTotal = int(msg_tmp)
+ if hrTotal == 0:#关闭自动测量
+ print("HRSTART_ 1")
+ EventMesh.publish("set_time_hr_spo2",[0,0])
+ else:
+ if hrTotal == 1:#单次测量
+ print("HRSTART_ 2".format(hrTotal))
+ get_hr_state = EventMesh.publish("get_hr_state")
+ get_spo2_state = EventMesh.publish("get_spo2_state")
+ # if (get_hr_state == 3 ) or (get_spo2_state == 0 and get_hr_state == 0):#只要两个不在测量 单次优先级最低
+ if (get_spo2_state == 0 and get_hr_state == 0):
+ EventMesh.publish("set_hr_state",3)#3代表单次测量
+ pass
+ else:
+ if hrTotal > 0 and hrTotal <= 300:
+ hrTotal = 300
+ elif hrTotal >= 65536:
+ hrTotal = 65536
+ print("HRSTART_ 3".format(hrTotal))
+ EventMesh.publish("set_time_hr_spo2",[1,hrTotal])
+
+
+ EventMesh.publish(constants.PROTOCOL.HRTSTART_SEND)
+
+class HEART_ProtoCol(ProtoCol):
+ """心率数据"""
+ TYPE = "heart"
+
+
+ def send(self, event, msg):
+ # [SZKW*334588000000156*len*heart,x]
+ # print("HEART:send:{}".format(msg))
+ len_size = len(str(msg))+len("heart,")
+ send_data = self.PID+"*%s*%04X*heart"%(self.imei,len_size)
+ MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,len_size,"heart")
+ MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+ data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
+ # print("HEART_ProtoCol:data:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event: 心率数据下发
+ @param msg: 接收到的下行数据
+ """
+ # print("HRSTART_ProtoCol RECV msg:")
+ #EventMesh.publish(constants.PROTOCOL.HEART_SEND)
+class OXYGEN_ProtoCol(ProtoCol):
+ """上传血氧测试数据"""
+ TYPE = "oxygen"
+ def send(self, event, msg):
+ # [SZKW*334588000000156*len*heart,x]
+ # print("oxstart:send:{}".format(msg))
+ len_size = len(str(msg))+len("oxygen,")
+ send_data = self.PID+"*%s*%04X*oxygen"%(self.imei,len_size)
+ MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,len_size,"oxygen")
+ MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+ data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
+ # print("HEART_ProtoCol:data:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event: 心率数据下发
+ @param msg: 接收到的下行数据
+ """
+ # print("HRSTART_ProtoCol RECV msg:")
+ #EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND)
+
+class OXYGEN_One_ProtoCol(ProtoCol):#单次测量
+ """上传单次测量测试数据"""
+ TYPE = "oxstart"
+
+# 终端发送[XT*YYYYYYYYYYYYYYY*LEN*oxygen,x]
+# x 表示血氧饱和度
+# 示例[XT*334588000000156*0009*oxygen,15]
+# 平台回复:handler -> b'[SZKW*860132060004322*0009*oxstart,1]'
+# [XT*334588000000156*0006*oxygen]
+ def send(self, event, msg):
+ # [SZKW*334588000000156*len*heart,x]
+ print("oxstart:")
+ send_data = self.PID+"*%s*0007*oxstart"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ # print("HEART_ProtoCol:data:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event: 血氧单次测量下发
+ @param msg: 接收到的下行数据
+ """
+ print("oxstart:{}".format(msg))
+ msg = msg[1:-1]
+ msg_tmp = msg.decode('ascii')
+ msg_tmp = msg_tmp.split(',')
+ msg_tmp = msg_tmp[1]
+ state = int(msg_tmp)
+ get_hr_state = EventMesh.publish("get_hr_state")
+ get_spo2_state = EventMesh.publish("get_spo2_state")
+ if state == 1:
+ # if (get_hr_state == 3 ) or (get_spo2_state == 0 and get_hr_state == 0):#只要两个不在测量 单次优先级最低
+ if (get_spo2_state == 0 and get_hr_state == 0):
+ EventMesh.publish("set_spo2_state",3)#3代表单次测量
+ EventMesh.publish(constants.PROTOCOL.OXSTART_SEND)
+
+class TEMP_ProtoCol(ProtoCol):
+ """上传体温测试数据"""
+ TYPE = "temp"
+ def send(self, event, msg):
+ # [SZKW*334588000000156*len*heart,x]
+ # print("temp:send:{}".format(msg))
+ len_size = len(str(msg[0]))+len("temp,")+1+len(str(msg[1]))
+ print("temp:send:{} len:{}".format(msg,len_size))
+ # 实例:[XT*334588000000156*0009*temp,36.2]
+ # 代表终端的温度为:36.2
+ # 平台回复:
+ # [XT*334588000000156*0004*temp]
+ send_data = self.PID+"*%s*%04X*temp"%(self.imei,len_size)
+ MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,len_size,"temp")
+ MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+ data = "[%s%s,%d.%d]"%(str(MD5_SIGN),send_data,msg[0],msg[1])
+ # print("temp:data:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event:
+ @param msg: 接收到的下行数据
+ """
+ # print("HRSTART_ProtoCol RECV msg:")
+ #EventMesh.publish(constants.PROTOCOL.TEMP_SEND)
+
+class WDSTART_ProtoCol(ProtoCol):
+ """上传体温频率"""
+ TYPE = "wdstart"
+ def send(self, event, msg):
+ #[XT*334588000000156*len*wdstart,300]
+ send_data = self.PID+"*%s*0007*wdstart"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ # print("temp:data:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event: 体温下发频率数据
+ @param msg: 接收到的下行数据
+ """
+ # print("WDSTART_ProtoCol RECV msg:")
+ print("wdstart:{}".format(msg))
+ msg = msg[1:-1]
+ msg_tmp = msg.decode('ascii')
+ msg_tmp = msg_tmp.split(',')
+ msg_tmp = msg_tmp[1]
+
+ tempTotal = int(msg_tmp)
+ print("tempTotal:{}".format(tempTotal))
+ if tempTotal == 1:#单次测量
+ get_temp_state = EventMesh.publish("get_temp_state")
+ print("get_temp_state:{}".format(get_temp_state))
+ if get_temp_state == 0:#只要两个不在测量 单次优先级最低
+
+ EventMesh.publish("set_temp_state",3)#3代表单次测量
+ else:
+ if tempTotal > 0 and tempTotal <= 300:
+ tempTotal = 300
+ elif tempTotal >= 65536:
+ tempTotal = 65536
+
+ EventMesh.publish("set_temp_time",tempTotal)
+
+
+
+ EventMesh.publish(constants.PROTOCOL.WDSTART_SEND)
+#解绑
+# [XT*334588000000156*0003*DLT]
+def reset_factory(msg):
+ if msg == 1:
+ Power.powerRestart()
+class DLT_ProtoCol(ProtoCol):
+ """解绑数据"""
+ TYPE = "DLT"
+ def send(self, event, msg):
+ # [XT*334588000000156*0004*temp]
+ send_data = self.PID+"*%s*0003*DLT"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ print("temp:data:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event:
+ @param msg: 接收到的下行数据
+ """
+ # print("DLT_ProtoCol RECV msg:")
+
+
+#定位频率
+class UPLOAD_ProtoCol(ProtoCol):
+ """定位频率数据"""
+ TYPE = "UPLOAD"
+ def send(self, event, msg):
+ # [XT*334588000000156*0004*temp]
+ send_data = self.PID+"*%s*0006*UPLOAD"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event:
+ @param msg: 接收到的下行数据
+ """
+ # b'[SZKW*867387060319166*000A*UPLOAD,600]'
+ # print("DLT_ProtoCol RECV msg:".format(msg))
+ msg = msg[1:-1]
+ msg_tmp = msg.decode('ascii')
+ msg_tmp = msg_tmp.split(',')
+ msg_tmp = msg_tmp[1]
+ upload_time = int(msg_tmp)
+ EventMesh.publish("set_storage_config",["upload_time",upload_time])
+
+ EventMesh.publish("set_upload_data", upload_time)
+ EventMesh.publish(constants.PROTOCOL.UPLOAD_SEND)
+
+#设置快捷号码
+class CENTER_ProtoCol(ProtoCol):
+ """设置快捷号码"""
+ TYPE = "CENTER"
+ def send(self, event, msg):
+ # [XT*334588000000156*0004*temp]
+ send_data = self.PID+"*%s*0006*CENTER"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ print("UPLOAD:data:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event:
+ @param msg: 接收到的下行数据
+ """
+ # b'[SZKW*867387060319166*000A*UPLOAD,600]'
+ # print("DLT_ProtoCol RECV msg:".format(msg))
+ msg = msg[1:-1]
+ msg_tmp = msg.decode('ascii')
+ msg_tmp = msg_tmp.split(',')
+ msg_tmp = msg_tmp[1]
+ print("CENTER_ProtoCol RECV msg:{} msg_:{}".format(msg,msg_tmp))
+ center_dial = str(msg_tmp)
+ EventMesh.publish("set_storage_config",["center_dial",center_dial])
+ EventMesh.publish(constants.PROTOCOL.CENTER_SEND)
+
+#呼叫快捷电话号码
+import voiceCall
+class MONITOR_ProtoCol(ProtoCol):
+ """呼叫快捷号码"""
+ TYPE = "MONITOR"
+ def send(self, event, msg):
+ # [XT*334588000000156*0004*MONITOR]
+ send_data = self.PID+"*%s*0007*MONITOR"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ print("MONITOR:data:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event:
+ @param msg: 接收到的下行数据
+ """
+ # b'[SZKW*867387060319166*000A*MONITOR]'
+ read_data = EventMesh.publish("get_storage_config","center_dial")
+ print("MONITOR:data:%s"%(read_data))
+ 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)
+ EventMesh.publish("dial_out_call_center_cb",contact)#电话拨出去
+ EventMesh.publish(constants.PROTOCOL.MONITOR_SEND)
+
+#定时开关机
+class bootoff_ProtoCol(ProtoCol):
+ """定时开关机"""
+ TYPE = "BOOTOFF"
+ def send(self, event, msg):
+ # [XT*334588000000156*0004*MONITOR]
+ send_data = self.PID+"*%s*0007*BOOTOFF"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ print("BOOTOFF:data:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+ def recv(self, event, msg):
+ """
+ @param event:
+ @param msg: 接收到的下行数据
+ """
+ # b'[SZKW*867387060319166*000A*SOS_SEND]'
+ msg = msg[1:-1]
+ msg_tmp = msg.decode('ascii')
+ msg_tmp = msg_tmp.split(',')
+ on_bt = msg_tmp[1]
+ on_start = msg_tmp[2]
+ on_end = msg_tmp[3]
+ print("BOOTOFF:send data:{} {} {}".format(on_bt,on_start,on_end))
+ #b'[SZKW*860132060006970*0015*BOOTOFF,1,06:00,23:59]'
+ EventMesh.publish("add_alarm", [on_bt,on_start,on_end])
+ EventMesh.publish(constants.PROTOCOL.BOOTOFF_SEND)
+
+
+#sos家庭号码
+class sosHome_dial_ProtoCol(ProtoCol):
+ """sos家庭号码"""
+ TYPE = "SOS"
+ def send(self, event, msg):
+ # [XT*334588000000156*0004*MONITOR]
+ send_data = self.PID+"*%s*0003*SOS"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ print("sosHome_dial_ProtoCol:data:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event:
+ @param msg: 接收到的下行数据
+ """
+
+ # b'[SZKW*867387060319166*000A*SOS_SEND]'
+ msg = msg[1:-1]
+ msg_tmp = msg.decode('ascii')
+ msg_tmp = msg_tmp.split(',')
+
+ # print("sosHome_dial_ProtoCol:send data :{} {}".format(len(msg_tmp),msg_tmp))
+ #b'[SZKW*860132060006970*0015*sosHome_dial_ProtoCol,15521469561,10086,15521469561]'
+ i = 0
+ for i in range(len(msg_tmp)-1):
+ # print("sos:send data :{}".format(msg_tmp[i+1]))
+ if len(msg_tmp[i+1]) != 0:
+ EventMesh.publish("set_storage_config",["SOS_NUMBER{}".format(i+1),msg_tmp[i+1]])
+ # print("read_data:{} msg_tmp:{}".format(read_data,msg_tmp[i+1]))
+
+ if (len(msg_tmp)-1) == 3:
+ EventMesh.publish("set_dial_sos_number",[msg_tmp[1],msg_tmp[2],msg_tmp[3]])
+ elif (len(msg_tmp)-1) == 2:
+ EventMesh.publish("set_dial_sos_number",[msg_tmp[1],msg_tmp[2]])
+ elif (len(msg_tmp)-1) == 1:
+ EventMesh.publish("set_dial_sos_number",[msg_tmp[1]])
+
+ EventMesh.publish(constants.PROTOCOL.SOS_SEND)
+
+# 低电提醒
+#[XT*334588000000156*0008*LOWBAT,1]
+class LOWBAT_ProtoCol(ProtoCol):
+ """低电提醒"""
+ TYPE = "LOWBAT"
+ def send(self, event, msg):
+ # [XT*334588000000156*0006*LOWBAT]
+ send_data = self.PID+"*%s*0006*LOWBAT"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ print("LOWBAT:data:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event:
+ @param msg: 接收到的下行数据
+ """
+ # b'[SZKW*867387060319166*000A*LOWBAT]'
+
+ msg = msg[1:-1]
+ msg_tmp = msg.decode('ascii')
+ msg_tmp = msg_tmp.split(',')
+ on_bt = msg_tmp[1]
+ print("LOWBAT:send data:{}".format(on_bt))
+ #b'[SZKW*860132060006970*0015*LOWBAT,1,06:00,23:59]'
+ EventMesh.publish("set_low_bat_btn",on_bt)
+ EventMesh.publish(constants.PROTOCOL.LOWBAT_SEND)
+
+# 低电提醒
+#[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("WLKEY:data:%s"%(data))
+ # print("WLKEY!!!!!!!!!!!!!")
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event:
+ @param msg: 接收到的下行数据
+ """
+ # b'[SZKW*867387060319166*000A*KEYBRD]'
+ # print("WLKEY!!!!!!!!!!!!!",msg)
+ EventMesh.publish(constants.PROTOCOL.WLKEY_SEND)
+
+#免打扰
+class SILENCETIME2_ProtoCol(ProtoCol):
+ """免打扰"""
+ TYPE = "SILENCETIME2"
+ def send(self, event, msg):
+ # [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("SILENCETIME2!!!!!!!!!!!!!",msg)
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event:
+ @param msg: 接收到的下行数据
+ """
+ # b'[SZKW*867387060319166*000A*KEYBRD]'
+ # print("SILENCETIME2!!!!!!!!!!!!!",msg)
+ EventMesh.publish(constants.PROTOCOL.SILENCETIME2_SEND)
+
+#键盘开关
+class KEYBRD_ProtoCol(ProtoCol):
+ """免打扰"""
+ TYPE = "KEYBRD"
+ def send(self, event, msg):
+ # [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("KEYBRD:data:%s"%(data))
+ # print("KEYBRD!!!!!!!!!!!!!",msg)
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+ def recv(self, event, msg):
+ """
+ @param event:
+ @param msg: 接收到的下行数据
+ """
+ # b'[SZKW*867387060319166*000A*KEYBRD]'
+ # print("KEYBRD!!!!!!!!!!!!!",msg)
+ EventMesh.publish(constants.PROTOCOL.KEYBRD_SEND)
+class TK_ProtoCol(ProtoCol):
+ """微聊"""
+ TYPE = "TK"
+
+
+ def send(self, event, msg):
+ # print("TK send:{}".format(msg))
+ if len(str(msg)) == 1:
+
+ len_size = len(str(msg))+len("TKS,")
+ # 实例:[XT*334588000000156*0009*TK,1]
+ send_data = self.PID+"*%s*%04X*TKS"%(self.imei,len_size)
+ MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,len_size,"TKS")
+ MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+ data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
+ print("TK:data:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+ else:
+ # [SZKW*YYYYYYYYYYYYYYY*LEN*TK,AMR 格式音频数据]
+ #[XT*YYYYYYYYYYYYYYY*LEN*TKS,秒数(十进制),AMR 格式音频数据]
+ arm_data = msg[1]
+ arm_sec = msg[0]
+ # print("TK_ProtoCol:msgtype:{} arm_sec:{}".format(len(msg[1]),arm_sec))
+
+ arm = bytearray()
+ for i in range(len(arm_data)):
+ if arm_data[i] == 0x7d:
+ arm.extend(b'\x7d\x01')
+ elif arm_data[i] == 0x5b :
+ arm.extend(b'\x7d\x02')
+ elif arm_data[i] == 0x5d :
+ arm.extend(b'\x7d\x03')
+ elif arm_data[i] == 0x2c :
+ arm.extend(b'\x7d\x04')
+ elif arm_data[i] == 0x2a :
+ arm.extend(b'\x7d\x05')
+ else :
+ arm.append(arm_data[i])
+
+ datalen = len(arm) + 4+len(str(arm_sec))+1
+ #Wechat_log("len(str(arm_sec)):{}".format(len(str(arm_sec))+1))
+ send_data = bytearray("SZKW*%s*%04X*TKS,%d,"%(self.imei,datalen,arm_sec))
+ send_data.extend(arm)
+ MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,datalen,"TKS")
+ MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+ data = bytearray('[')
+ data.extend(MD5_SIGN)
+ data.extend(send_data)
+ data.extend(']')
+ # print("TK:send data:%s MD5_head_data:%s"%(data,MD5_head_data))
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+
+ def recv(self, event, msg):
+ """
+
+ ("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
+ @param event: 微聊
+ @param msg: 接收到的下行数据
+ [SZKW*860132060004322*20BD*TK,#!AMR...]
+ """
+ #Wechat_log("K_ProtoCol:recv:data:{}".format(msg))
+ # print("TK recv:{}".format(msg))
+ msg_tmp = msg.decode('ascii')
+ str = msg_tmp.split('TK,')
+ # Wechat_log("TK_ProtoCol:recv:len:{} {} {}".format(len(msg),len(str),msg_tmp.find("#!AMR")))
+ if msg_tmp.find("#!AMR") != -1: #是否是服务器下发音频数据
+ # Wechat_log("TK_ProtoCol:recv:datalen{}".format(len(msg)))
+ arm_data = bytearray(str[1])#获取amr输出
+ get_wechat_data = EventMesh.publish("get_wechat_data")
+ MXA_MSG = get_wechat_data[0]
+ wechat_recode_list = get_wechat_data[1]
+ wechat_num = wechat_recode_list["num"]
+ # Wechat_log("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
+
+ if wechat_num >= MXA_MSG:
+ wechat_num = 0
+ if wechat_num == 0:
+ wechat_num += 1
+ elif wechat_num > 0:
+ wechat_num += 1
+
+
+ print("num_total:datalen:{} {}".format(MXA_MSG,wechat_recode_list))
+ wechat_recode_list["%02d"%(wechat_num)] = "read:1"
+ wechat_recode_list['num'] = wechat_num
+ EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
+ #写语音文件数据
+
+ # path = "/usr/static/storage_file/wechat.amr"
+ path = "/usr/static/storage_file/{}.amr".format(wechat_num)
+ with open(path,"w") as fd:
+ arm = bytearray()
+ j = 0
+ for i in range(len(arm_data)):
+ if arm_data[j] == 0x7d and arm_data[j+1] == 0x01:
+ arm.extend(b'\x7d')
+ j+=1
+ elif arm_data[j] == 0x7d and arm_data[j+1] == 0x02:
+ arm.extend(b'\x5b')
+ j+=1
+ elif arm_data[j] == 0x7d and arm_data[j+1] == 0x03:
+ arm.extend(b'\x5d')
+ j+=1
+ elif arm_data[j] == 0x7d and arm_data[j+1] == 0x04:
+ arm.extend(b'\x2c')
+ j+=1
+ elif arm_data[j] == 0x7d and arm_data[j+1] == 0x05:
+ arm.extend(b'\x2a')
+ j+=1
+ else :
+ arm.append(arm_data[j])
+ j+=1
+ if j >= len(arm_data):
+ break
+ fd.write(arm)
+ EventMesh.publish(constants.PROTOCOL.TK_SEND,1)
+
+
+
+
+
+class MESSAGE_ProtoCol(ProtoCol):
+ """微聊"""
+ TYPE = "MESSAGE"
+
+
+ def send(self, event, msg):
+
+ #[XT*334588000000156*0007*MESSAGE]
+ send_data = "SZKW*%s*0007*MESSAGE"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ #Wechat_log("POWEROFF_ProtoCol:send:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+ def recv(self, event, msg):
+ """
+
+ @param event: 微聊文字
+ @param msg: 接收到的下行数据
+ """
+ # msg = msg[1:-1]
+
+ # msg_s = msg.decode('ascii')
+ # msg_s = msg_s.split(',')
+ # msg_s = msg_s[1]
+ # # Wechat_log("msg_tmp:len:{}\r\n data:{}".format(len(msg_s),msg_s))
+
+
+ # get_wechat_data = EventMesh.publish("get_wechat_data")
+
+ # MXA_MSG = get_wechat_data[0]
+ # wechat_recode_list = get_wechat_data[1]
+ # wechat_num = wechat_recode_list["num"]
+ # # Wechat_log("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
+
+ # if wechat_num >= MXA_MSG:
+ # wechat_num = 0
+ # if wechat_num == 0:
+ # wechat_num += 1
+ # elif wechat_num > 0:
+ # wechat_num += 1
+ # msg_txt = {}
+ # # 0 1 2 3
+ # Wechat_log("wechat_num:init {}".format(wechat_num))
+ # msg_txt = UnicodeHexStr_To_Utf8Str(msg_s)
+ # # Wechat_log("msg_txt:{}".format(msg_txt))
+ # wechat_recode_list["%02d"%(wechat_num)] = "T:{}".format(msg_txt)
+ # wechat_recode_list['num'] = wechat_num
+ # EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
+ # # Wechat_log("wechat_recode_list:len data:{}".format(wechat_recode_list))
+
+ # screen_NAME = EventMesh.publish("get_screen_NAME")
+ # get_lcd_state = EventMesh.publish("get_lcd_state")
+ # if screen_NAME != "wechat" or get_lcd_state == 0:
+ # EventMesh.publish("load_screen", {"screen": "wechat_popup"})
+ # else:
+ # EventMesh.publish("wechat_updata_list_show")
+ EventMesh.publish(constants.PROTOCOL.MESSAGE_SEND)
+
+
+class ProtoColResolver(object):
+ def __init__(self):
+ self.protocol_list = []
+
+ def add_support(self, prot):
+ self.protocol_list.append(prot)
+ prot.initialization()
+
+ def handler(self, data):
+ # 这里接收数据
+
+ # print("handler -> {}".format(data))
+ # if data.startswith('Init;'):
+ # data = data[5:]
+ # EventMesh.publish(constants.EVENT.SET_KEY, {"value": ujson.loads(data)['KEY']})
+
+ # elif data.startswith("Update;"):
+ # data = data[7:]
+ # EventMesh.publish(constants.PROTOCOL.H04_RECV, data)
+ try:
+ if len(data) > 0:
+ #print("handler:{}".format(len(data)))
+ data_tmp = data.decode('ascii')
+ data_tmp = data_tmp.split(']')[0] #去掉]
+ ProtoCol_type = data_tmp.split('*')[3] #拿到协议标识
+ ProtoCol_type = ProtoCol_type.split(',')[0]
+ ProtoCol_type = "%s_RECV"%(ProtoCol_type)
+ # print("ProtoColResolver:ProtoCol_type:%s\r\ndata:%s"%(ProtoCol_type,data))
+ EventMesh.publish(ProtoCol_type, data) #返回协议read
+ except Exception as e:
+ print("handler:ERROR:")
+ usys.print_exception(e)
+ print("handler:error data:{}".format(len(data)))
--- /dev/null
+import uos
+import ql_fs
+if ql_fs.path_exists("/ext") == False:
+ ldev = uos.VfsLfs1(32, 32, 32, "ext_fs",0,3)
+ uos.mount(ldev,'/ext')
+res = uos.statvfs("/ext")
+res = list(res)
+
+from btn_device_ec800m import BtnDevice
+
+import lvgl as lv
+import utime
+import osTimer
+import pm
+import ql_fs
+from machine import Pin
+from misc import PWM
+import uos
+from machine import I2C
+from Hsensor import GH3018
+from Gsensor import SC7A20
+btn_device = BtnDevice()
+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()
+#lcd_ctrl.write(0)
+lv.autoSleep(1)
+pm.autosleep(1)
+print("test end2")
\ No newline at end of file
--- /dev/null
+# codeing=UTF-8
+import net
+import checkNet
+import sms as SMS
+from machine import Pin
+import audio
+#本示例演示将分开到达设备的两条长两条短信合并为一条短信
+#本例演示要求短信索引值0和短信索引值1的短信同一条长短信的内容
+audio_buf =['audio_audio_haixiu', 'R_ALARM_3', 'R_CALL_mp3', 'R_CHARGE_FULL', 'R_CHARGE_IN', 'R_CHARGE_OUT', 'R_HSENSOR_RESULT_FAILE','R_HSENSOR_RESULT_HR_TITLE', 'R_HSENSOR_RESULT_OK', 'R_HSENSOR_SPO2_TITLE', 'R_HSENSOR_TEMP_TITLE', 'R_NO_SET_SOS_DIAL', 'R_NO_SIM', 'R_POWER_OFF_1', 'R_READ_STEP_0', 'R_READ_STEP_1', 'R_READ_STEP_2', 'R_READ_STEP_3', 'R_READ_STEP_4', 'R_READ_TIME_0','R_READ_TIME_1', 'R_READ_TIME_2', 'R_READ_TIME_3', 'R_READ_TIME_4', 'R_READ_TIME_5', 'R_READ_TIME_6', 'R_READ_TIME_7', 'R_READ_TIME_8', 'R_READ_TIME_9', 'R_READ_TIME_MIN', 'R_READ_TIME_ZHENG', 'R_SIM_CONNECT', 'R_SIM_FAILE', 'R_SOS_ALERT','R_TSENSOR_RESULT_VALUE_DOT']
+
+aud = audio.Audio(0)
+aud.set_pa(Pin.GPIO29)
+aud.setVolume(11)
+# output_list = merge_bin("G:\\task\\音频剪切\\音频\\audio.bin", "G:\\task\\音频剪切\\音频\\221124\\")
+
+if __name__ == "__main__":
+ step = 44314
+
+ imei = "860132060344568"
+ print(imei)
+ str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(imei[0]))\
+ ,audio_buf.index("R_READ_TIME_{}".format(imei[1])),audio_buf.index("R_READ_TIME_{}".format(imei[2])),audio_buf.index("R_READ_TIME_{}".format(imei[3])),\
+ audio_buf.index("R_READ_TIME_{}".format(imei[4])),audio_buf.index("R_READ_TIME_{}".format(imei[5])),audio_buf.index("R_READ_TIME_{}".format(imei[6])),audio_buf.index("R_READ_TIME_{}".format(imei[7])),\
+ audio_buf.index("R_READ_TIME_{}".format(imei[8])),audio_buf.index("R_READ_TIME_{}".format(imei[9])),audio_buf.index("R_READ_TIME_{}".format(imei[10])),audio_buf.index("R_READ_TIME_{}".format(imei[11])),\
+ audio_buf.index("R_READ_TIME_{}".format(imei[12])),audio_buf.index("R_READ_TIME_{}".format(imei[13])),audio_buf.index("R_READ_TIME_{}".format(imei[14])))
+ aud.montage_play('U:/static/audio.bin',1,1,str_data)
+
\ No newline at end of file
--- /dev/null
+import utime
+import osTimer
+import lvgl as lv
+import EventMesh
+from machine import Timer
+import voiceCall
+import osTimer
+import constants
+from misc import Power
+import pm
+import ujson
+import audio
+import ql_fs
+import audio
+import sms
+from machine import Pin
+from misc import PWM
+import uos
+import gc
+import _thread
+from queue import Queue
+from machine import RTC
+import usys
+def audio_cb(event):
+ if event == 0:
+ EventMesh.publish("set_audio_state", 1)
+ print('audio-play start.')
+ elif event == 7:
+ EventMesh.publish("set_audio_state", 0)
+ print('audio-play finish.')
+CALL_LOG_MAX = 50
+aud = audio.Audio(0)
+aud.setCallback(audio_cb)
+# -----------------------------------------style create--------------------------------------
+style_screen = lv.style_t()
+style_screen.init()
+style_screen.set_radius(0)
+style_screen.set_bg_color(lv.color_make(0x00, 0x00, 0x00))
+style_screen.set_bg_opa(255)
+style_screen.set_border_width(0)
+style_screen.set_pad_left(0)
+style_screen.set_pad_right(0)
+style_screen.set_pad_top(0)
+style_screen.set_pad_bottom(0)
+
+style_bar = lv.style_t()
+style_bar.init()
+style_bar.set_radius(10)
+style_bar.set_bg_color(lv.color_make(0xA0, 0xA0, 0xA0))
+style_bar.set_bg_grad_color(lv.color_make(0xA0, 0xA0, 0xA0))
+style_bar.set_bg_grad_dir(lv.GRAD_DIR.VER)
+style_bar.set_bg_opa(60)
+style_bar.set_pad_left(0)
+style_bar.set_pad_right(0)
+style_bar.set_pad_top(0)
+style_bar.set_pad_bottom(0)
+
+
+style_bar_indic = lv.style_t()
+style_bar_indic.init()
+style_bar_indic.set_radius(10)
+style_bar_indic.set_bg_color(lv.color_make(0xff, 0x61, 0x3a))
+style_bar_indic.set_bg_grad_color(lv.color_make(0xff, 0x61, 0x3a))
+style_bar_indic.set_bg_grad_dir(lv.GRAD_DIR.VER)
+style_bar_indic.set_bg_opa(255)
+# 默认白色
+
+style_font_youyuan_20 = lv.style_t()
+style_font_youyuan_20.init()
+style_font_youyuan_20.set_text_color(lv.color_make(0xff, 0xff, 0xff))
+style_font_youyuan_20.set_text_font_v2("font_28.bin",28,0)
+
+style_font_youyuan_40 = lv.style_t()
+style_font_youyuan_40.init()
+style_font_youyuan_40.set_text_color(lv.color_make(0xff, 0xff, 0xff))
+style_font_youyuan_40.set_text_font_v2("font_40.bin",40,0)
+#黑色
+style_font_youyuan_20_black = lv.style_t()
+style_font_youyuan_20_black.init()
+style_font_youyuan_20_black.set_text_color(lv.color_make(0x00, 0x00, 0x00))
+style_font_youyuan_20_black.set_text_font_v2("font_28.bin",28,0)
+
+
+style_font_youyuan_20_red = lv.style_t()
+style_font_youyuan_20_red.init()
+style_font_youyuan_20_red.set_text_color(lv.color_make(0xff, 0x00, 0x00))
+style_font_youyuan_20_red.set_text_font_v2("font_28.bin",28,0)
+
+style_img = lv.style_t()
+style_img.init()
+style_img.set_img_opa(255)
+
+style_line = lv.style_t()
+style_line.init()
+style_line.set_line_width(2)
+style_line.set_line_color(lv.color_make(0xff, 0xff, 0xff))
+
+
+style_list = lv.style_t()
+style_list.init()
+style_list.set_bg_color(lv.color_make(0x00, 0x00, 0x00))
+style_list.set_radius(0)
+style_list.set_bg_opa(255)
+style_list.set_border_width(0)
+style_list.set_pad_left(0)
+style_list.set_pad_right(0)
+style_list.set_pad_top(0)
+
+style_list_scro = lv.style_t()
+style_list_scro.init()
+style_list_scro.set_bg_opa(0)
+
+# create style style_btn
+style_btn = lv.style_t()
+style_btn.init()
+style_btn.set_bg_opa(0)
+style_btn.set_shadow_opa(0)
+style_btn.set_border_width(0)
+
+style_wechat_btn = lv.style_t()
+style_wechat_btn.init()
+style_wechat_btn.set_bg_color(lv.color_make(0x1E, 0x26, 0xff))
+style_wechat_btn.set_border_width(0)
+style_wechat_btn.set_shadow_opa(0)
+
+style_contact_btn = lv.style_t()
+style_contact_btn.init()
+style_contact_btn.set_bg_color(lv.color_make(0xff, 0xff, 0xff))
+style_contact_btn.set_border_width(0)
+style_contact_btn.set_shadow_opa(0)
+
+style_common_bg_rect_btn_pressed = lv.style_t()
+style_common_bg_rect_btn_pressed.init()
+style_common_bg_rect_btn_pressed.set_bg_color(lv.color_make(0x1E, 0x26, 0xff))
+style_common_bg_rect_btn_pressed.set_bg_opa(100)
+style_common_bg_rect_btn_pressed.set_border_width(0)
+style_common_bg_rect_btn_pressed.set_shadow_opa(0)
+
+style_contact_btn_pressed = lv.style_t()
+style_contact_btn_pressed.init()
+style_contact_btn_pressed.set_radius(5)
+style_contact_btn_pressed.set_bg_color(lv.color_make(0xff,0xff,0xff))
+style_contact_btn_pressed.set_bg_grad_color(lv.color_make(0x21,0x95,0xf6))
+style_contact_btn_pressed.set_bg_grad_dir(lv.GRAD_DIR.HOR)
+style_contact_btn_pressed.set_bg_opa(217)
+style_contact_btn_pressed.set_border_color(lv.color_make(0x21,0x95,0xf6))
+style_contact_btn_pressed.set_border_width(0)
+style_contact_btn_pressed.set_border_opa(255)
+style_contact_btn_pressed.set_text_color(lv.color_make(0x00,0x00,0x00))
+
+
+style_alipay_btn = lv.style_t()
+style_alipay_btn.init()
+style_alipay_btn.set_bg_color(lv.color_make(0xFF, 0xFF, 0xff))
+style_alipay_btn.set_bg_opa(20)
+style_alipay_btn.set_border_width(0)
+style_alipay_btn.set_shadow_opa(0)
+
+
+
+style_circle = lv.style_t()
+style_circle.init()
+style_circle.set_bg_color(lv.color_make(0xff, 0xff, 0xff))
+style_circle.set_radius(0x7FFF)
+
+
+
+from common import Abstract
+
+class Screen(Abstract):
+ meta_type = "UI"
+ def __init__(self):
+ self.meta = None
+ self.meta_info = None
+
+ # self.bg_img = None
+
+ # def set_bg_img(self, _fp):
+ # print("bg _fp = {} NAME = {} bg_img = {}".format(_fp, self.NAME, self.bg_img))
+ # if self.bg_img:
+ # self.bg_img.set_src(_fp)
+
+ def load_screen(self, e, msg):
+ print("msg = {}".format(msg))
+ EventMesh.publish("load_screen", msg)
+
+
+
+ def load(self):
+ pass
+
+ def get_meta(self):
+ return self.meta
+
+ def Close(self):
+ pass
+ def lcd_on(self):
+ pass
+ def lcd_off(self):
+ pass
+ def done_left_to_right(self):
+ pass
+
+ def done_right_to_left(self):
+ pass
+
+ def done_bottom_to_top(self):
+ pass
+
+ def done_top_to_bottom(self):
+ pass
+
+ def done_return(self):
+ pass
+
+ def done_click(self):
+ pass
+
+ def done_error(self):
+ pass
+ def handle_message_event(self,data):
+ pass
+ def publish_message_event(self,data):
+ EventMesh.publish("publish_message_event_ui", data)
+
+PHONE_CALL_MAX_DATA = 22
+
+phone_line_points = [{"x":0,"y":0},{"x":0,"y":40}]
+phone_screen = None
+phone_line = None
+phone_label = None
+phone_one = None
+phone_two = None
+phone_three = None
+phone_four = None
+phone_five = None
+phone_six = None
+phone_seven = None
+phone_eight = None
+phone_nine = None
+phone_start = None
+phone_zero = None
+phone_hash = None
+phone_call = None
+phone_call_btn = None
+phone_contact = None
+phone_contact_btn = None
+phone_delete = None
+phone_delete_btn = None
+
+class PhoneScreen(Screen):
+ NAME = "Phone"
+
+ def __init__(self):
+
+ super().__init__()
+ self.meta = None
+ self.phone_num = ''
+ self.phone_list = []
+ self.button = 0
+ self.timer = osTimer()
+ self.timer_cb = 0
+ self.count = 0
+
+
+
+ def initialization(self):
+ self.phone_num=''
+ self.phone_list = []
+ global phone_screen ,phone_line,phone_label,phone_one,phone_two,phone_three,phone_four,phone_five,phone_six,phone_seven,phone_eight,phone_nine,phone_start,\
+ phone_zero,phone_hash,phone_call,phone_call_btn,phone_contact,phone_contact_btn,phone_delete,phone_delete_btn
+
+
+ if phone_screen == None:
+ phone_screen = lv.obj()
+ print("phone_screen")
+ phone_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ phone_line = lv.line(phone_screen)
+ phone_line.set_points(phone_line_points,2)
+ phone_line.set_pos(235,8)
+ phone_line.set_size(2,40)
+ phone_line.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ phone_line.add_style(style_line,0)
+
+ phone_label = lv.label(phone_screen)
+ phone_label.set_pos(0, 14)
+ phone_label.set_size(0, 48)
+ phone_label.set_text(" ")
+ phone_label.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_label.set_long_mode(lv.label.LONG.CLIP)
+ phone_label.set_style_text_align(lv.TEXT_ALIGN.RIGHT, 0)
+
+ phone_one = lv.img(phone_screen)
+ phone_one.set_src("U:/static/IMAGE_NUMBER_KEY1_ICON.png")
+ phone_one.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_one.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_one.set_pos(3, 60)
+ phone_one.set_size(76, 50)
+
+ phone_two = lv.img(phone_screen)
+ phone_two.set_size(76, 50)
+ phone_two.set_src("U:/static/IMAGE_NUMBER_KEY2_ICON.png")
+ phone_two.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_two.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_two.set_pos(82, 60)
+
+ phone_three = lv.img(phone_screen)
+ phone_three.set_size(76, 50)
+ phone_three.set_src("U:/static/IMAGE_NUMBER_KEY3_ICON.png")
+ phone_three.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_three.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_three.set_pos(161, 60)
+
+ phone_four = lv.img(phone_screen)
+ phone_four.set_size(76, 50)
+ phone_four.set_src("U:/static/IMAGE_NUMBER_KEY4_ICON.png")
+ phone_four.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_four.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_four.set_pos(3, 112)
+
+ phone_five = lv.img(phone_screen)
+ phone_five.set_size(76, 50)
+ phone_five.set_src("U:/static/IMAGE_NUMBER_KEY5_ICON.png")
+ phone_five.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_five.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_five.set_pos(82, 112)
+
+ phone_six = lv.img(phone_screen)
+ phone_six.set_size(76, 50)
+ phone_six.set_src("U:/static/IMAGE_NUMBER_KEY6_ICON.png")
+ phone_six.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_six.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_six.set_pos(161, 112)
+
+ phone_seven = lv.img(phone_screen)
+ phone_seven.set_size(76, 50)
+ phone_seven.set_src("U:/static/IMAGE_NUMBER_KEY7_ICON.png")
+ phone_seven.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_seven.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_seven.set_pos(3, 164)
+
+ phone_eight = lv.img(phone_screen)
+ phone_eight.set_size(76, 50)
+ phone_eight.set_src("U:/static/IMAGE_NUMBER_KEY8_ICON.png")
+ phone_eight.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_eight.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_eight.set_pos(82, 164)
+
+ phone_nine = lv.img(phone_screen)
+ phone_nine.set_size(76, 50)
+ phone_nine.set_src("U:/static/IMAGE_NUMBER_KEY9_ICON.png")
+ phone_nine.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_nine.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_nine.set_pos(161, 164)
+
+ phone_start = lv.img(phone_screen)
+ phone_start.set_size(76, 50)
+ phone_start.set_src("U:/static/IMAGE_NUMBER_KEYSTAR_ICON.png")
+ phone_start.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_start.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_start.set_pos(3, 216)
+
+ phone_zero = lv.img(phone_screen)
+ phone_zero.set_size(76, 50)
+ phone_zero.set_src("U:/static/IMAGE_NUMBER_KEY0_ICON.png")
+ phone_zero.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_zero.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_zero.set_pos(82, 216)
+
+ phone_hash = lv.img(phone_screen)
+ phone_hash.set_size(76, 50)
+ phone_hash.set_src("U:/static/IMAGE_NUMBER_KEYHASH_ICON.png")
+ phone_hash.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_hash.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_hash.set_pos(161, 216)
+
+ phone_call = lv.img(phone_screen)
+ phone_call.set_size(76, 50)
+ phone_call.set_src("U:/static/IMAGE_BUTTON_DIAL.png")
+ phone_call.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_call.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_call.set_pos(3, 270)
+
+ phone_call_btn = lv.img(phone_screen)
+ phone_call_btn.set_size(76, 52)
+ phone_call_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_call_btn.set_pos(3, 268)
+
+ phone_contact = lv.img(phone_screen)
+ phone_contact.set_size(64, 50)
+ phone_contact.set_src("U:/static/IMAGE_BUTTON_DIAL_CONTACT.png")
+ phone_contact.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_contact.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_contact.set_pos(87, 270)
+
+ phone_contact_btn = lv.img(phone_screen)
+ phone_contact_btn.set_size(76, 52)
+ phone_contact_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_contact_btn.set_pos(87, 268)
+
+ phone_delete = lv.img(phone_screen)
+ phone_delete.set_size(76, 50)
+ phone_delete.set_src("U:/static/IMAGE_BUTTON_DELKEY.png")
+ phone_delete.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_delete.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_delete.set_pos(161, 270)
+
+ phone_delete_btn = lv.img(phone_screen)
+ phone_delete_btn.set_size(76, 52)
+ phone_delete_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_delete_btn.set_pos(161, 268)
+
+ self.meta = phone_screen
+
+ phone_one.add_event_cb(lambda e: EventMesh.callback_wrapper(self.one(e)),
+ lv.EVENT.CLICKED, None)
+ phone_two.add_event_cb(lambda e: EventMesh.callback_wrapper(self.two(e)),
+ lv.EVENT.CLICKED, None)
+ phone_three.add_event_cb(lambda e: EventMesh.callback_wrapper(self.three(e)),
+ lv.EVENT.CLICKED, None)
+ phone_four.add_event_cb(lambda e: EventMesh.callback_wrapper(self.four(e)),
+ lv.EVENT.CLICKED, None)
+ phone_five.add_event_cb(lambda e: EventMesh.callback_wrapper(self.five(e)),
+ lv.EVENT.CLICKED, None)
+ phone_six.add_event_cb(lambda e: EventMesh.callback_wrapper(self.six(e)),
+ lv.EVENT.CLICKED, None)
+ phone_seven.add_event_cb(lambda e: EventMesh.callback_wrapper(self.seven(e)),
+ lv.EVENT.CLICKED, None)
+ phone_eight.add_event_cb(lambda e: EventMesh.callback_wrapper(self.eight(e)),
+ lv.EVENT.CLICKED, None)
+ phone_nine.add_event_cb(lambda e: EventMesh.callback_wrapper(self.nine(e)),
+ lv.EVENT.CLICKED, None)
+ phone_zero.add_event_cb(lambda e: EventMesh.callback_wrapper(self.zero(e)),
+ lv.EVENT.CLICKED, None)
+
+ phone_call_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.call(e)),
+ lv.EVENT.CLICKED, None)
+ phone_contact_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.contact(e)),
+ lv.EVENT.CLICKED, None)
+ phone_delete_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.delete(e)),
+ lv.EVENT.CLICKED, None)
+
+ phone_start.add_event_cb(lambda e: EventMesh.callback_wrapper(self.start(e)),
+ lv.EVENT.CLICKED, None)#短按显示*
+
+ phone_start.add_event_cb(lambda e: EventMesh.callback_wrapper(self.pressed_start(e)),
+ lv.EVENT.LONG_PRESSED, None)#长按显示+
+
+ phone_start.add_event_cb(lambda e: EventMesh.callback_wrapper(self.endpressed_start(e)),
+ lv.EVENT.RELEASED, None)#释放按键
+
+
+ phone_hash.add_event_cb(lambda e: EventMesh.callback_wrapper(self.hash(e)),
+ lv.EVENT.CLICKED, None)
+
+
+ self.phone_num=''
+ self.phone_list = []
+ self.count = 0
+ if phone_label != None:
+ phone_label.set_pos(0, 14)
+ phone_label.set_size(0, 0)
+ phone_label.set_text(" ")
+ #phone_label.set_text(" ")
+ # print("self.phone_list :{} self.phone_num:{}".format(self.phone_list,self.phone_num))
+ if self.timer_cb == 0:
+ self.timer_cb = 1
+ self.timer.start(1000,1,self.refresh_line)
+
+
+ def refresh_line(self,e):
+ if self.count > 2 :
+ self.count = 1
+ if self.count%2 == 0:
+ phone_line.clear_flag(lv.obj.FLAG.HIDDEN)
+ else:
+ phone_line.add_flag(lv.obj.FLAG.HIDDEN)
+ self.count+=1
+ def one(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ #self.phone_list.pop(0)
+ return
+ self.phone_list.append("1")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def two(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ #self.phone_list.pop(0)
+ return
+ self.phone_list.append("2")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def three(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ #self.phone_list.pop(0)
+ return
+ self.phone_list.append("3")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def four(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ #self.phone_list.pop(0)
+ return
+ self.phone_list.append("4")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def five(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ #self.phone_list.pop(0)
+ return
+ self.phone_list.append("5")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def six(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ #self.phone_list.pop(0)
+ return
+ self.phone_list.append("6")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def seven(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ #self.phone_list.pop(0)
+ return
+ self.phone_list.append("7")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def eight(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ #self.phone_list.pop(0)
+ return
+ self.phone_list.append("8")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def nine(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ #self.phone_list.pop(0)
+ return
+ self.phone_list.append("9")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def zero(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:#限制拨号数量20个数字
+ #self.phone_list.pop(0)
+ return
+ self.phone_list.append("0")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def start(self,e):
+ self.button = 0
+
+ def pressed_start(self,e):
+ self.button = 1
+ def Close(self):
+ self.timer_cb = 0
+ self.timer.stop()
+
+ def endpressed_start(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:#限制拨号数量20个数字
+ #self.phone_list.pop(0)
+ return
+
+ if self.button == 1:#长按
+ self.phone_list.append("+")
+ else:#短按
+ self.phone_list.append("*")
+
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def hash(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:#限制拨号数量20个数字
+ #self.phone_list.pop(0)
+ return
+ self.phone_list.append("#")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+
+ def delete(self,e):
+ if len(self.phone_list) != 0:
+ self.phone_list.pop()
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def contact(self,e):
+ EventMesh.publish("load_screen", {"screen": "contacts"})
+
+ def call(self,e):
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:
+ self.name = None
+ self.phonebook = {}
+ self.number_tmp = {}
+ if len(self.phone_list) != 0:
+ data = EventMesh.publish("get_phonebook_list")
+ if data != None:
+ check = data[0]
+ self.phonebook = data[1]
+ # print("check :{}".format(check))
+ if check == 1:#检查通讯录
+ phonebook_keys = sorted(self.phonebook.keys())
+ b = str(self.phone_num) in self.phonebook.values()#查找key中是否包含content电话号码 True 包含在里面 False不包含在里面
+ j = 0
+ if b == True:
+ for i in range(len(self.phonebook)): #字典 key value
+ #'001:张三':15521469561
+ name = self.phonebook[phonebook_keys[j]]
+ name_value = phonebook_keys[j]
+ number_tmp = str(self.phone_num)
+ # print("name :{} number_tmp:{}".format(name,number_tmp))
+ if name.find(number_tmp) != -1:#查找电话号码是否在通讯录里面
+ number_f= name_value
+ name_s = number_f.split(':')
+ name_s = name_s[1]
+ self.name = name_s
+ break
+ j+=1
+ else:
+ self.name = self.phone_num
+ else:
+ self.name = self.phone_num
+
+ EventMesh.publish("save_phonenum",self.phone_num)
+ EventMesh.publish("save_phonename",self.name)#
+ EventMesh.publish("load_screen", {"screen": "dialing_noplay_popup"})
+ else:
+ EventMesh.publish("load_screen", {"screen": "no_valied_num_screen"})
+ else:#未插卡
+ EventMesh.publish("load_screen", {"screen": "no_sim_popup_screen"})
+
+
+ def show_num(self):
+ #print("self.phone_num ",self.phone_num,self.phone_list)
+ len_t = len(self.phone_list)*40
+ if len_t > 230:
+ len_t = 230
+ phone_label.set_size(len_t,48)
+ phone_label.set_pos(230-len_t,14)
+ phone_label.set_text(self.phone_num)
+
+ def lcd_on(self):
+ if self.timer_cb != 0:
+ self.timer_cb = 0
+ self.timer.start(1000,1,self.refresh_line)
+
+ def lcd_off(self):
+ self.timer_cb = 1
+ self.timer.stop()
+
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+call_log_screen = None
+contacts_cont_list = None
+call_log_title = None
+none_call_log_title = None
+call_log_cont_list_screen = None
+CALLLOG_FLAG = 0
+class CallLogScreen(Screen):
+ NAME = "call_log"
+
+ def __init__(self):
+ super().__init__()
+ self.CALL_LOG_MAX = CALL_LOG_MAX
+ self.meta = None
+ self.log_list = []
+ self.read_call_log = {}
+ self.check_json = 0
+ self.call_log_detail_list = None
+ self.call_log_detail_list_dict = []
+ self.timer = osTimer()
+ EventMesh.subscribe("call_log_update_show_list", self.call_log_update_show_list)
+
+ def post_processor_before_initialization(self):
+ read_call_log = EventMesh.publish("get_call_log_list")
+ if read_call_log != None:
+ self.check_json = read_call_log[0]
+ self.read_call_log = read_call_log[1]
+
+
+
+ def call_log_update_show_list(self, event, msg):
+ read_call_log = EventMesh.publish("get_call_log_list")
+ if read_call_log != None:
+ # print("read_call_log:{}".format(read_call_log))
+ self.check_json = read_call_log[0] #文件是否存在
+ self.read_call_log = read_call_log[1]#通话记录数据
+ self.timer.start(500,0,self.reciving)
+
+ def reciving(self,e):
+ self.btn_create()
+
+ def initialization(self):
+ global call_log_screen,contacts_cont_list ,call_log_title ,none_call_log_title ,call_log_cont_list_screen
+ if call_log_screen == None:
+ call_log_screen = lv.obj()
+ print("call_log_screen")
+ call_log_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ call_log_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ call_log_cont_list_screen = lv.obj(call_log_screen)
+ call_log_cont_list_screen.set_pos(0, 50)
+ call_log_cont_list_screen.set_size(240, 270)
+ call_log_cont_list_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ call_log_cont_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ call_log_title = lv.label(call_log_screen)
+ call_log_title.set_pos(0, 10)
+ call_log_title.set_size(240, 40)
+ call_log_title.set_long_mode(lv.label.LONG.WRAP)
+ call_log_title.set_text("通话记录")
+ call_log_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ call_log_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ none_call_log_title = lv.label(call_log_cont_list_screen)
+ none_call_log_title.set_pos(0, 120)
+ none_call_log_title.set_size(240, 40)
+ none_call_log_title.set_long_mode(lv.label.LONG.WRAP)
+ none_call_log_title.set_text(" ")
+ none_call_log_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ none_call_log_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ #self.call_log_detail_list = lv.obj(call_log_screen)
+ self.call_log_detail_list = lv.obj(call_log_cont_list_screen)
+ self.call_log_detail_list.set_pos(0, 0)
+ self.call_log_detail_list.set_size(240, 271)
+ self.call_log_detail_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ self.call_log_detail_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ for i in range(self.CALL_LOG_MAX):
+ _btn = lv.btn(self.call_log_detail_list)
+ _btn.add_flag(lv.obj.FLAG.CLICKABLE)
+ _btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling(e)),
+ lv.EVENT.CLICKED, None)
+ _btn.add_flag(lv.obj.FLAG.HIDDEN)
+ _btn_label2 = lv.label(_btn)
+ _btn_label3 = lv.label(_btn)
+ _btn_label4 = lv.label(_btn)
+ _btn_label5 = lv.label(_btn)
+ _btn_label6 = lv.label(_btn)
+ self.call_log_detail_list_dict.append({"_btn":_btn,"_btn_label2":_btn_label2,"_btn_label3":_btn_label3,
+ "_btn_label4":_btn_label4,"_btn_label5":_btn_label5,"_btn_label6":_btn_label6})
+ self.meta = call_log_screen
+
+
+ read_call_log = EventMesh.publish("get_call_log_list")
+ # print("read_call_log:{}".format(read_call_log))
+ if read_call_log != None:
+ self.check_json = read_call_log[0] #文件是否存在
+ self.read_call_log = read_call_log[1]#通话记录数据
+ if self.check_json == True and self.read_call_log != {}:
+ none_call_log_title.set_text(" ")
+ else:
+ none_call_log_title.set_text("暂无记录")
+ self.btn_create()
+
+ def btn_create(self):
+ EventMesh.publish("publish_message_event_ui",{"func":self.btn_create_screen,"data":0})
+
+ def btn_create_screen(self,data):
+ global call_log_screen,contacts_cont_list ,call_log_title ,none_call_log_title ,call_log_cont_list_screen
+ h = 0
+ if call_log_screen != None:
+ if self.check_json == True and len(self.read_call_log) != 0:
+
+ none_call_log_title.set_text(" ")
+
+ # self.call_log_detail_list.delete()#先删除一次控件
+ # self.call_log_detail_list = lv.obj(call_log_cont_list_screen)
+ # self.call_log_detail_list.set_pos(0, 0)
+ # self.call_log_detail_list.set_size(240, 271)
+ # self.call_log_detail_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ # self.call_log_detail_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ sort_tmp = self.read_call_log.values()
+ sort_new = sorted(sort_tmp, key = lambda i: i['timesec'],reverse = True)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条
+ # print("self.call_log :{} \r\n sort_new:{}\r\n".format(self.read_call_log,sort_new))
+
+ for sort_new_tmp in sort_new: #字典 key value
+ num_count = sort_new_tmp["count"]#获取通话次数
+ num_name = sort_new_tmp["name"]#获取名称
+ num_phonnum = sort_new_tmp["number"]#获取电话号码
+ num_time = sort_new_tmp["time"]#获取电话号码
+
+ # print("num_count :{} num_name:{} num_time:{}".format(num_count,num_name,num_time))
+ #_btn = lv.btn(self.call_log_detail_list)
+ self.call_log_detail_list_dict[h]["_btn"].set_size(240,80)
+ self.call_log_detail_list_dict[h]["_btn"].set_pos(0,82*h)
+ self.call_log_detail_list_dict[h]["_btn"].add_style(style_contact_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.call_log_detail_list_dict[h]["_btn"].add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling(e)),
+ lv.EVENT.CLICKED, None)
+
+
+ #_btn_label2 = lv.label(_btn)
+ self.call_log_detail_list_dict[h]["_btn_label2"].set_pos(0, 5)
+ self.call_log_detail_list_dict[h]["_btn_label2"].set_size(0, 25)
+ self.call_log_detail_list_dict[h]["_btn_label2"].set_text(num_phonnum)
+ #_btn_label2.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+ #
+ #_btn_label3 = lv.label(_btn)
+ self.call_log_detail_list_dict[h]["_btn_label3"].set_pos(0, 0)
+ self.call_log_detail_list_dict[h]["_btn_label3"].set_size(0, 0)
+ self.call_log_detail_list_dict[h]["_btn_label3"].set_text("(" + str(num_count) + ")")
+ # _btn_label3.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ #_btn_label4 = lv.label(_btn)
+ self.call_log_detail_list_dict[h]["_btn_label4"].set_pos(0, 38)
+ self.call_log_detail_list_dict[h]["_btn_label4"].set_size(230, 30)
+ self.call_log_detail_list_dict[h]["_btn_label4"].set_text(num_phonnum)
+ self.call_log_detail_list_dict[h]["_btn_label4"].add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ #_btn_label5 = lv.label(_btn)
+ self.call_log_detail_list_dict[h]["_btn_label5"].set_pos(0, 5)
+ self.call_log_detail_list_dict[h]["_btn_label5"].set_size(0, 0)
+ self.call_log_detail_list_dict[h]["_btn_label5"].set_text(num_name)
+ # _btn_label5.set_long_mode(lv.obj.LONG.DOT)
+ # _btn_label5.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ #_btn_label6 = lv.label(_btn)
+ self.call_log_detail_list_dict[h]["_btn_label6"].set_pos(0, 5)
+ self.call_log_detail_list_dict[h]["_btn_label6"].set_size(230, 28)
+ self.call_log_detail_list_dict[h]["_btn_label6"].set_text(num_name)
+ self.call_log_detail_list_dict[h]["_btn_label6"].add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ self.call_log_detail_list_dict[h]["_btn"].clear_flag(lv.obj.FLAG.HIDDEN)
+ #self.call_log_detail_list_dict[h]["_btn"].scroll_to_view(lv.ANIM.OFF)
+ h = h + 1
+ for i in range(self.CALL_LOG_MAX):
+ if i >= h :
+ self.call_log_detail_list_dict[i]["_btn"].add_flag(lv.obj.FLAG.HIDDEN)#隐藏多余
+ else:
+ if call_log_cont_list_screen != None:
+ none_call_log_title.set_text("暂无记录")
+ self.call_log_detail_list.add_flag(lv.obj.FLAG.HIDDEN)#隐藏空文本
+
+ def calling(self,e):
+ code = e.get_code()
+ if code == lv.EVENT.CLICKED:
+ global call_log_screen,contacts_cont_list ,call_log_title ,none_call_log_title
+ # print("e.get_text():{} {}".format(e.get_target().get_child(0).get_text(),e.get_target().get_child(3).get_text()))
+ phonnum = str(e.get_target().get_child(0).get_text())
+ phnoname = e.get_target().get_child(3).get_text()
+ # print("phonnum :{} _msg:{}".format(phonnum,phnoname))
+
+
+ self.name = None
+ self.phonebook = {}
+
+ self.call_log = {}
+ self.call_log_value = {}
+ self.read_call_log = {}
+ self.number_tmp = {}
+
+ data = EventMesh.publish("get_phonebook_list")
+ if data != None:
+ check = data[0]
+ self.phonebook = data[1]
+ # print("check :{}".format(check))
+ if check == 1:#检查通讯录
+ phonebook_keys = sorted(self.phonebook.keys())
+ b = str(phonnum) in self.phonebook.values()#查找key中是否包含content电话号码 True 包含在里面 False不包含在里面
+ j = 0
+ if b == True:
+ for i in range(len(self.phonebook)): #字典 key value
+ #'001:':15521469561
+ name = self.phonebook[phonebook_keys[j]]
+ name_value = phonebook_keys[j]
+ number_tmp = str(phonnum)
+ # print("name :{} number_tmp:{}".format(name,number_tmp))
+ if name.find(number_tmp) != -1:#查找电话号码是否在通讯录里面
+ number_f= name_value
+ name_s = number_f.split(':')
+ name_s = name_s[1]
+ self.name = name_s
+ break
+ j+=1
+ else:
+ self.name = phnoname
+ else:
+ self.name = phnoname
+
+ if self.name == None:
+ self.name = phnoname
+ if len(phonnum) > 0:
+ EventMesh.publish("save_phonename",self.name)#
+ EventMesh.publish("save_phonenum",phonnum)#保存电话号码用于界面显示获取
+ #voiceCall.callStart(str(phonnum))
+ EventMesh.publish("load_screen", {"screen": "dialing_noplay_popup"})
+ else:
+ EventMesh.publish("load_screen", {"screen": "no_valied_num_screen"})#无效的号码 请重新输入
+
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+# ------------------------------拨打电话-------------dialing screen----------------------------------------------------------
+
+dialing_screen = None
+dialing_img = None
+dialing_name = None
+dialing_call_label = None
+hangup_imgbtn = None
+class DialingScreen(Screen):
+ NAME = "dialing"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+
+ self.call_log = {}
+ self.call_log_value = {}
+ self.read_call_log = {}
+ self.number_tmp = {}
+ self.CALL_LOG_MAX = CALL_LOG_MAX
+ def initialization(self):
+ EventMesh.publish("set_UI_high_priority", 1)
+ global dialing_screen,dialing_img,dialing_name ,hangup_imgbtn
+ if dialing_screen == None:
+ dialing_screen = lv.obj()
+ print("dialing_screen")
+ dialing_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ dialing_img = lv.img(dialing_screen)
+ dialing_img.set_pos(80, 20)
+ dialing_img.set_size(64, 64)
+ dialing_img.set_src("U:/static/IMAGE_NOTICE_CALL.png")
+ dialing_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ dialing_name = lv.label(dialing_screen)
+ dialing_name.set_pos(0, 120)
+ dialing_name.set_size(240, 50)
+ dialing_name.set_text(" ")
+ dialing_name.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ dialing_name.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ dialing_call_label = lv.label(dialing_screen)
+ dialing_call_label.set_pos(0, 174)
+ dialing_call_label.set_size(240, 50)
+ dialing_call_label.set_text("正在等待对方接\n听电话")
+ dialing_call_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ dialing_call_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ hangup_imgbtn = lv.img(dialing_screen)
+ hangup_imgbtn.set_size(64, 64)
+ hangup_imgbtn.set_src("U:/static/hang_up.png")
+ hangup_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+ hangup_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ hangup_imgbtn.set_pos(80, 250)
+ hangup_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.hangup(e)),
+ lv.EVENT.CLICKED, None)
+ self.meta = dialing_screen
+ if dialing_name != None:
+ name = EventMesh.publish("get_phonename")#获取拨打电话名称
+ dialing_name.set_text(name)#名称
+ def post_processor_after_initialization(self):
+ # print("创建通话记录 post_processor_before_initialization\n")
+ utime.sleep_ms(200)#不加延时会切屏
+ #获取字符串
+ name = EventMesh.publish("get_phonename")#获取拨打电话名称
+ content = EventMesh.publish("get_phonenum")#获取电话号码
+ time = EventMesh.publish("screen_get_time")#获取系统时间
+
+ # ["15692025051","2","12:59","哥gdh符合双方和开发商开发好看的思考"],
+ # 格式:{"电话号码":{"timesec":'时间戳',"number":'电话号码',"name":'名字',"time":'时间',"count":'通话次数'}}
+ # dialing_content.set_text(content)#电话号码
+ num = 0
+
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ # print("time_tmp:{}".format(time_tmp))
+ read_call_log = EventMesh.publish("get_call_log_list")
+ check_json = read_call_log[0]
+
+ if check_json == True:
+ self.read_call_log = read_call_log[1]
+ b = content in self.read_call_log.keys()#查找key中是否包含content电话号码 True 包含在里面 False不包含在里面
+ if b == True:#查找是否有相同的电话号码 有就直接读出来的次数上加一 没有则从1开始加起
+ number_tmp = {}
+ number_tmp = self.read_call_log[content] #通话次数加一
+ num_tmp_t = number_tmp["count"]
+ # print("number_tmp:{} self.read_call_log.value:{}".format(number_tmp,self.read_call_log.values()))
+ else :
+ num_tmp_t = 0
+ num = num_tmp_t
+ else:
+ num = 0 #通话次数
+
+ sort_tmp = {}
+ sort_tmp = self.read_call_log.values()
+ sort_new = {}
+ sort_new = sorted(sort_tmp, key = lambda i: i['timesec'],reverse = True)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条
+
+ i = 0
+ # 49 50
+ if len(self.read_call_log) >= self.CALL_LOG_MAX:
+ for sort_new_tmp in sort_new: #字典 key value
+ i+=1 # 1
+ if i >= self.CALL_LOG_MAX:#大于50条把最后一条删除掉只保留前面50调最新的数据
+ key_tmp = sort_new_tmp["number"]
+ del self.read_call_log[key_tmp]
+ tmp = {}
+ tmp["count"]= num+1 #通话次数
+ tmp["time"]= "{}:{}".format("%02d"%(time[0][0]),"%02d"%(time[0][1]))#通湖时间
+ tmp["name"]= name #名称
+ tmp["timesec"]= time_tmp #时间戳
+ tmp["number"] = content
+
+ self.read_call_log[content] = tmp
+ with open("/usr/static/storage_file/Call_log.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_call_log,fd)
+ print("创建通话记录")
+ EventMesh.publish("set_call_log_list", [1,self.read_call_log])
+ EventMesh.publish("call_log_update_show_list")
+
+ def hangup(self,e):
+ EventMesh.publish("set_UI_high_priority", 0)
+ EventMesh.publish("set_hangup_mode", 1)
+ voiceCall.callEnd()
+
+ def done_return(self):
+ pass
+ #EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ pass
+ #EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ flag = EventMesh.publish("get_lcd_state")
+ if flag == 1:
+ EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)
+ else:
+ EventMesh.publish(constants.EVENT.SYSTEM_UP)
+
+
+
+no_sim_popup_screen = None
+no_sim_popup_screen_title1 = None
+no_sim_popup_screen_title2 = None
+#未插卡
+class NoSimScreen(Screen):#
+ NAME = "no_sim_popup_screen"
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.meta_type = "popup"
+
+ def initialization(self):
+ global no_sim_popup_screen,no_sim_popup_screen_title1,no_sim_popup_screen_title2
+ if no_sim_popup_screen == None :
+ no_sim_popup_screen = lv.obj()
+ print("no_sim_popup_screen")
+ no_sim_popup_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_sim_popup_screen_title1 = lv.label(no_sim_popup_screen)
+ no_sim_popup_screen_title1.set_pos(0, 140)
+ no_sim_popup_screen_title1.set_size(240, 40)
+ no_sim_popup_screen_title1.set_text("无SIM卡或")
+ no_sim_popup_screen_title1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ no_sim_popup_screen_title1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_sim_popup_screen_title2 = lv.label(no_sim_popup_screen)
+ no_sim_popup_screen_title2.set_pos(0, 190)
+ no_sim_popup_screen_title2.set_size(240, 40)
+ no_sim_popup_screen_title2.set_text("无网络")
+ no_sim_popup_screen_title2.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ no_sim_popup_screen_title2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ self.meta = no_sim_popup_screen
+
+ def done_left_to_right(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_right_to_left(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_bottom_to_top(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_top_to_bottom(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_return(self):
+ EventMesh.publish("return_prev_screen")
+ def done_click(self):
+ EventMesh.publish("return_prev_screen")
+
+ def btn1_release(self):
+ EventMesh.publish("return_prev_screen")
+
+ def btn8_press(self):
+ EventMesh.publish("return_prev_screen")
+
+
+no_valied_num_screen = None
+no_valied_num_screen_title1 = None
+no_valied_num_screen_title2 = None
+#=无效的号码 请重新输入
+class NovaliedNumScreen(Screen):#
+ NAME = "no_valied_num_screen"
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.meta_type = "popup"
+ self.timer_count = 0
+ self.timer=osTimer()
+
+ def initialization(self):
+ global no_valied_num_screen,no_valied_num_screen_title1,no_valied_num_screen_title2
+ if no_valied_num_screen == None :
+ no_valied_num_screen = lv.obj()
+ print("no_valied_num_screen")
+ no_valied_num_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_valied_num_screen_title1 = lv.label(no_valied_num_screen)
+ no_valied_num_screen_title1.set_pos(0, 140)
+ no_valied_num_screen_title1.set_size(240, 40)
+ no_valied_num_screen_title1.set_text("无效的号码,")
+ no_valied_num_screen_title1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ no_valied_num_screen_title1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ no_valied_num_screen_title2 = lv.label(no_valied_num_screen)
+ no_valied_num_screen_title2.set_pos(0, 190)
+ no_valied_num_screen_title2.set_size(240, 40)
+ no_valied_num_screen_title2.set_text("请重新输入")
+ no_valied_num_screen_title2.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ no_valied_num_screen_title2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ self.meta = no_valied_num_screen
+ def post_processor_after_initialization(self):
+ self.timer_count = 0
+ self.timer.start(5000,1,self.timeout_exit)
+
+ def timeout_exit(self,e):
+ self.timer_count+=1
+ if self.timer_count >= 2:
+ self.timer_count = 0
+ EventMesh.publish("return_prev_screen")
+
+ def Close(self):
+ self.timer.stop()
+
+ def done_left_to_right(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_right_to_left(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_bottom_to_top(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_top_to_bottom(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_return(self):
+ EventMesh.publish("return_prev_screen")
+ def done_click(self):
+ EventMesh.publish("return_prev_screen")
+
+ def btn1_release(self):
+ EventMesh.publish("return_prev_screen")
+
+ def btn8_press(self):
+ EventMesh.publish("return_prev_screen")
+
+
+
+no_sim_power_screen = None
+no_sim_power_screen_title = None
+no_sim_power_screen_label =None
+no_sim_power_screen_comfirm =None
+no_sim_power_screen_cancel = None
+no_sim_power_screen_img = None
+
+#未插卡,长按关机
+class NoSimPowerScreen(Screen):#
+ NAME = "no_sim_power_screen"
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.meta_type = "popup"
+
+ def initialization(self):
+ global no_sim_power_screen,no_sim_power_screen_img,no_sim_power_screen_title,no_sim_power_screen_comfirm,no_sim_power_screen_cancel,no_sim_power_screen_label
+ if no_sim_power_screen == None :
+ no_sim_power_screen = lv.obj()
+ print("no_sim_power_screen")
+ no_sim_power_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_sim_power_screen_title = lv.label(no_sim_power_screen)
+ no_sim_power_screen_title.set_pos(0, 20)
+ no_sim_power_screen_title.set_size(240, 40)
+ no_sim_power_screen_title.set_text("无SIM卡,无法拨打")
+ no_sim_power_screen_title.set_long_mode(lv.label.LONG.WRAP)
+ no_sim_power_screen_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ no_sim_power_screen_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_sim_power_screen_img = lv.img(no_sim_power_screen)
+ no_sim_power_screen_img.set_pos(100, 70)
+ no_sim_power_screen_img.set_size(61, 61)
+ no_sim_power_screen_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ no_sim_power_screen_img.set_src("U:/static/poweroff_icon.png")
+
+
+ no_sim_power_screen_label = lv.label(no_sim_power_screen)
+ no_sim_power_screen_label.set_pos(0, 150)
+ no_sim_power_screen_label.set_size(240, 40)
+ no_sim_power_screen_label.set_text("是否关机?")
+ no_sim_power_screen_label.set_long_mode(lv.label.LONG.WRAP)
+ no_sim_power_screen_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ no_sim_power_screen_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ no_sim_power_screen_comfirm = lv.img(no_sim_power_screen)
+ no_sim_power_screen_comfirm.set_size(176, 46)
+ no_sim_power_screen_comfirm.set_pos(32, 190)
+ no_sim_power_screen_comfirm.set_src("U:/static/off_icon.png")
+ no_sim_power_screen_comfirm.add_flag(lv.obj.FLAG.CLICKABLE)
+ no_sim_power_screen_comfirm.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ poweroff_confirm_label = lv.label(no_sim_power_screen_comfirm)
+ poweroff_confirm_label.set_text("确定")
+ poweroff_confirm_label.align(lv.ALIGN.CENTER, 0, 5)
+ poweroff_confirm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_sim_power_screen_cancel = lv.img(no_sim_power_screen)
+ no_sim_power_screen_cancel.set_size(176, 46)
+ no_sim_power_screen_cancel.set_pos(32, 250)
+ no_sim_power_screen_cancel.set_src("U:/static/cancel_icon.png")
+ no_sim_power_screen_cancel.add_flag(lv.obj.FLAG.CLICKABLE)
+ no_sim_power_screen_cancel.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ poweroff_return_label = lv.label(no_sim_power_screen_cancel)
+ poweroff_return_label.set_text("取消")
+ poweroff_return_label.align(lv.ALIGN.CENTER, 0, 5)
+ poweroff_return_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ no_sim_power_screen_cancel.set_ext_click_area(20)
+
+ self.meta = no_sim_power_screen
+ no_sim_power_screen_comfirm.add_event_cb(lambda e: EventMesh.callback_wrapper(self.confirm(e)),
+ lv.EVENT.CLICKED, None)
+
+ no_sim_power_screen_cancel.add_event_cb(lambda e: EventMesh.callback_wrapper(self.cancel(e)),
+ lv.EVENT.CLICKED, None)
+
+ def confirm(self,e):
+ EventMesh.publish("load_screen", {"screen": "poweroff_comfirm"})
+
+ def cancel(self,e):
+ EventMesh.publish("return_prev_screen")
+
+ def done_left_to_right(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_right_to_left(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_bottom_to_top(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_top_to_bottom(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_return(self):
+ EventMesh.publish("return_prev_screen")
+ def done_click(self):
+ pass
+ #EventMesh.publish("return_prev_screen")
+
+ def btn1_release(self):
+ #EventMesh.publish("return_prev_screen")
+ pass
+
+ def btn8_press(self):
+ EventMesh.publish("return_prev_screen")
+
+dialing_popup_screen = None
+dialing_popup_img = None
+dialing_popup_name = None
+dialing_popup_hangup_imgbtn = None
+class DialingNoPlayPopupScreen(Screen):#正在拨号中...未打出
+ NAME = "dialing_noplay_popup"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.meta_type = "popup"
+ self.timer1 = osTimer()
+ self.time_count = 0
+ self.timer2 = osTimer()
+
+ def initialization(self):
+ EventMesh.publish("set_UI_high_priority", 1)
+ global dialing_popup_screen,dialing_popup_img,dialing_popup_name ,dialing_popup_call,dialing_popup_hangup_imgbtn
+ if dialing_popup_screen == None:
+ dialing_popup_screen = lv.obj()
+ print("dialing_popup_screen")
+ dialing_popup_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ dialing_popup_img = lv.img(dialing_popup_screen)
+ dialing_popup_img.set_pos(80, 20)
+ dialing_popup_img.set_size(64, 64)
+ dialing_popup_img.set_src("U:/static/IMAGE_NOTICE_CALL.png")
+ dialing_popup_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ dialing_popup_name = lv.label(dialing_popup_screen)
+ dialing_popup_name.set_pos(0, 120)
+ dialing_popup_name.set_size(240, 50)
+ dialing_popup_name.set_text(" ")
+ dialing_popup_name.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ dialing_popup_name.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ dialing_popup_call = lv.label(dialing_popup_screen)
+ dialing_popup_call.set_pos(0, 180)
+ dialing_popup_call.set_size(240, 50)
+ dialing_popup_call.set_text("正在拨号中")
+ dialing_popup_call.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ dialing_popup_call.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ dialing_popup_hangup_imgbtn = lv.img(dialing_popup_screen)
+ dialing_popup_hangup_imgbtn.set_size(64, 64)
+ dialing_popup_hangup_imgbtn.set_src("U:/static/hang_up.png")
+ dialing_popup_hangup_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+ dialing_popup_hangup_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ dialing_popup_hangup_imgbtn.set_pos(80, 250)
+ dialing_popup_hangup_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.hangup(e)),
+ lv.EVENT.CLICKED, None)
+ self.meta = dialing_popup_screen
+ if dialing_popup_name != None:
+ name = EventMesh.publish("get_phonename")#获取拨打电话名称
+ dialing_popup_name.set_text(name)#名称
+
+ def post_processor_after_initialization(self):
+ self.time_count = 0
+ self.timer1.start(1000, 1, self.timeout_hangup)
+ self.timer2.start(2000, 0, self.timeout_call)
+
+ def timeout_call(self,e):
+ phone_num = EventMesh.publish("get_phonenum")
+ EventMesh.publish("set_call_state", 1)#
+ voiceCall.callStart(phone_num)
+
+ def timeout_hangup(self,e):
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.time_count+=1
+ if self.time_count >= 5:#5s内没有打通则不在继续拨打关闭
+ self.time_count = 0
+ EventMesh.publish("set_UI_high_priority", 0)
+ sos_flag = EventMesh.publish("get_sos_flag")
+ if sos_flag == 1:
+ EventMesh.publish("set_sos_flag",0)
+ EventMesh.publish("set_sos_num",0)
+ EventMesh.publish("set_hangup_mode",0)
+
+ EventMesh.publish("load_screen", {"screen": "dial_no_connect_popup"})
+
+ def hangup(self,e):
+ EventMesh.publish("set_UI_high_priority", 0)
+ voiceCall.callEnd()
+ sos_flag = EventMesh.publish("get_sos_flag")
+ if sos_flag == 1:
+ EventMesh.publish("set_sos_flag",0)
+ EventMesh.publish("set_sos_num",0)
+ EventMesh.publish("set_hangup_mode",0)
+ EventMesh.publish("return_prev_screen") #返回上一级
+
+ def Close(self):
+ self.timer1.stop()
+ self.timer2.stop()
+
+ def done_return(self):
+ pass
+ #EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ pass
+ #EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ flag = EventMesh.publish("get_lcd_state")
+ if flag == 1:
+ EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)
+ else:
+ EventMesh.publish(constants.EVENT.SYSTEM_UP)
+
+dial_no_connect_popup = None
+dialing_connect_call = None
+class DialNoconnectPopupScreen(Screen):#你所拨打的电话暂时无法接通
+ NAME = "dial_no_connect_popup"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.meta_type = "popup"
+ self.timer = osTimer()
+ self.time_count = 0
+
+ def initialization(self):
+ global dial_no_connect_popup,dialing_connect_call
+ if dial_no_connect_popup == None:
+ dial_no_connect_popup = lv.obj()
+ print("dial_no_connect_popup")
+ dial_no_connect_popup.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ dialing_connect_call = lv.label(dial_no_connect_popup)
+ dialing_connect_call.set_pos(0, 110)
+ dialing_connect_call.set_size(240, 150)
+ dialing_connect_call.set_text("你好,你所拨打的\n电话暂时无法接\n通,请稍后再拨")
+ dialing_connect_call.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ dialing_connect_call.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ self.meta = dial_no_connect_popup
+
+ def post_processor_after_initialization(self):
+ self.time_count = 0
+ self.timer.start(1000, 1, self.timeout_hangup)
+
+ def timeout_hangup(self,e):
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.time_count+=1
+ if self.time_count >= 10:
+ self.time_count = 0
+ EventMesh.publish("return_prev_screen")
+
+ def Close(self):
+ self.timer.stop()
+
+ def done_left_to_right(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_right_to_left(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_bottom_to_top(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_top_to_bottom(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_return(self):
+ EventMesh.publish("return_prev_screen")
+ def done_click(self):
+ EventMesh.publish("return_prev_screen")
+
+ def btn1_release(self):
+ EventMesh.publish("return_prev_screen")
+
+ def btn8_press(self):
+ EventMesh.publish("return_prev_screen")
+
+message_popup_screen = None
+message_popup_title = None
+#信息弹窗
+class NewMessageScreen(Screen):
+ NAME = "message_popup"
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.meta_type = "popup"
+
+ def initialization(self):
+ global message_popup_screen,message_popup_title
+ if message_popup_screen == None :
+ message_popup_screen = lv.obj()
+ print("message_popup_screen")
+ message_popup_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ message_popup_title = lv.label(message_popup_screen)
+ message_popup_title.set_pos(0, 150)
+ message_popup_title.set_size(240, 40)
+ message_popup_title.set_text("你有新的消息")
+ message_popup_title.set_long_mode(lv.label.LONG.WRAP)
+ message_popup_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ message_popup_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.meta = message_popup_screen
+ EventMesh.publish("set_sms_clear_all_data",10)
+
+ def done_left_to_right(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_right_to_left(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_bottom_to_top(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_top_to_bottom(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_return(self):
+ EventMesh.publish("return_prev_screen")
+ def done_click(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+message_full_screen = None
+message_full_label = None
+message_full_confirm = None
+message_full_cancel = None
+#信息弹窗
+class MessageFullScreen(Screen):
+ NAME = "message_full"
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.meta_type = "popup"
+ def initialization(self):
+ global message_full_screen,message_full_label,message_full_confirm,message_full_cancel
+ if message_full_screen == None :
+ message_full_screen = lv.obj()
+ print("message_full_screen")
+ message_full_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ message_full_label = lv.label(message_full_screen)
+ message_full_label.set_pos(0, 100)
+ message_full_label.set_size(240, 40)
+ message_full_label.set_text("信息已满,是否清除所有?")
+ message_full_label.set_long_mode(lv.label.LONG.WRAP)
+ message_full_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ message_full_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ message_full_confirm = lv.label(message_full_screen)
+ message_full_confirm.set_text("确认")
+ message_full_confirm.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ message_full_confirm.set_size(120, 60)
+ message_full_confirm.set_pos(0,180)
+ message_full_confirm.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ message_full_confirm.add_flag(lv.obj.FLAG.CLICKABLE)
+ message_full_confirm.set_ext_click_area(20)
+
+ message_full_cancel = lv.label(message_full_screen)
+ message_full_cancel.set_text("取消")
+ message_full_cancel.set_size(120, 60)
+ message_full_cancel.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ message_full_cancel.set_pos(120,180)
+ message_full_cancel.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ message_full_cancel.add_flag(lv.obj.FLAG.CLICKABLE)
+ message_full_cancel.set_ext_click_area(20)
+ self.meta = message_full_screen
+
+ message_full_confirm.add_event_cb(lambda e: EventMesh.callback_wrapper(self.confirm(e)),lv.EVENT.CLICKED, None)
+ message_full_cancel.add_event_cb(lambda e: EventMesh.callback_wrapper(self.concel(e)),lv.EVENT.CLICKED, None)
+
+
+ def confirm(self, e):
+ # self.timer.start(2*1000,0,self.clear_data)
+ sms.deleteMsg(1,4)
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def concel(self, e):
+ EventMesh.publish("return_prev_screen")
+
+ def done_left_to_right(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_right_to_left(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_bottom_to_top(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_top_to_bottom(self):
+ EventMesh.publish("return_prev_screen")
+
+ def done_return(self):
+ EventMesh.publish("return_prev_screen")
+ def done_click(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+############短信###############################
+MSG_FLAG = 0
+MSG_MAX = 5 #最大显示短信内容条数
+def msg_cb(args):
+ index = args[1]
+ storage = args[2]
+ print("index:{}".format(index))
+ sms_data = sms.getSaveLoc()
+ sms_max = sms_data[0][2]
+ if index != -1:
+ tmp = sms.searchTextMsg(index)
+ detail = tmp[1]#内容
+ print("msg_cb:detail {}".format,detail)
+ if detail.find("SETIP:") != -1:#寻找是否有这个字符串
+ tmp_test = detail.split("SETIP:")[1]
+ if tmp_test.find(":") != -1:
+ new_ip = tmp_test.split(':')[0]
+ # print("tmp_test:{} new_ip:{}".format(tmp_test,new_ip))
+ new_com = tmp_test.split(':')[1]
+ # new_md5 = detail.split(':')[3]
+ if len(new_ip) > 0 and len(new_com) > 0:
+ EventMesh.publish("set_new_ip", [new_ip,new_com,tmp[0]])#设置关机时间
+ # EventMesh.publish("set_new_ip", [new_ip,new_com,new_md5])#设置关机时间
+
+ if index >= sms_max-1:
+ EventMesh.publish("load_screen", {"screen": "message_full"})
+ else:
+ EventMesh.publish("load_screen", {"screen": "message_popup"})
+
+sms.setCallback(msg_cb)
+style_sms_bg_btn = lv.style_t()
+style_sms_bg_btn.init()
+style_sms_bg_btn.set_radius(5)
+style_sms_bg_btn.set_bg_color(lv.color_make(0xff, 0xff, 0xff))
+style_sms_bg_btn.set_bg_grad_color(lv.color_make(0xff, 0xff, 0xff))
+style_sms_bg_btn.set_bg_opa(255)
+style_sms_bg_btn.set_border_color(lv.color_make(0xff, 0xff, 0xff))
+style_sms_bg_btn.set_border_opa(255)
+
+
+msg_list_screen = None
+msg_top_title = None
+msg_cont_detail = None
+msg_list_t = None
+msg_list_t_done_img = None
+no_msg_text = None
+msg_cont_list_screen = None
+
+class PopupScreen(Screen):
+ NAME = "popup"
+
+ def __init__(self):
+ super().__init__()
+ # -------------------------------------------popup_menu screen----------------------------------------------------------
+ self.meta = None
+ self.msg_detail = {}
+ self.msg_nums = 0
+ self.sms_detail_list = None
+ self.sms_detail_list_dict = []
+
+ def post_processor_before_initialization(self):
+ self.msg_nums = sms.getMsgNums() #获取短信条数
+
+ def initialization(self):
+ global msg_list_screen,msg_top_title,msg_cont_detail,msg_list_t,msg_list_t_done_img,no_msg_text,msg_cont_list_screen
+ print("PopupScreen:initialization1")
+ if msg_list_screen == None :
+ msg_list_screen = lv.obj()
+ print("msg_list_screen")
+ msg_list_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ msg_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+ msg_top_title = lv.label(msg_list_screen)
+ msg_top_title.set_pos(0, 10)
+ msg_top_title.set_size(240, 40)
+ msg_top_title.set_text("信息")
+ msg_top_title.set_long_mode(lv.label.LONG.WRAP)
+ msg_top_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ msg_top_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ msg_cont_list_screen = lv.obj(msg_list_screen)
+ msg_cont_list_screen.set_pos(0, 50)
+ msg_cont_list_screen.set_size(240, 270)
+ msg_cont_list_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ msg_cont_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ msg_list_t_done_img = lv.img(msg_cont_list_screen)
+ msg_list_t_done_img.set_pos(53, 20)
+ msg_list_t_done_img.set_size(134, 117)
+ msg_list_t_done_img.set_src("U:/static/IMAGE_NOTICE_NONE.png")
+ msg_list_t_done_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_msg_text = lv.label(msg_cont_list_screen)
+ no_msg_text.set_pos(0, 210)
+ no_msg_text.set_size(240, 40)
+ no_msg_text.set_text("暂无信息")
+ no_msg_text.set_long_mode(lv.label.LONG.WRAP)
+ no_msg_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ no_msg_text.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ self.sms_detail_list = lv.obj(msg_cont_list_screen)
+ self.sms_detail_list.set_pos(0, 0)
+ self.sms_detail_list.set_size(230, 271)
+ self.sms_detail_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ self.sms_detail_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ for i in range(MSG_MAX):
+ msg_btn = lv.btn(self.sms_detail_list)
+ msg_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.sms_cb(e)),
+ lv.EVENT.CLICKED, None)
+ msg_btn.add_flag(lv.obj.FLAG.HIDDEN)
+ _btn_label2 = lv.label(msg_btn)
+ _btn_label3 = lv.label(msg_btn)
+ _btn_label4 = lv.label(msg_btn)
+ _btn_label5 = lv.label(msg_btn)
+ self.sms_detail_list_dict.append({"msg_btn":msg_btn,"_btn_label2":_btn_label2,"_btn_label3":_btn_label3,
+ "_btn_label4":_btn_label4,"_btn_label5":_btn_label5})
+ self.meta = msg_list_screen
+
+
+ self.msg_nums = sms.getMsgNums()
+ # print("self.msg_nums:{} type:{}".format(self.msg_nums,type(sms.getMsgNums())))
+ self.btn_create(1)
+ print("PopupScreen:initialization2")
+ def sms_create_list(self,event,msg):
+ self.msg_nums = sms.getMsgNums()
+ self.btn_create(1)
+
+
+ def btn_create(self,msg):
+ EventMesh.publish("publish_message_event_ui",{"func":self.btn_create_screen,"data":msg})
+
+ def btn_create_screen(self,msg):
+ global msg_list_screen,msg_top_title,msg_cont_detail,msg_list_t,msg_list_t_done_img,no_msg_text,msg_cont_list_screen
+ count = 0
+ j = 0
+ print("self.msg_nums:{}".format(self.msg_nums))
+ if self.msg_nums > 0 :
+
+ msg_list_t_done_img.add_flag(lv.obj.FLAG.HIDDEN)
+ no_msg_text.add_flag(lv.obj.FLAG.HIDDEN)
+ self.sms_detail_list.clear_flag(lv.obj.FLAG.HIDDEN)
+ # self.sms_detail_list.delete()#先删除一次控件
+ # self.sms_detail_list = lv.obj(msg_cont_list_screen)
+ # self.sms_detail_list.set_pos(0, 0)
+ # self.sms_detail_list.set_size(230, 271)
+ # self.sms_detail_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ # self.sms_detail_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ if self.msg_nums > MSG_MAX:
+ j = self.msg_nums-MSG_MAX
+ for i in range(MSG_MAX):
+ # if count > (MSG_MAX-1):#j = 12 -5 7 6 5 4 3 2 1
+ # break
+ if i >= self.msg_nums :
+ self.sms_detail_list_dict[i]["msg_btn"].add_flag(lv.obj.FLAG.HIDDEN)
+ continue
+ tmp = sms.searchTextMsg(j)
+ if tmp != -1:
+ #msg_btn = lv.btn(self.sms_detail_list)
+ self.sms_detail_list_dict[i]["msg_btn"].set_size(230,65)
+ self.sms_detail_list_dict[i]["msg_btn"].set_pos(0,67*count)
+ self.sms_detail_list_dict[i]["msg_btn"].add_style(style_sms_bg_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+ # self.sms_detail_list_dict[i]["msg_btn"].add_event_cb(lambda e: EventMesh.callback_wrapper(self.sms_cb(e)),
+ # lv.EVENT.CLICKED, None)
+
+ title = tmp[0]
+ # print("title:{}".format(title))
+ #_btn_label2 = lv.label(msg_btn)
+ self.sms_detail_list_dict[i]["_btn_label2"].set_pos(0, 0)
+ self.sms_detail_list_dict[i]["_btn_label2"].set_size(0, 0)
+ self.sms_detail_list_dict[i]["_btn_label2"].set_text(title)
+ # _btn_label2.set_long_mode(lv.label.LONG.DOT)
+ # _btn_label2.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+ #
+ detail = tmp[1]
+ #_btn_label3 = lv.label(msg_btn)
+ self.sms_detail_list_dict[i]["_btn_label3"].set_pos(0, 0)
+ self.sms_detail_list_dict[i]["_btn_label3"].set_size(0, 0)
+ self.sms_detail_list_dict[i]["_btn_label3"].set_text(detail)
+ # _btn_label3.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ detail1 = tmp[1]
+ #_btn_label4 = lv.label(msg_btn)
+ self.sms_detail_list_dict[i]["_btn_label4"].set_pos(0, 34)
+ self.sms_detail_list_dict[i]["_btn_label4"].set_size(180, 28)
+ self.sms_detail_list_dict[i]["_btn_label4"].set_text(detail1)
+ self.sms_detail_list_dict[i]["_btn_label4"].set_long_mode(lv.label.LONG.DOT)
+ self.sms_detail_list_dict[i]["_btn_label4"].add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ title1 = tmp[0]
+ #_btn_label5 = lv.label(msg_btn)
+ self.sms_detail_list_dict[i]["_btn_label5"].set_pos(0, 5)
+ self.sms_detail_list_dict[i]["_btn_label5"].set_size(180, 25)
+ self.sms_detail_list_dict[i]["_btn_label5"].set_text(title1)
+ self.sms_detail_list_dict[i]["_btn_label5"].set_long_mode(lv.label.LONG.DOT)
+ self.sms_detail_list_dict[i]["_btn_label5"].add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ self.sms_detail_list_dict[i]["msg_btn"].clear_flag(lv.obj.FLAG.HIDDEN)
+ #if msg == 1:
+ self.sms_detail_list_dict[i]["msg_btn"].scroll_to_view(lv.ANIM.OFF)
+
+ count = count + 1
+ else :
+ self.sms_detail_list_dict[i]["msg_btn"].add_flag(lv.obj.FLAG.HIDDEN)
+ j = j + 1
+
+
+ else:
+ if msg_cont_list_screen != None:
+ msg_list_t_done_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ no_msg_text.clear_flag(lv.obj.FLAG.HIDDEN)
+ no_msg_text.set_text("暂无信息")
+ self.sms_detail_list.add_flag(lv.obj.FLAG.HIDDEN)
+
+
+ def sms_cb(self,e):
+ code = e.get_code()
+ if code == lv.EVENT.CLICKED:
+ print("tp test!!!!!!!!!!!!!!")
+ #上传标题和内容
+ _name = e.get_target().get_child(0).get_text()
+ EventMesh.publish("save_msg_name", _name)
+ content = e.get_target().get_child(1).get_text()
+ EventMesh.publish("save_msg_content", content)
+
+ #显示详细页面
+ EventMesh.publish("load_screen", {"screen": "msg_detail"})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+
+msg_detail_screen = None
+msg_detail_title = None
+msg_detail_cont = None
+class MsgDetailScreen(Screen):
+ NAME = "msg_detail"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+
+ self.name = ""
+ self.contetn = ""
+
+
+ def initialization(self):
+ global msg_detail_screen,msg_detail_title,msg_detail_cont
+ if msg_detail_screen == None:
+ msg_detail_screen = lv.obj()
+ print("msg_detail_screen")
+ msg_detail_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ msg_detail_title = lv.label(msg_detail_screen)
+ msg_detail_title.set_pos(0, 10)
+ msg_detail_title.set_size(240, 40)
+ msg_detail_title.set_long_mode(lv.label.LONG.WRAP)
+ msg_detail_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ msg_detail_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ msg_detail_cont = lv.label(msg_detail_screen)
+ msg_detail_cont.set_pos(0, 50)
+ msg_detail_cont.set_size(240, 270)
+ msg_detail_cont.set_long_mode(lv.label.LONG.WRAP)
+ msg_detail_cont.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+ msg_detail_cont.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.meta = msg_detail_screen
+ #获取字符串
+ self.name = EventMesh.publish("get_msg_name")
+ self.content = EventMesh.publish("get_msg_content")
+ msg_detail_title.set_text(self.name)
+ msg_detail_cont.set_text(self.content)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def hangup(self,e):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+
+
+# -------------------------------------------heartrate screen----------------------------------------------------------
+heartrate_screen = None
+heartrate_label = None
+heartrate_done_img = None
+heartrate_start_label = None
+heartrate_bpm_label = None
+heartrate_done_label = None
+heartrate_line_bg_img = None
+hr_line1 = None
+hr_line2 = None
+hr_line3 = None
+hr_line4 = None
+hr_line5 = None
+hr_line6 = None
+hr_line7 = None
+heartrate_reset_btn_img = None
+
+style_line_red = lv.style_t()
+style_line_red.init()
+style_line_red.set_line_width(10)
+style_line_red.set_line_color(lv.color_make(0xff, 0x00, 0x00))
+
+hr_line_points = [{"x":0,"y":0},{"x":0,"y":0}]
+
+class HeartrateScreen(Screen):
+ NAME = "heartrate"
+
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.timer = osTimer()
+ self.point = 0
+ self.heart_value = 0
+
+ def initialization(self):
+ global heartrate_screen,heartrate_label,heartrate_reset_btn_img,hr_line1,hr_line2,hr_line3,hr_line4,hr_line5,hr_line6,hr_line7,heartrate_line_bg_img,heartrate_done_img ,heartrate_start_label,heartrate_bpm_label ,heartrate_done_label
+ if heartrate_screen == None:
+ heartrate_screen = lv.obj()
+ print("heartrate_screen")
+ heartrate_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ heartrate_label = lv.label(heartrate_screen)
+ heartrate_label.set_pos(0, 20)
+ heartrate_label.set_size(240, 40)
+ heartrate_label.set_text("心率")
+ heartrate_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0)
+ heartrate_label.set_long_mode(lv.label.LONG.WRAP)
+ heartrate_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ heartrate_line_bg_img = lv.img(heartrate_screen)
+ heartrate_line_bg_img.set_pos(5, 60)
+ heartrate_line_bg_img.set_size(230, 120)
+ heartrate_line_bg_img.set_src("U:/static/hr_line_bg.png")
+
+
+ heartrate_done_img = lv.img(heartrate_screen)
+ heartrate_done_img.set_pos(20, 249)
+ heartrate_done_img.set_src("U:/static/hr_gif_03.png")
+
+ heartrate_reset_btn_img = lv.img(heartrate_screen)
+ heartrate_reset_btn_img.set_pos(0, 192)
+ heartrate_reset_btn_img.set_src("U:/static/reset_hr_btn.png")
+ heartrate_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN)
+ heartrate_reset_btn_img.add_flag(lv.obj.FLAG.CLICKABLE)
+
+ heartrate_start_label = lv.label(heartrate_screen)
+ heartrate_start_label.set_size(240,40)
+ heartrate_start_label.set_pos(0,200)
+ heartrate_start_label.set_text(" ")
+ heartrate_start_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0)
+ heartrate_start_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ heartrate_start_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+
+
+ hr_line1 = lv.line(heartrate_screen)
+ hr_line1.set_points(hr_line_points,2)
+ hr_line1.set_pos(25,60)
+ hr_line1.set_size(10,0)
+ hr_line1.add_style(style_line_red,0)
+
+ hr_line2 = lv.line(heartrate_screen)
+ hr_line2.set_points(hr_line_points,2)
+ hr_line2.set_pos(53,60)
+ hr_line2.set_size(10,0)
+ hr_line2.add_style(style_line_red,0)
+
+ hr_line3 = lv.line(heartrate_screen)
+ hr_line3.set_points(hr_line_points,2)
+ hr_line3.set_pos(80,60)
+ hr_line3.set_size(10,0)
+ hr_line3.add_style(style_line_red,0)
+
+ hr_line4 = lv.line(heartrate_screen)
+ hr_line4.set_points(hr_line_points,2)
+ hr_line4.set_pos(109,60)
+ hr_line4.set_size(10,0)
+ hr_line4.add_style(style_line_red,0)
+
+ hr_line5 = lv.line(heartrate_screen)
+ hr_line5.set_points(hr_line_points,2)
+ hr_line5.set_pos(136,60)
+ hr_line5.set_size(10,0)
+ hr_line5.add_style(style_line_red,0)
+
+ hr_line6 = lv.line(heartrate_screen)
+ hr_line6.set_points(hr_line_points,2)
+ hr_line6.set_pos(164,60)
+ hr_line6.set_size(10,0)
+ hr_line6.add_style(style_line_red,0)
+
+ hr_line7 = lv.line(heartrate_screen)
+ hr_line7.set_points(hr_line_points,2)
+ hr_line7.set_pos(192,60)
+ hr_line7.set_size(10,0)
+ hr_line7.add_style(style_line_red,0)
+
+ heartrate_bpm_label = lv.label(heartrate_screen)
+ heartrate_bpm_label.set_size(120, 40)
+ heartrate_bpm_label.set_pos(120, 270)
+ heartrate_bpm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ heartrate_bpm_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+
+ heartrate_done_label = lv.label(heartrate_screen)
+ heartrate_done_label.set_size(240, 40)
+ heartrate_done_label.set_pos(0, 270)
+ heartrate_done_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ heartrate_done_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ heartrate_done_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+
+ self.meta = heartrate_screen
+ heartrate_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)),
+ lv.EVENT.CLICKED, None)
+ heartrate_done_label.set_text(" ")
+ heartrate_bpm_label.set_text("-- bpm")
+ heartrate_start_label.set_text("正在测量中.")
+ EventMesh.publish("set_hr_state",1)#1代表手动进入测试界面
+
+ EventMesh.publish(constants.EVENT.START_HEART)
+
+ def post_processor_after_initialization(self):
+ self.point = 0
+ self.heart_value = 0
+ self.show_history_data()
+ self.restart_up(0)
+
+ def restart_up(self,e):
+ global heartrate_done_label,heartrate_bpm_label,heartrate_start_label,heartrate_reset_btn_img
+ self.timer.start(1*500, 1, self.start_measure)
+ heartrate_bpm_label.set_text("-- bpm")
+ if heartrate_reset_btn_img != None:
+ heartrate_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN)
+ self.point = 0
+ self.heart_value = 0
+
+ heartrate_done_label.set_text(" ")
+ heartrate_bpm_label.set_text("-- bpm")
+ heartrate_start_label.set_text("正在测量中.")
+ EventMesh.publish("set_hr_state",1)#1代表手动进入测试界面
+
+ EventMesh.publish(constants.EVENT.START_HEART)
+
+ def show_history_data(self):
+ global hr_line1,hr_line2,hr_line3,hr_line4,hr_line5,hr_line6,hr_line7
+ read_data = {}
+ read_data = EventMesh.publish("get_history_hr_value")
+ print("hr history read_data",read_data)
+ if read_data != None:
+ count = len(read_data)
+ if count != 0:
+ if count >= 7:
+ for i in range(count):
+ value = read_data["0{}".format(i+1)]
+ if value < 30:
+ value = 30
+ if value >= 210:
+ value = 210
+ line_value = value - 30 #180-80 = 100 160-100 = 60
+ line_value = int(line_value*0.58)+1
+ if line_value >= 100:
+ line_value = 100
+ #print("hr hist",line_value)
+ hr_line_points = [{"x":0,"y":0},{"x":0,"y":line_value}]
+ if i == 0:
+ hr_line1.set_points(hr_line_points,2)
+ hr_line1.set_pos(25,160-line_value)
+ hr_line1.set_size(10,line_value)
+ if i == 1:
+ hr_line2.set_points(hr_line_points,2)
+ hr_line2.set_pos(53,160-line_value)
+ hr_line2.set_size(10,line_value)
+
+ if i == 2:
+ hr_line3.set_points(hr_line_points,2)
+ hr_line3.set_pos(80,160-line_value)
+ hr_line3.set_size(10,line_value)
+
+ if i == 3:
+ hr_line4.set_points(hr_line_points,2)
+ hr_line4.set_pos(109,160-line_value)
+ hr_line4.set_size(10,line_value)
+
+ if i == 4:
+ hr_line5.set_points(hr_line_points,2)
+ hr_line5.set_pos(136,160-line_value)
+ hr_line5.set_size(10,line_value)
+
+ if i == 5:
+ hr_line6.set_points(hr_line_points,2)
+ hr_line6.set_pos(164,160-line_value)
+ hr_line6.set_size(10,line_value)
+
+ if i == 6:
+ hr_line7.set_points(hr_line_points,2)
+ hr_line7.set_pos(192,160-line_value)
+ hr_line7.set_size(10,line_value)
+ else:
+ value = read_data["0{}".format(count)]
+ if value < 30:
+ value = 30
+ if value >= 180:
+ value = 180
+ line_value = value - 30 #180-80 = 100 160-100 = 60
+ line_value = int(line_value*0.58)+1
+ #
+ hr_line_points = [{"x":0,"y":0},{"x":0,"y":line_value}]
+ if count == 1:
+ hr_line1.set_points(hr_line_points,2)
+ hr_line1.set_pos(25,160-line_value)
+ hr_line1.set_size(10,line_value)
+ if count == 2:
+ hr_line2.set_points(hr_line_points,2)
+ hr_line2.set_pos(53,160-line_value)
+ hr_line2.set_size(10,line_value)
+
+ if count == 3:
+ hr_line3.set_points(hr_line_points,2)
+ hr_line3.set_pos(80,160-line_value)
+ hr_line3.set_size(10,line_value)
+
+ if count == 4:
+ hr_line4.set_points(hr_line_points,2)
+ hr_line4.set_pos(109,160-line_value)
+ hr_line4.set_size(10,line_value)
+
+ if count == 5:
+ hr_line5.set_points(hr_line_points,2)
+ hr_line5.set_pos(136,160-line_value)
+ hr_line5.set_size(10,line_value)
+
+ if count == 6:
+ hr_line6.set_points(hr_line_points,2)
+ hr_line6.set_pos(164,160-line_value)
+ hr_line6.set_size(10,line_value)
+
+ if count == 7:
+ hr_line7.set_points(hr_line_points,2)
+ hr_line7.set_pos(192,160-line_value)
+ hr_line7.set_size(10,line_value)
+
+
+ def start_measure(self,*args):
+ global heartrate_screen,heartrate_label,heartrate_done_img ,heartrate_reset_btn_img,heartrate_start_label,heartrate_bpm_label ,heartrate_done_label
+ self.point = self.point + 1
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ print("self.heart_value:{}".format(self.heart_value))
+ if self.point >= 2:
+ if self.heart_value < 40:
+ self.heart_value = 0
+ if self.heart_value != 0:
+ heartrate_bpm_label.set_text("{} bpm".format(self.heart_value))
+ else:
+ heartrate_bpm_label.set_text("-- bpm")
+
+ if self.point%4 == 0 :
+ heartrate_start_label.set_text("正在测量中..")
+ heartrate_done_img.set_src("U:/static/hr_gif_02.png")
+ if self.point%4 == 1 :
+ heartrate_start_label.set_text("正在测量中...")
+ heartrate_done_img.set_src("U:/static/hr_gif_01.png")
+ if self.point%4 == 2 :
+ heartrate_start_label.set_text("正在测量中.")
+ heartrate_done_img.set_src("U:/static/hr_gif_02.png")
+
+ if self.point%4 == 3 :
+ heartrate_start_label.set_text("正在测量中.")
+ heartrate_done_img.set_src("U:/static/hr_gif_03.png")
+
+
+
+ if self.point > 120: #测20s
+ heartrate_done_img.set_src("U:/static/hr_gif_03.png")
+ self.heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ EventMesh.publish("set_old_hr_data",self.heart_value)
+ if self.heart_value > 50:
+
+ EventMesh.publish("set_history_hr_value",self.heart_value)
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,self.heart_value)
+ heartrate_reset_btn_img.clear_flag(lv.obj.FLAG.HIDDEN)
+
+ heartrate_start_label.set_text("测量结束,点击重测")
+ if self.heart_value != 0:
+ heartrate_bpm_label.set_text("{} bpm".format(self.heart_value))
+ # heartrate_done_label.set_text("测量完成")
+ else:
+ heartrate_bpm_label.set_text("-- bpm")
+
+ self.show_history_data()
+
+ self.timer.stop()
+ self.point = 0
+ EventMesh.publish("set_hr_state",0)#0代表关闭测试
+ print("stop debug9")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+
+ def Close(self):
+ self.timer.stop()
+ get_hr_state = EventMesh.publish("get_hr_state")
+ get_spo2_state = EventMesh.publish("get_spo2_state")
+ if get_hr_state == 1 or get_spo2_state == 1:
+ EventMesh.publish("set_hr_state",0)#0代表关闭测试
+ print("stop debug10")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "health"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "health"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+# -------------------------------------------toolbox screen----------------------------------------------------------
+
+toolbox_screen = None
+toolbox_text_img = None
+toolbox_cont = None
+toolbox_step_img = None
+toolbox_weather_img = None
+toolbox_alarm_img = None
+# toolbox_sms_img = None
+toolbox_countdown_img = None
+toolbox_stopwatch_img = None
+
+toolbox_cont_style = lv.style_t()
+toolbox_cont_style.init()
+toolbox_cont_style.set_radius(0)
+toolbox_cont_style.set_bg_color(lv.color_make(0x00, 0x00, 0x00))
+toolbox_cont_style.set_bg_grad_color(lv.color_make(0x00, 0x00, 0x00))
+toolbox_cont_style.set_bg_grad_dir(lv.GRAD_DIR.VER)
+toolbox_cont_style.set_bg_opa(255)
+toolbox_cont_style.set_border_width(0)
+toolbox_cont_style.set_pad_left(0)
+toolbox_cont_style.set_pad_right(0)
+toolbox_cont_style.set_pad_top(0)
+toolbox_cont_style.set_pad_bottom(0)
+
+class ToolboxScreen(Screen):
+ NAME = "toolbox"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+
+ def initialization(self):
+ global toolbox_screen,toolbox_text_img,toolbox_cont,toolbox_step_img,toolbox_weather_img ,toolbox_alarm_img ,\
+ toolbox_countdown_img,toolbox_stopwatch_img
+ if toolbox_screen == None:
+ tool_set_y = 0
+ toolbox_screen = lv.obj()
+ print("toolbox_screen")
+ toolbox_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ toolbox_screen.set_scrollbar_mode(0)
+
+ toolbox_text_img = lv.img(toolbox_screen)
+ toolbox_text_img.set_pos(75, 10)
+ toolbox_text_img.set_size(90, 30)
+ toolbox_text_img.set_src("U:/static/tool/tool_text.png")
+ toolbox_text_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ toolbox_cont = lv.obj(toolbox_screen)
+ toolbox_cont.set_pos(0, 50)
+ toolbox_cont.set_size(240, 270)
+ toolbox_cont.add_style(toolbox_cont_style,lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ toolbox_step_img = lv.img(toolbox_cont)
+ toolbox_step_img.set_pos(4, tool_set_y)
+ toolbox_step_img.set_size(232, 80)
+ toolbox_step_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_step_img.set_src("U:/static/tool/IMAGE_SECMENU_STEP.png")
+ toolbox_step_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ tool_set_y+=90
+
+ toolbox_weather_img = lv.img(toolbox_cont)
+ toolbox_weather_img.set_pos(4, tool_set_y)
+ toolbox_weather_img.set_size(232, 80)
+ toolbox_weather_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_weather_img.set_src("U:/static/tool/IMAGE_SECMENU_WEATHER.png")
+ toolbox_weather_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ tool_set_y+=90
+ toolbox_alarm_img = lv.img(toolbox_cont)
+ toolbox_alarm_img.set_pos(4, tool_set_y)
+ toolbox_alarm_img.set_size(232, 80)
+ toolbox_alarm_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_alarm_img.set_src("U:/static/tool/IMAGE_SECMENU_ALARM.png")
+ toolbox_alarm_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ # tool_set_y+=90
+ # toolbox_sms_img = lv.img(toolbox_cont)
+ # toolbox_sms_img.set_pos(4, tool_set_y)
+ # toolbox_sms_img.set_size(232, 80)
+ # toolbox_sms_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ # toolbox_sms_img.set_src("U:/static/tool/sms_setting.png")
+ # toolbox_sms_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ tool_set_y+=90
+ toolbox_countdown_img = lv.img(toolbox_cont)
+ toolbox_countdown_img.set_pos(4, tool_set_y)
+ toolbox_countdown_img.set_size(232, 80)
+ toolbox_countdown_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_countdown_img.set_src("U:/static/tool/IMAGE_SECMENU_COUNTDOWN.png")
+ toolbox_countdown_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ tool_set_y+=90
+ toolbox_stopwatch_img = lv.img(toolbox_cont)
+ toolbox_stopwatch_img.set_pos(4, tool_set_y)
+ toolbox_stopwatch_img.set_size(232, 80)
+ toolbox_stopwatch_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_stopwatch_img.set_src("U:/static/tool/IMAGE_SECMENU_STOPWATCH.png")
+ toolbox_stopwatch_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ toolbox_step_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "step"})), lv.EVENT.CLICKED, None)
+ toolbox_weather_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "weather"})), lv.EVENT.CLICKED, None)
+ toolbox_alarm_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "clk_list"})), lv.EVENT.CLICKED, None)
+ # toolbox_sms_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "popup"})), lv.EVENT.CLICKED, None)
+ toolbox_countdown_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "countdown"})), lv.EVENT.CLICKED, None)
+ toolbox_stopwatch_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "stopwatch"})), lv.EVENT.CLICKED, None)
+ self.meta = toolbox_screen
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+incoming_call_screen = None
+incoming_call_img = None
+incoming_call_name_label = None
+incoming_call_answer = None
+incoming_call_hangup = None
+# CALL_LOG_MAX = 50
+class IncomingCallScreen(Screen):
+ NAME = "incoming_call"
+
+ def __init__(self):
+ super().__init__()
+ self.CALL_LOG_MAX = CALL_LOG_MAX
+ self.read_data = {}
+ self.volum_size = 8
+ check_volum = ql_fs.path_exists("/usr/static/storage_file/config.json")
+ if check_volum == True :
+ with open("/usr/static/storage_file/config.json","r") as fd:#音频文件编号
+ self.read_data = ujson.load(fd)
+ if self.read_data != {}:
+ b = str("volum") in self.read_data.keys()
+ if b == True:
+ self.volum_size = self.read_data["volum"]
+ else:
+ self.volum_size = 8
+ else:
+ self.volum_size = 8
+ else:
+ self.volum_size = 8
+ self.aud = audio.Audio(0)
+ self.aud.set_pa(Pin.GPIO29)
+ self.aud.setVolume(11)
+ self.call_timer = osTimer()
+ self.name = None
+ self.phonebook = {}
+ self.pro_state = 0
+ self.meta = None
+
+
+ self.call_log = {}
+ self.call_log_value = {}
+ self.read_call_log = {}
+ self.number_tmp = {}
+
+ def initialization(self):
+ global incoming_call_screen,incoming_call_img,incoming_call_name_label,incoming_call_answer ,incoming_call_hangup
+ if incoming_call_screen == None :
+ # -------------------------------------------incoming_call screen----------------------------------------------------------
+ incoming_call_screen = lv.obj()
+ print("incoming_call_screen")
+ incoming_call_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ incoming_call_img = lv.img(incoming_call_screen)
+ incoming_call_img.set_pos(80, 20)
+ incoming_call_img.set_size(64, 64)
+ incoming_call_img.set_src("U:/static/IMAGE_NOTICE_CALL.png")
+ incoming_call_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ incoming_call_name_label = lv.label(incoming_call_screen)
+ incoming_call_name_label.set_pos(0, 140)
+ incoming_call_name_label.set_text(" ")
+ incoming_call_name_label.set_size(240, 50)
+ incoming_call_name_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ incoming_call_name_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ incoming_call_answer = lv.img(incoming_call_screen)
+ incoming_call_answer.set_size(64, 64)
+ incoming_call_answer.add_flag(lv.obj.FLAG.CLICKABLE)
+ incoming_call_answer.set_pos(30, 220)
+ incoming_call_answer.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ incoming_call_answer.set_src("U:/static/answer.png")
+
+ incoming_call_hangup = lv.img(incoming_call_screen)
+ incoming_call_hangup.set_size(64, 64)
+ incoming_call_hangup.add_flag(lv.obj.FLAG.CLICKABLE)
+ incoming_call_hangup.set_pos(150, 220)
+ incoming_call_hangup.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ incoming_call_hangup.set_src("U:/static/hang_up.png")
+ incoming_call_answer.add_event_cb(lambda e: EventMesh.callback_wrapper(self.answer(e)),
+ lv.EVENT.CLICKED, None)
+ incoming_call_hangup.add_event_cb(lambda e: EventMesh.callback_wrapper(self.hangup(e)),
+ lv.EVENT.CLICKED, None)
+ self.meta = incoming_call_screen
+ EventMesh.publish("set_UI_high_priority", 1)
+
+
+ def post_processor_after_initialization(self):
+ global incoming_call_screen,incoming_call_img,incoming_call_name_label,incoming_call_answer ,incoming_call_hangup
+ utime.sleep_ms(200)#不加延时会切屏
+ data = EventMesh.publish("get_phonebook_list")
+ if data != None:
+ check = data[0]
+ self.phonebook = data[1]
+ if check == 1:#先检查通讯录
+ phonebook_keys = sorted(self.phonebook.keys())
+ b = self.meta_info in self.phonebook.values()#查找key中是否包含content电话号码 True 包含在里面 False不包含在里面
+ j = 0
+ if b == True:
+ for i in range(len(self.phonebook)): #字典 key value
+ #'001:邓雪英':15521469561
+ name = self.phonebook[phonebook_keys[j]]
+ name_value = phonebook_keys[j]
+ number_tmp = str(self.meta_info)
+ # print("name :{} number_tmp:{}".format(name,number_tmp))
+ if name.find(number_tmp) != -1:#查找电话号码是否在通讯录里面
+ number_f= name_value
+ name_s = number_f.split(':')
+ name_s = name_s[1]
+ self.name = name_s
+ self.pro_state = 1
+ break
+ j+=1
+ else:
+ self.name = str(self.meta_info)
+ self.pro_state = 0
+ else:
+ self.name = str(self.meta_info)
+ self.pro_state = 0
+
+ read_call_log = EventMesh.publish("get_call_log_list")
+ check_call_log_json = read_call_log[0]
+ self.read_call_log = read_call_log[1]
+ if self.pro_state == 0 and check_call_log_json == 1:#电话本没有就在通话记录查找电话号码并且文件存在是查找
+
+ sort_tmp = self.read_call_log.values()
+ for sort_new_tmp in sort_tmp: #字典 key value
+ number = sort_new_tmp["number"]
+ find_ok = self.meta_info in number
+ # print("find_ok:{} sort_tmp :{} self.meta_info:{}\r\n".format(find_ok,number,self.meta_info))
+ if find_ok == True:
+ name_value = sort_new_tmp["name"]#查找到相同的电话号码就退出break
+ self.name = name_value
+ break
+
+ if self.name == None:
+ self.name = str(self.meta_info)
+
+ # incoming_call_label.set_text(str(self.meta_info))
+ incoming_call_name_label.set_text(self.name)
+ EventMesh.publish("save_phonename",self.name)
+ time = EventMesh.publish("screen_get_time")#获取系统时间
+
+ # ["15692025051","2","12:59","哥gdh符合双方和开发商开发好看的思考"],
+ # 格式:{"电话号码":{"timesec":'时间戳',"number":'电话号码',"name":'名字',"time":'时间',"count":'通话次数'}}
+ self.num = 0
+
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ # print("time_tmp:{}".format(time_tmp))
+ read_call_log = EventMesh.publish("get_call_log_list")
+ check_json = read_call_log[0]
+
+ if check_json == True:
+ self.read_call_log = read_call_log[1]
+ print("读取通话记录")
+ b = str(self.meta_info) in self.read_call_log.keys()#查找key中是否包含content电话号码 True 包含在里面 False不包含在里面
+
+ if b == True:#查找是否有相同的电话号码 有就直接读出来的次数上加一 没有则从1开始加起
+ number_tmp = {}
+ number_tmp = self.read_call_log[str(self.meta_info)] #通话次数加一
+ num_tmp_t = number_tmp["count"]#读取本地保存的通话次数
+ else :
+ num_tmp_t = 0
+ self.num = num_tmp_t
+ else:
+ self.num = 0 #通话次数
+
+ sort_tmp = {}
+ sort_tmp = self.read_call_log.values()
+ sort_new = {}
+ sort_new = sorted(sort_tmp, key = lambda i: i['timesec'],reverse = True)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条
+ i = 0
+ if len(self.read_call_log) >= self.CALL_LOG_MAX:
+ for sort_new_tmp in sort_new: #字典 key value
+ i+=1 # 1
+ if i >= self.CALL_LOG_MAX:#大于50条把最后一条删除掉只保留前面50调最新的数据
+ key_tmp = sort_new_tmp["number"]
+ del self.read_call_log[key_tmp]
+
+ tmp = {}
+ self.num = self.num +1
+ if self.num > 99:
+ self.num = 99
+ tmp["count"]= self.num #通话次数
+ tmp["time"]= "{}:{}".format("%02d"%(time[0][0]),"%02d"%(time[0][1]))#通话时间
+ tmp["name"]= self.name #名称
+ tmp["timesec"]= time_tmp #时间戳
+ tmp["number"] = self.meta_info
+
+ self.read_call_log[self.meta_info] = tmp
+ with open("/usr/static/storage_file/Call_log.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_call_log,fd)
+ print("创建通话记录")
+ EventMesh.publish("set_call_log_list", [1,self.read_call_log])
+ EventMesh.publish("call_log_update_show_list")
+
+ self.call_timer.start(6000, 1, self.call_timer_cb)
+ self.aud.play(1, 1, 'U:/static/R_CALL_mp3.mp3') #播放来电铃声
+
+ def call_timer_cb(self,e):
+ self.aud.play(1, 1, 'U:/static/R_CALL_mp3.mp3') #播放来电铃声
+
+ def answer(self,e):
+ self.call_timer.stop()
+ self.aud.stop()
+ EventMesh.publish("set_UI_high_priority", 0)
+ voiceCall.callAnswer()
+
+ def Close(self):
+ self.call_timer.stop()
+ self.aud.stop()
+
+ def hangup(self,e):
+ EventMesh.publish("set_UI_high_priority", 0)
+ self.aud.stop()
+ self.call_timer.stop()
+ voiceCall.callEnd()
+
+
+ def btn1_release(self):
+ pass
+
+ def btn8_press(self):
+ flag = EventMesh.publish("get_lcd_state")
+ if flag == 1:
+ EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)
+ else:
+ EventMesh.publish(constants.EVENT.SYSTEM_UP)
+ pass
+
+ def done_left_to_right(self):
+ pass
+
+ def done_right_to_left(self):
+ pass
+
+ def done_bottom_to_top(self):
+ pass
+
+ def done_top_to_bottom(self):
+ pass
+
+ def done_return(self):
+ pass
+
+
+on_call_screen = None
+on_call_obj =None
+on_call_label_name = None
+on_call_second_label = None
+on_call_volum_label = None
+on_call_tab_label = None
+on_call_hangup = None
+on_call_bar = None
+on_call_volum_reduce = None
+on_call_volum_add = None
+on_call_phone_one = None
+on_call_phone_two = None
+on_call_phone_three = None
+on_call_phone_four = None
+on_call_phone_five = None
+on_call_phone_six = None
+on_call_phone_seven = None
+on_call_phone_eight = None
+on_call_phone_nine = None
+on_call_phone_start = None
+on_call_phone_zero = None
+on_call_screen_tab = None
+on_call_phone_hash = None
+on_call_phone_return =None
+on_call_screen_tab_label =None
+on_call_phone_return_btn = None
+ON_CALL_MAX_DATA = 9
+class OnCallScreen(Screen):
+ NAME = "on_call"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.count_sec = 0
+ self.timer = osTimer()
+ self.aud = audio.Audio(0)
+ self.aud.set_pa(Pin.GPIO29)
+ self.read_data = {}
+ self.volum_size = 8
+ self.open_volum = 0
+ self.phone_num = ''
+ self.phone_list = []
+ self.button = 0
+
+ def initialization(self):
+ EventMesh.publish("set_UI_high_priority", 1)
+ global on_call_screen,on_call_label_name,on_call_second_label ,on_call_hangup ,on_call_volum_label,on_call_tab_label,on_call_bar,on_call_obj,\
+ on_call_volum_reduce,on_call_volum_add,on_call_phone_one ,on_call_phone_two ,on_call_phone_three,on_call_phone_four,on_call_phone_five,\
+ on_call_phone_six,on_call_phone_seven,on_call_screen_tab_label ,on_call_phone_return,on_call_phone_eight ,on_call_phone_nine ,on_call_phone_start ,\
+ on_call_phone_zero ,on_call_phone_hash,on_call_phone_return_btn,\
+ on_call_screen_tab
+ if on_call_screen ==None :
+ on_call_screen = lv.obj()
+ on_call_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_obj = lv.obj(on_call_screen)
+ on_call_obj.set_size(240,320)
+ on_call_obj.set_pos(0,0)
+ on_call_obj.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ print("on_call_screen")
+
+ on_call_label_name = lv.label(on_call_obj)
+ on_call_label_name.set_pos(0, 80)
+ on_call_label_name.set_size(240, 50)
+ on_call_label_name.set_text(" ")
+ on_call_label_name.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ on_call_label_name.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ on_call_second_label = lv.label(on_call_obj)
+ on_call_second_label.set_pos(0, 140)
+ on_call_second_label.set_size(240, 30)
+ on_call_second_label.set_text("00:00")
+ on_call_second_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ on_call_second_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ on_call_bar = lv.bar(on_call_obj)
+ on_call_bar.set_pos(49, 183)
+ on_call_bar.set_size(140, 25)
+ on_call_bar.set_style_anim_time(1000, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+ on_call_bar.set_mode(lv.bar.MODE.NORMAL)
+ on_call_bar.set_value(50, lv.ANIM.OFF)
+ on_call_bar.add_style(style_bar, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_bar.add_style(style_bar_indic, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+
+ on_call_volum_reduce = lv.img(on_call_obj)
+ on_call_volum_reduce.set_size(36, 36)
+ on_call_volum_reduce.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_volum_reduce.set_pos(4, 178)
+ on_call_volum_reduce.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_volum_reduce.set_src("U:/static/REDUCE_VOLUM_ICON.png")
+ on_call_volum_reduce.add_event_cb(lambda e: EventMesh.callback_wrapper(self.reduce_volum_size(e)),
+ lv.EVENT.CLICKED, None)
+
+ on_call_volum_add = lv.img(on_call_obj)
+ on_call_volum_add.set_size(36, 36)
+ on_call_volum_add.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_volum_add.set_pos(194, 178)
+ on_call_volum_add.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_volum_add.set_src("U:/static/VOLUM_ADD_ICON.png")
+ on_call_volum_add.add_event_cb(lambda e: EventMesh.callback_wrapper(self.add_volum_size(e)),
+ lv.EVENT.CLICKED, None)
+
+
+ on_call_volum_label = lv.label(on_call_obj)
+ on_call_volum_label.set_pos(0, 270)
+ on_call_volum_label.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_volum_label.set_size(85, 50)
+ on_call_volum_label.set_text("静音")
+ on_call_volum_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0)
+ on_call_volum_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_volum_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.open_volum_show(e)),
+ lv.EVENT.CLICKED, None)
+
+ on_call_hangup = lv.img(on_call_obj)
+ on_call_hangup.set_size(64, 64)
+ on_call_hangup.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_hangup.set_pos(85, 245)
+ on_call_hangup.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_hangup.set_src("U:/static/hang_up.png")
+ on_call_hangup.add_event_cb(lambda e: EventMesh.callback_wrapper(self.hangup(e)),
+ lv.EVENT.CLICKED, None)
+
+ on_call_tab_label = lv.label(on_call_obj)
+ on_call_tab_label.set_pos(150, 270)
+ on_call_tab_label.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_tab_label.set_size(90, 50)
+ on_call_tab_label.set_text("键盘")
+ on_call_tab_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0)
+ on_call_tab_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_tab_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.on_call_tab_show(e)),
+ lv.EVENT.CLICKED, None)
+
+ on_call_screen_tab = lv.obj(on_call_screen)
+ on_call_screen_tab.set_size(240,320)
+ on_call_screen_tab.set_pos(0,0)
+ on_call_screen_tab.add_flag(lv.obj.FLAG.HIDDEN)
+ on_call_screen_tab.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ on_call_screen_tab_label = lv.label(on_call_screen_tab)
+ on_call_screen_tab_label.set_pos(40, 34)
+ on_call_screen_tab_label.set_size(0, 30)
+ on_call_screen_tab_label.set_text(" ")
+ on_call_screen_tab_label.set_long_mode(lv.label.LONG.CLIP)
+ on_call_screen_tab_label.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_screen_tab_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+
+ on_call_phone_return = lv.img(on_call_screen_tab)
+ on_call_phone_return.set_src("U:/static/RED_RETURN_PNG.png")
+ on_call_phone_return.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_phone_return.set_pos(0, 30)
+ on_call_phone_return.set_size(36, 36)
+
+ on_call_phone_return_btn = lv.img(on_call_screen_tab)
+ on_call_phone_return_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_phone_return_btn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_phone_return_btn.set_pos(0, 0)
+ on_call_phone_return_btn.set_size(50, 100)
+ on_call_phone_return_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.on_return_show(e)),
+ lv.EVENT.CLICKED, None)
+
+
+ on_call_phone_one = lv.img(on_call_screen_tab)
+ on_call_phone_one.set_src("U:/static/IMAGE_NUMBER_KEY1_ICON.png")
+ on_call_phone_one.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_phone_one.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_phone_one.set_pos(3, 110)
+ on_call_phone_one.set_size(76, 50)
+
+ on_call_phone_two = lv.img(on_call_screen_tab)
+ on_call_phone_two.set_size(76, 50)
+ on_call_phone_two.set_src("U:/static/IMAGE_NUMBER_KEY2_ICON.png")
+ on_call_phone_two.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_phone_two.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_phone_two.set_pos(82, 110)
+
+ on_call_phone_three = lv.img(on_call_screen_tab)
+ on_call_phone_three.set_size(76, 50)
+ on_call_phone_three.set_src("U:/static/IMAGE_NUMBER_KEY3_ICON.png")
+ on_call_phone_three.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_phone_three.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_phone_three.set_pos(161, 110)#1
+
+ on_call_phone_four = lv.img(on_call_screen_tab)
+ on_call_phone_four.set_size(76, 50)
+ on_call_phone_four.set_src("U:/static/IMAGE_NUMBER_KEY4_ICON.png")
+ on_call_phone_four.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_phone_four.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_phone_four.set_pos(3, 162)
+
+ on_call_phone_five = lv.img(on_call_screen_tab)
+ on_call_phone_five.set_size(76, 50)
+ on_call_phone_five.set_src("U:/static/IMAGE_NUMBER_KEY5_ICON.png")
+ on_call_phone_five.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_phone_five.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_phone_five.set_pos(82, 162)
+
+ on_call_phone_six = lv.img(on_call_screen_tab)
+ on_call_phone_six.set_size(76, 50)
+ on_call_phone_six.set_src("U:/static/IMAGE_NUMBER_KEY6_ICON.png")
+ on_call_phone_six.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_phone_six.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_phone_six.set_pos(161, 162)#2
+
+ on_call_phone_seven = lv.img(on_call_screen_tab)
+ on_call_phone_seven.set_size(76, 50)
+ on_call_phone_seven.set_src("U:/static/IMAGE_NUMBER_KEY7_ICON.png")
+ on_call_phone_seven.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_phone_seven.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_phone_seven.set_pos(3, 214)
+
+ on_call_phone_eight = lv.img(on_call_screen_tab)
+ on_call_phone_eight.set_size(76, 50)
+ on_call_phone_eight.set_src("U:/static/IMAGE_NUMBER_KEY8_ICON.png")
+ on_call_phone_eight.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_phone_eight.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_phone_eight.set_pos(82, 214)
+
+ on_call_phone_nine = lv.img(on_call_screen_tab)
+ on_call_phone_nine.set_size(76, 50)
+ on_call_phone_nine.set_src("U:/static/IMAGE_NUMBER_KEY9_ICON.png")
+ on_call_phone_nine.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_phone_nine.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_phone_nine.set_pos(161, 214)
+
+ on_call_phone_start = lv.img(on_call_screen_tab)
+ on_call_phone_start.set_size(76, 50)
+ on_call_phone_start.set_src("U:/static/IMAGE_NUMBER_KEYSTAR_ICON.png")
+ on_call_phone_start.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_phone_start.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_phone_start.set_pos(3, 266)
+
+ on_call_phone_zero = lv.img(on_call_screen_tab)
+ on_call_phone_zero.set_size(76, 50)
+ on_call_phone_zero.set_src("U:/static/IMAGE_NUMBER_KEY0_ICON.png")
+ on_call_phone_zero.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_phone_zero.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_phone_zero.set_pos(82, 266)
+
+ on_call_phone_hash = lv.img(on_call_screen_tab)
+ on_call_phone_hash.set_size(76, 50)
+ on_call_phone_hash.set_src("U:/static/IMAGE_NUMBER_KEYHASH_ICON.png")
+ on_call_phone_hash.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_phone_hash.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_phone_hash.set_pos(161, 266)
+
+ self.meta = on_call_screen
+
+
+ on_call_phone_one.add_event_cb(lambda e: EventMesh.callback_wrapper(self.one(e)),
+ lv.EVENT.CLICKED, None)
+ on_call_phone_two.add_event_cb(lambda e: EventMesh.callback_wrapper(self.two(e)),
+ lv.EVENT.CLICKED, None)
+ on_call_phone_three.add_event_cb(lambda e: EventMesh.callback_wrapper(self.three(e)),
+ lv.EVENT.CLICKED, None)
+ on_call_phone_four.add_event_cb(lambda e: EventMesh.callback_wrapper(self.four(e)),
+ lv.EVENT.CLICKED, None)
+ on_call_phone_five.add_event_cb(lambda e: EventMesh.callback_wrapper(self.five(e)),
+ lv.EVENT.CLICKED, None)
+ on_call_phone_six.add_event_cb(lambda e: EventMesh.callback_wrapper(self.six(e)),
+ lv.EVENT.CLICKED, None)
+ on_call_phone_seven.add_event_cb(lambda e: EventMesh.callback_wrapper(self.seven(e)),
+ lv.EVENT.CLICKED, None)
+ on_call_phone_eight.add_event_cb(lambda e: EventMesh.callback_wrapper(self.eight(e)),
+ lv.EVENT.CLICKED, None)
+ on_call_phone_nine.add_event_cb(lambda e: EventMesh.callback_wrapper(self.nine(e)),
+ lv.EVENT.CLICKED, None)
+ on_call_phone_zero.add_event_cb(lambda e: EventMesh.callback_wrapper(self.zero(e)),
+ lv.EVENT.CLICKED, None)
+
+ on_call_phone_start.add_event_cb(lambda e: EventMesh.callback_wrapper(self.start(e)),
+ lv.EVENT.CLICKED, None)#短按显示*
+
+ on_call_phone_start.add_event_cb(lambda e: EventMesh.callback_wrapper(self.pressed_start(e)),
+ lv.EVENT.LONG_PRESSED, None)#长按显示+
+
+ on_call_phone_start.add_event_cb(lambda e: EventMesh.callback_wrapper(self.endpressed_start(e)),
+ lv.EVENT.RELEASED, None)#释放按键
+
+ on_call_phone_hash.add_event_cb(lambda e: EventMesh.callback_wrapper(self.hash(e)),
+ lv.EVENT.CLICKED, None)
+ name = EventMesh.publish("get_phonename")
+ on_call_label_name.set_text(name)
+ # on_call_label.set_text(str(self.meta_info))
+ on_call_second_label.set_text("00:00")
+ self.phone_num = ''
+ self.phone_list = []
+ self.button = 0
+
+
+ def show_num(self):
+ global on_call_screen_tab_label
+ #print("phone self.phone_num ",self.phone_num,self.phone_list)
+ on_call_screen_tab_label.set_size(200, 30)
+ on_call_screen_tab_label.set_text(self.phone_num)
+ def one(self,e):
+ if len(self.phone_list) >= ON_CALL_MAX_DATA:
+ self.phone_list.pop(0)
+ #return
+
+ voiceCall.startDtmf("1",100)
+ self.phone_list.append("1")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def two(self,e):
+ if len(self.phone_list) >= ON_CALL_MAX_DATA:
+ self.phone_list.pop(0)
+ #return
+ voiceCall.startDtmf("2",100)
+ self.phone_list.append("2")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def three(self,e):
+ if len(self.phone_list) >= ON_CALL_MAX_DATA:
+ self.phone_list.pop(0)
+ voiceCall.startDtmf("3",100)
+ self.phone_list.append("3")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def four(self,e):
+ if len(self.phone_list) >= ON_CALL_MAX_DATA:
+ self.phone_list.pop(0)
+ voiceCall.startDtmf("4",100)
+ self.phone_list.append("4")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def five(self,e):
+ if len(self.phone_list) >= ON_CALL_MAX_DATA:
+ self.phone_list.pop(0)
+ #return
+ voiceCall.startDtmf("5",100)
+ self.phone_list.append("5")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def six(self,e):
+ if len(self.phone_list) >= ON_CALL_MAX_DATA:
+ self.phone_list.pop(0)
+ #return
+ voiceCall.startDtmf("6",100)
+ self.phone_list.append("6")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def seven(self,e):
+ if len(self.phone_list) >= ON_CALL_MAX_DATA:
+ self.phone_list.pop(0)
+ #return
+ voiceCall.startDtmf("7",100)
+ self.phone_list.append("7")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def eight(self,e):
+ if len(self.phone_list) >= ON_CALL_MAX_DATA:
+ self.phone_list.pop(0)
+ #return
+ voiceCall.startDtmf("8",100)
+ self.phone_list.append("8")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def nine(self,e):
+ if len(self.phone_list) >= ON_CALL_MAX_DATA:
+ self.phone_list.pop(0)
+ #return
+ voiceCall.startDtmf("9",100)
+ self.phone_list.append("9")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def zero(self,e):
+ if len(self.phone_list) >= ON_CALL_MAX_DATA:#限制拨号数量20个数字
+ self.phone_list.pop(0)
+ #return
+ voiceCall.startDtmf("0",100)
+ self.phone_list.append("0")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def start(self,e):
+ self.button = 0
+
+ def pressed_start(self,e):
+ self.button = 1
+ def Close(self):
+ self.timer_cb = 0
+ self.timer.stop()
+
+ def endpressed_start(self,e):
+ if len(self.phone_list) >= ON_CALL_MAX_DATA:#限制拨号数量20个数字
+ self.phone_list.pop(0)
+ #return
+
+ # if self.button == 1:#长按
+ # voiceCall.startDtmf("+",100)
+ # self.phone_list.append("+")
+ # else:#短按
+ voiceCall.startDtmf("*",100)
+ self.phone_list.append("*")
+
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def hash(self,e):
+ if len(self.phone_list) >= ON_CALL_MAX_DATA:#限制拨号数量20个数字
+ self.phone_list.pop(0)
+ #return
+ voiceCall.startDtmf("#",100)
+ self.phone_list.append("#")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def add_show_hidden(self):
+ on_call_volum_add.add_flag(lv.obj.FLAG.HIDDEN)
+ on_call_volum_reduce.add_flag(lv.obj.FLAG.HIDDEN)
+ on_call_bar.add_flag(lv.obj.FLAG.HIDDEN)
+
+ def clear_show_hidden(self):
+ on_call_volum_add.clear_flag(lv.obj.FLAG.HIDDEN)
+ on_call_volum_reduce.clear_flag(lv.obj.FLAG.HIDDEN)
+ on_call_bar.clear_flag(lv.obj.FLAG.HIDDEN)
+
+ def open_volum_show(self, e):
+ global on_call_screen_tab,on_call_screen,on_call_obj
+ # self.aud.setVolume(0)
+ # if self.open_volum_state == 1:
+ # self.open_volum_state = 0
+ # else:
+ # self.open_volum_state = 1
+ # if self.open_volum_state == 1:
+ # self.add_show_hidden()
+ # else:
+ # self.clear_show_hidden()
+
+
+ def on_call_tab_show(self, e):
+ global on_call_screen_tab,on_call_screen,on_call_obj
+ if on_call_screen_tab != None:
+ self.phone_num = ''
+ self.phone_list = []
+ self.show_num()
+ on_call_screen_tab.clear_flag(lv.obj.FLAG.HIDDEN)
+ on_call_obj.add_flag(lv.obj.FLAG.HIDDEN)
+
+
+ def on_return_show(self, e):
+ global on_call_screen_tab,on_call_screen,on_call_obj
+ if on_call_screen_tab != None:
+ on_call_screen_tab.add_flag(lv.obj.FLAG.HIDDEN)
+ on_call_obj.clear_flag(lv.obj.FLAG.HIDDEN)
+
+ def add_volum_size(self, e):
+ self.volum_size+=2
+ if self.volum_size >= 11:
+ self.volum_size = 11
+ self.show_bar(1)
+
+ def reduce_volum_size(self, e):
+
+ self.volum_size -= 2
+ if self.volum_size < 0:
+ self.volum_size = 0
+ self.show_bar(1)
+
+ def show_bar(self,msg):
+ on_call_bar.set_value((100 // 11) * self.volum_size, lv.ANIM.OFF)
+ if msg == 1:
+ self.read_data = EventMesh.publish("get_storage_data")
+ self.read_data["volum"] = self.volum_size
+ self.aud.setVolume(self.volum_size)
+ EventMesh.publish("set_storage_data", self.read_data)
+ EventMesh.publish("set_volum_size",self.volum_size)
+ # print("self.read_data:size :{}".format(self.read_data))
+ with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_data,fd)
+
+ def post_processor_after_initialization(self):
+ global on_call_screen_tab,on_call_obj
+ self.count_sec = 0
+ self.timer.start(1000,1,self.refresh)
+ self.read_data = EventMesh.publish("get_storage_data")
+ # print("self.read_data:{}".format(self.read_data))
+ num = EventMesh.publish("get_volum_size")
+ if num == None:
+ self.volum_size = 8
+ else:
+ self.volum_size = num
+ self.aud.setVolume(self.volum_size)
+ self.show_bar(0)
+ self.open_volum = 0
+ self.phone_num = ''
+ self.phone_list = []
+ self.button = 0
+ if on_call_obj != None:
+ on_call_obj.clear_flag(lv.obj.FLAG.HIDDEN)
+ if on_call_screen_tab != None:
+ on_call_screen_tab.add_flag(lv.obj.FLAG.HIDDEN)
+ self.show_num()
+
+
+ def refresh(self,e):
+ # print("call_in")
+ global on_call_screen,on_call_label_name,on_call_second_label ,on_call_hangup
+ min = self.count_sec/60
+ sec = self.count_sec%60
+ if min > 99:
+ total = "%03d:%02d"%(min,sec)
+ else:
+ total = "%02d:%02d"%(min,sec)
+ on_call_second_label.set_text(str(total))
+ self.count_sec+=1
+
+ def hangup(self,e):
+ EventMesh.publish("set_UI_high_priority", 0)
+ self.timer.stop()
+ voiceCall.callEnd()
+
+ def Close(self):
+ self.timer.stop()
+
+ def btn1_release(self):
+ pass
+ #EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ flag = EventMesh.publish("get_lcd_state")
+ if flag == 1:
+ EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)
+ else:
+ EventMesh.publish(constants.EVENT.SYSTEM_UP)
+ #EventMesh.publish("load_screen", {"screen": "main_menu"})
+# -------------------------------------------step screen----------------------------------------------------------#
+
+step_screen = None
+step_label = None
+step_label_01 = None
+step_img = None
+class StepScreen(Screen):
+ NAME = "step"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.timer = osTimer()
+
+ def initialization(self):
+ global step_screen,step_label ,step_label_01 ,step_img
+ if step_screen == None:
+ step_screen = lv.obj()
+ print("step_screen")
+ step_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ step_label = lv.label(step_screen)
+ step_label.set_pos(10, 30)
+ step_label.set_size(230, 50)
+ step_label.set_text("今日步数")
+ step_label.set_long_mode(lv.label.LONG.WRAP)
+ step_label.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+ step_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ step_label_01 = lv.label(step_screen)
+ step_label_01.set_pos(0, 100)
+ step_label_01.set_size(240, 50)
+ step_label_01.set_text("0步")
+ step_label_01.set_long_mode(lv.label.LONG.WRAP)
+ step_label_01.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ step_label_01.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ step_img = lv.img(step_screen)
+ step_img.set_pos(100, 150)
+ step_img.set_size(40, 65)
+ step_img.set_src("U:/static/IMAGE_STEP.png")
+ step_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.meta = step_screen
+
+ step = EventMesh.publish("get_old_step_value")
+ step_label_01.set_text("{}步".format(step))
+ self.timer.start(1000, 1, self.revcing)
+
+ def revcing(self, *args, **kwargs):
+ global step_screen,step_label ,step_label_01 ,step_img
+ step = EventMesh.publish("get_old_step_value")
+ step_label_01.set_text("{}步".format(step))
+
+ def Close(self):
+ self.timer.stop()
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+# -------------------------------------------weather screen----------------------------------------------------------
+
+weather_screen = None
+weather_img = None
+no_weather_img = None
+weather_tem_label = None
+no_weather_degree = None
+weather_detail_label = None
+weather_location_label = None
+no_connect_label = None
+no_connect_label1 = None
+class WeatherScreen(Screen):
+ NAME = "weather"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.weather_data = {}
+ EventMesh.subscribe("updata_weather_show", self.update_weather_data)
+
+ def initialization(self):
+ global weather_screen,weather_img,no_weather_img,weather_tem_label,no_weather_degree,\
+ weather_detail_label,weather_location_label,no_connect_label ,no_connect_label1
+ if weather_screen == None :
+ weather_screen = lv.obj()
+ print("weather_screen")
+ weather_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ weather_img = lv.img(weather_screen)
+ weather_img.set_pos(10, 10)
+ weather_img.set_size(135, 120)
+
+ weather_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_weather_img = lv.img(weather_screen)
+ no_weather_img.set_pos(10, 10)
+ no_weather_img.set_size(135, 120)
+ no_weather_img.set_src("U:/static/update.png")
+ no_weather_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ weather_tem_label = lv.label(weather_screen)
+ weather_tem_label.set_pos(155, 44)
+ weather_tem_label.set_size(60, 50)
+ weather_tem_label.set_text("_ _")
+ weather_tem_label.set_long_mode(lv.label.LONG.WRAP)
+ weather_tem_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ weather_tem_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_weather_degree = lv.img(weather_screen)
+ no_weather_degree.set_pos(200, 40)
+ no_weather_degree.set_size(22, 22)
+ no_weather_degree.set_src("U:/static/degree.png")
+ no_weather_degree.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ weather_detail_label = lv.label(weather_screen)
+ weather_detail_label.set_pos(155, 80)
+ weather_detail_label.set_size(85, 50)
+ weather_detail_label.set_text("-/-")
+ weather_detail_label.set_long_mode(lv.label.LONG.WRAP)
+ weather_detail_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ weather_detail_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ weather_location_label = lv.label(weather_screen)
+ weather_location_label.set_pos(0, 200)
+ weather_location_label.set_size(240, 50)
+ weather_location_label.set_text("--")
+ weather_location_label.set_long_mode(lv.label.LONG.WRAP)
+ weather_location_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ weather_location_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_connect_label = lv.label(weather_screen)
+ no_connect_label.set_pos(0, 200)
+ no_connect_label.set_size(240, 40)
+ no_connect_label.set_text("找不到服务器")
+ no_connect_label.set_long_mode(lv.label.LONG.WRAP)
+ no_connect_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ no_connect_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_connect_label1 = lv.label(weather_screen)
+ no_connect_label1.set_pos(0, 250)
+ no_connect_label1.set_size(240, 70)
+ no_connect_label1.set_text("请联网后重试")
+ no_connect_label1.set_long_mode(lv.label.LONG.WRAP)
+ no_connect_label1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ no_connect_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.meta = weather_screen
+
+ def post_processor_after_initialization(self):
+ EventMesh.publish("updata_weather_show")
+
+
+ def update_weather_data(self, event, msg):
+ global weather_screen,weather_img,no_weather_img,weather_tem_label,no_weather_degree,\
+ weather_detail_label,weather_location_label,no_connect_label ,no_connect_label1
+ connect = EventMesh.publish(constants.EVENT.GET_CONNECT) #获取网络状态
+ self.weather_data = EventMesh.publish("get_weather_data")
+ if weather_screen != None:
+ if connect != 0 and self.weather_data != None:
+ no_data = self.weather_data[8]
+ if no_data != 0 :
+ no_weather_img.add_flag(lv.obj.FLAG.HIDDEN)
+ weather_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ no_connect_label.set_text(" ")
+ no_connect_label1.set_text(" ")
+ # print("self.weather_data:{}".format(self.weather_data))
+ type = self.weather_data[3]
+ if type == None:
+ weather_img.set_src("U:/static/update.png")#天气类型
+ else:
+ weather_img.set_src("U:/static/{}_weather.png".format(type))#天气类型
+
+ temp = self.weather_data[4]
+ if temp == None:
+ weather_tem_label.set_text("_ _")
+ else:
+ weather_tem_label.set_text("{}".format(temp))
+
+ date = self.weather_data[0]
+ if date != '{}':
+ date_month = date.split('-')[1]
+ date_day = date.split('-')[2]
+ weather_detail_label.set_text("{}/{}".format(date_month,date_day))#天气更新时间
+ else:
+ weather_detail_label.set_text("-/-")
+
+ city = self.weather_data[7]
+ if city != '{}':
+ weather_location_label.set_text("{}".format(city))#城市
+ else:
+ weather_location_label.set_text("--")
+ else:#已联网未获取到天气数据
+ weather_location_label.set_text(" ")
+ weather_detail_label.set_text("-/-")
+ weather_tem_label.set_text("_ _")
+
+ no_connect_label.set_text("未获取网络数据")
+ no_connect_label1.set_text("请稍候重试")
+
+ else:
+ weather_location_label.set_text(" ")
+ weather_detail_label.set_text("-/-")
+ weather_tem_label.set_text("_ _")
+
+ no_weather_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ weather_img.add_flag(lv.obj.FLAG.HIDDEN)
+ no_connect_label.set_text("找不到服务器")
+ no_connect_label1.set_text("请联网后重试")
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+import audio
+from machine import Pin
+
+
+
+
+# -----------------------------联系人--------------contacts screen----------------------------------------------------------
+
+CONTACT_FLAG = 0
+contacts_screen = None
+contacts_cont = None
+contacts_top_title = None
+contact_none_label = None
+contacts_screen_list_screen = None
+class ContactsScreen(Screen):
+ NAME = "contacts"
+
+ def __init__(self):
+ super().__init__()
+ # -------------------------------------------popup_menu screen----------------------------------------------------------
+ self.meta = None
+ self.phonebook = {}
+ self.count = 0
+ self.phone_num_count = 0
+ self.phone_num = {}
+ self.name = []
+ self.check_json = 0
+ self.timer = osTimer()
+ self.contact_detail_list = None
+ EventMesh.subscribe("contact_updata_list_show", self.btn_create_list)
+ self.MXA_phone_num = 50 #最大显示号码个数
+ self.contact_detail_listt_dict = []
+ self.calling_btn = []
+
+ def post_processor_before_initialization(self):
+ data = EventMesh.publish("get_phonebook_list")
+ if data != None:
+ self.check_json = data[0]
+ self.phonebook = data[1]
+ self.count = 0
+
+ def initialization(self):
+ global contacts_screen,contacts_cont,contacts_top_title,contact_none_label,contacts_screen_list_screen
+ if contacts_screen == None:
+ contacts_screen = lv.obj()
+ print("contacts_screen")
+ contacts_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ contacts_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ contacts_screen_list_screen = lv.obj(contacts_screen)
+ contacts_screen_list_screen.set_pos(0, 50)
+ contacts_screen_list_screen.set_size(240, 270)
+ contacts_screen_list_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ contacts_screen_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ contacts_top_title = lv.label(contacts_screen)
+ contacts_top_title.set_pos(0, 10)
+ contacts_top_title.set_size(240, 40)
+ contacts_top_title.set_text("联系人")
+ contacts_top_title.set_long_mode(lv.label.LONG.WRAP)
+ contacts_top_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ contacts_top_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ contact_none_label = lv.label(contacts_screen_list_screen)
+ contact_none_label.set_pos(0, 80)
+ contact_none_label.set_size(240, 50)
+ contact_none_label.set_text("无联系人,请在手机\nAPP上添加")
+ contact_none_label.set_long_mode(lv.label.LONG.WRAP)
+ contact_none_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ contact_none_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ self.contact_detail_list = lv.obj(contacts_screen_list_screen)
+ self.contact_detail_list.set_pos(0, 0)
+ self.contact_detail_list.set_size(240, 271)
+ self.contact_detail_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ self.contact_detail_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ for i in range(self.MXA_phone_num):
+ contact_btn = lv.btn(self.contact_detail_list)
+ contact_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+ contact_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_cb(e)),
+ lv.EVENT.CLICKED, None)
+ contact_btn.add_flag(lv.obj.FLAG.HIDDEN)
+
+ contact_btn_label_1 = lv.label(contact_btn)
+ contact_btn_label_2 = lv.label(contact_btn)
+ contact_btn_label_3 = lv.label(contact_btn)
+ self.contact_detail_listt_dict.append({"contact_btn":contact_btn,"contact_btn_label_1":contact_btn_label_1,"contact_btn_label_2":contact_btn_label_2,"contact_btn_label_3":contact_btn_label_3})
+ self.meta = contacts_screen
+ self.count = 0
+ self.btn_create_list_show(0)
+
+ def btn_create_list(self,event,msg):
+ self.post_processor_before_initialization()
+ self.timer.start(1 * 1000, 0, self.OutTime_s)
+
+ def OutTime_s(self,e):
+ self.btn_create_list_show(1)
+
+ def btn_create_list_show(self,state):
+ EventMesh.publish("publish_message_event_ui",{"func":self.btn_create_list_show_screen,"data":state})
+
+ def btn_create_list_show_screen(self,state):
+ global contacts_screen,contacts_cont,contacts_top_title,contact_none_label,contacts_screen_list_screen
+ print("btn_create_list_show_screen!!!!!!!!!!!")
+ if contacts_screen == None:
+ return
+ #读取json文件中的键作为label文本;
+ if self.check_json == True and len(self.phonebook) != 0:
+ self.contact_detail_list.clear_flag(lv.obj.FLAG.HIDDEN)
+ contact_none_label.add_flag(lv.obj.FLAG.HIDDEN)#隐藏空文本
+ j =0
+ print("self.phonebook sorted :{} len(self.phonebook) :{}".format(sorted(self.phonebook.keys()),len(self.phonebook)))
+ phonebook_keys = sorted(self.phonebook.keys())
+
+ # self.contact_detail_list.delete()#先删除一次控件
+ # self.contact_detail_list = lv.obj(contacts_screen_list_screen)
+ # self.contact_detail_list.set_pos(0, 0)
+ # self.contact_detail_list.set_size(240, 271)
+ # self.contact_detail_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ # self.contact_detail_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ # print("self.phonebook sorted :{}".format(len(self.phonebook)))
+ if len(self.phonebook) > self.MXA_phone_num:
+ j = len(self.phonebook) - self.MXA_phone_num
+ for i in range(self.MXA_phone_num): #字典 key value
+ if(j >= len(self.phonebook)):
+ self.contact_detail_listt_dict[i]["contact_btn"].add_flag(lv.obj.FLAG.HIDDEN)
+ continue
+ name = self.phonebook[phonebook_keys[j]]
+ key_tmp = phonebook_keys[j]
+
+ print("name :{} key_tmp:{}".format(name,key_tmp))
+
+ #contact_btn = lv.btn(self.contact_detail_list)
+ self.contact_detail_listt_dict[i]["contact_btn"].set_size(230,80)
+ self.contact_detail_listt_dict[i]["contact_btn"].set_pos(0,82*i )
+ self.contact_detail_listt_dict[i]["contact_btn"].add_style(style_contact_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+ # contact_btn.add_style(style_contact_btn_pressed, lv.PART.MAIN | lv.STATE.PRESSED)
+ # self.contact_detail_listt_dict[i]["contact_btn"].add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling(e)),
+ # lv.EVENT.CLICKED, None)
+
+ #contact_btn_label_1 = lv.label(contact_btn)
+ self.contact_detail_listt_dict[i]["contact_btn_label_1"].set_pos(0, 5)
+ self.contact_detail_listt_dict[i]["contact_btn_label_1"].set_size(180, 25)
+ self.contact_detail_listt_dict[i]["contact_btn_label_1"].set_text(key_tmp[4:])
+ self.contact_detail_listt_dict[i]["contact_btn_label_1"].set_long_mode(lv.label.LONG.DOT)
+ self.contact_detail_listt_dict[i]["contact_btn_label_1"].add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ #contact_btn_label_2 = lv.label(contact_btn)
+ self.contact_detail_listt_dict[i]["contact_btn_label_2"].set_pos(0, 5)
+ self.contact_detail_listt_dict[i]["contact_btn_label_2"].set_size(0, 0)
+ self.contact_detail_listt_dict[i]["contact_btn_label_2"].set_text(key_tmp)
+
+
+ #contact_btn_label_3 = lv.label(contact_btn)
+ self.contact_detail_listt_dict[i]["contact_btn_label_3"].set_pos(0, 30)
+ self.contact_detail_listt_dict[i]["contact_btn_label_3"].set_size(220, 35)
+ self.contact_detail_listt_dict[i]["contact_btn_label_3"].set_text(name)
+ self.contact_detail_listt_dict[i]["contact_btn_label_3"].add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ self.contact_detail_listt_dict[i]["contact_btn"].clear_flag(lv.obj.FLAG.HIDDEN)
+ #self.contact_detail_listt_dict[i]["contact_btn"].scroll_to_view(lv.ANIM.OFF)
+ j+=1
+
+ if state == 1:
+ self.contact_detail_listt_dict[i]["contact_btn"].scroll_to_view(lv.ANIM.OFF)
+
+ else:
+ if contacts_screen_list_screen != None:
+ contact_none_label.clear_flag(lv.obj.FLAG.HIDDEN) #显示空文本
+ if self.contact_detail_list != None:
+ self.contact_detail_list.add_flag(lv.obj.FLAG.HIDDEN)#隐藏空文本
+
+
+ def calling_cb(self,e):
+ code = e.get_code()
+ if code == lv.EVENT.CLICKED:
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#有卡时触发sos报警 无卡时自动关机
+ msg_text = e.get_target().get_child(1).get_text()
+ EventMesh.publish("publish_message_event_ui",{"func":self.calling,"data":msg_text})
+ else:
+ EventMesh.publish("load_screen", {"screen": "no_sim_popup_screen"})
+
+ def calling(self,msg_text):
+ _msg = msg_text
+ print("contacts:calling_cb1:{}".format(_msg))
+ # print("_msg:{}".format(_msg))
+ msg_tmp = _msg.split(':')
+ msg_tmp = msg_tmp[1]
+ EventMesh.publish("save_phonename", msg_tmp)
+
+ phone_num = self.phonebook[_msg]
+ EventMesh.publish("save_phonenum", phone_num)
+
+ # phone_num_tmp = int(phone_num)
+
+ "dialing_noplay_popup"
+ EventMesh.publish("load_screen", {"screen": "dialing_noplay_popup"})
+
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+# -------------------------------------------temperature screen----------------------------------------------------------
+
+temperature_screen = None
+temperature_bg_img = None
+temperature_body_label = None
+temperature_degree_img = None
+temperature_value_label = None
+temperature_wrist_label = None
+temperature_wrist_degree_img = None
+temperature_wrist_value_label = None
+temperature_measure_end_label = None
+temperature_measure_countdown_label = None
+temp_reset_btn_img = None
+temp_line1 = None
+temp_line2 = None
+temp_line3 = None
+temp_line4 = None
+temp_line5 = None
+temp_line6 = None
+temp_line7 = None
+temperature_label = None
+temperature_line_bg_img = None
+temperature_done_img = None
+temperature_start_label=None
+temperature_bpm_label = None
+temperature_done_label = None
+temperature_keep_label = None
+
+style_line_blue = lv.style_t()
+style_line_blue.init()
+style_line_blue.set_line_width(10)
+style_line_blue.set_line_color(lv.color_make(35, 141, 255))
+
+class TemperatureScreen(Screen):
+ NAME = "temperature"
+
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.timer = osTimer()
+ self.point = 0
+ self.temp_value = 0
+
+ def initialization(self):
+ global temperature_screen,temperature_keep_label,temperature_label,temp_reset_btn_img,temp_line1,temp_line2,temp_line3,temp_line4,temp_line5,\
+ temp_line6,temp_line7,temperature_line_bg_img,temperature_done_img ,temperature_start_label,temperature_bpm_label ,temperature_done_label
+ if temperature_screen == None:
+ temperature_screen = lv.obj()
+ print("temp_screen")
+ temperature_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ temperature_label = lv.label(temperature_screen)
+ temperature_label.set_pos(0, 10)
+ temperature_label.set_size(240, 40)
+ temperature_label.set_text("体温")
+ temperature_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0)
+ temperature_label.set_long_mode(lv.label.LONG.WRAP)
+ temperature_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ temperature_line_bg_img = lv.img(temperature_screen)
+ temperature_line_bg_img.set_pos(5, 50)
+ temperature_line_bg_img.set_size(230, 120)
+ temperature_line_bg_img.set_src("U:/static/temp_line_bg.png")
+
+
+ temperature_done_img = lv.img(temperature_screen)
+ temperature_done_img.set_pos(20, 226)
+ temperature_done_img.set_src("U:/static/temp_gif03.png")
+
+ temp_reset_btn_img = lv.img(temperature_screen)
+ temp_reset_btn_img.set_pos(0, 182)
+ temp_reset_btn_img.set_src("U:/static/reset_hr_btn.png")
+ temp_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN)
+ temp_reset_btn_img.add_flag(lv.obj.FLAG.CLICKABLE)
+
+ temperature_start_label = lv.label(temperature_screen)
+ temperature_start_label.set_size(240,40)
+ temperature_start_label.set_pos(0,190)
+ temperature_start_label.set_text(" ")
+ temperature_start_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0)
+ temperature_start_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ temperature_start_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+
+ # hr_line_points1 = [{"x":0,"y":0},{"x":0,"y":30}]
+ # hr_line_points2 = [{"x":0,"y":0},{"x":0,"y":47}]
+ # hr_line_points3 = [{"x":0,"y":0},{"x":0,"y":67}]
+ # hr_line_points4 = [{"x":0,"y":0},{"x":0,"y":85}]
+ # hr_line_points5 = [{"x":0,"y":0},{"x":0,"y":100}]
+ # hr_line_points6 = [{"x":0,"y":0},{"x":0,"y":100}]
+ # hr_line_points7 = [{"x":0,"y":0},{"x":0,"y":100}]
+
+ temp_line1 = lv.line(temperature_screen)
+ temp_line1.set_points(hr_line_points,2)
+ temp_line1.set_pos(29,120)
+ temp_line1.set_size(10,0)
+ temp_line1.add_style(style_line_blue,0)
+
+ temp_line2 = lv.line(temperature_screen)
+ temp_line2.set_points(hr_line_points,2)
+ temp_line2.set_pos(57,103)
+ temp_line2.set_size(10,0)
+ temp_line2.add_style(style_line_blue,0)
+
+ temp_line3 = lv.line(temperature_screen)
+ temp_line3.set_points(hr_line_points,2)
+ temp_line3.set_pos(84,82)
+ temp_line3.set_size(10,0)
+ temp_line3.add_style(style_line_blue,0)
+
+ temp_line4 = lv.line(temperature_screen)
+ temp_line4.set_points(hr_line_points,2)
+ temp_line4.set_pos(110,66)
+ temp_line4.set_size(10,0)
+ temp_line4.add_style(style_line_blue,0)
+
+ temp_line5 = lv.line(temperature_screen)
+ temp_line5.set_points(hr_line_points,2)
+ temp_line5.set_pos(140,50)
+ temp_line5.set_size(10,0)
+ temp_line5.add_style(style_line_blue,0)
+
+ temp_line6 = lv.line(temperature_screen)
+ temp_line6.set_points(hr_line_points,2)
+ temp_line6.set_pos(167,50)
+ temp_line6.set_size(10,0)
+ temp_line6.add_style(style_line_blue,0)
+
+ temp_line7 = lv.line(temperature_screen)
+ temp_line7.set_points(hr_line_points,2)
+ temp_line7.set_pos(195,50)
+ temp_line7.set_size(10,0)
+ temp_line7.add_style(style_line_blue,0)
+
+ temperature_bpm_label = lv.label(temperature_screen)
+ temperature_bpm_label.set_size(120, 40)
+ temperature_bpm_label.set_pos(100, 244)
+ temperature_bpm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ temperature_bpm_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+
+ temperature_keep_label = lv.label(temperature_screen)
+ temperature_keep_label.set_size(140, 40)
+ temperature_keep_label.set_pos(100, 280)
+ temperature_keep_label.set_text(" ")
+ temperature_keep_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ temperature_keep_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+
+
+ temperature_degree_img = lv.img(temperature_screen)
+ temperature_degree_img.set_pos(156, 242)
+ temperature_degree_img.set_size(22, 22)
+ temperature_degree_img.set_src("U:/static/degree.png")
+ temperature_degree_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ self.meta = temperature_screen
+ temp_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)),
+ lv.EVENT.CLICKED, None)
+
+ temperature_bpm_label.set_text("- -")
+ temperature_start_label.set_text("正在测量中.")
+
+
+ def post_processor_after_initialization(self):
+ self.restart_up(0)
+
+ def restart_up(self,e):
+ global temperature_done_label,temperature_keep_label,temperature_bpm_label,temperature_start_label,temp_reset_btn_img
+ temperature_bpm_label.set_text("- -")
+ temperature_keep_label.set_text(" ")
+ temp_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN)
+ self.point = 0
+ temperature_bpm_label.set_text("- -")
+ temperature_start_label.set_text("正在测量中.")
+ EventMesh.publish("set_temp_state",1)
+ EventMesh.publish(constants.EVENT.START_TEMP)
+ self.show_history_data()
+ self.timer.start(1*500, 1, self.start_measure)
+
+ def show_history_data(self):
+ global temp_line1,temp_line2,temp_line3,temp_line4,temp_line5,temp_line6,temp_line7
+ read_data = {}
+ read_data = EventMesh.publish("get_history_temp_value")
+ print("hr history read_data",read_data)
+ if read_data != None:
+ count = len(read_data)
+ if count != 0:
+ if count >= 7:
+ for i in range(count):
+ value = read_data["0{}".format(i+1)]
+ value_temp = int(value)
+ if value <= 30:
+ line_value = int(value_temp)
+ elif value <= 34:
+ line_value = int((value_temp-30)*4.25)+30
+ elif value <= 38:
+ line_value = int((value_temp-34)*5)+47
+ elif value <= 42:
+ line_value = int((value_temp-38)*4)+67
+ elif value < 46:
+ line_value = int((value_temp-42)*3.75)+85
+ else:
+ value = 46
+ line_value = 100
+
+
+ if line_value >= 100:
+ line_value = 100
+ #print("hr hist",line_value)
+ hr_line_points = [{"x":0,"y":0},{"x":0,"y":line_value}]
+ if i == 0:
+ temp_line1.set_points(hr_line_points,2)
+ temp_line1.set_pos(29,150-line_value)
+ temp_line1.set_size(10,line_value)
+ if value >= 37.3:
+ temp_line1.set_style_line_color(lv.color_make(0xff,0x00,0x00),0)
+ else:
+ temp_line1.set_style_line_color(lv.color_make(35,141,255),0)
+ if i == 1:
+ temp_line2.set_points(hr_line_points,2)
+ temp_line2.set_pos(57,150-line_value)
+ temp_line2.set_size(10,line_value)
+ if value >= 37.3:
+ temp_line2.set_style_line_color(lv.color_make(0xff,0x00,0x00),0)
+ else:
+ temp_line2.set_style_line_color(lv.color_make(35,141,255),0)
+
+ if i == 2:
+ temp_line3.set_points(hr_line_points,2)
+ temp_line3.set_pos(84,150-line_value)
+ temp_line3.set_size(10,line_value)
+ if value >= 37.3:
+ temp_line3.set_style_line_color(lv.color_make(0xff,0x00,0x00),0)
+ else:
+ temp_line3.set_style_line_color(lv.color_make(35,141,255),0)
+ if i == 3:
+ temp_line4.set_points(hr_line_points,2)
+ temp_line4.set_pos(112,150-line_value)
+ temp_line4.set_size(10,line_value)
+ if value >= 37.3:
+ temp_line4.set_style_line_color(lv.color_make(0xff,0x00,0x00),0)
+ else:
+ temp_line4.set_style_line_color(lv.color_make(35,141,255),0)
+ if i == 4:
+ temp_line5.set_points(hr_line_points,2)
+ temp_line5.set_pos(140,150-line_value)
+ temp_line5.set_size(10,line_value)
+ if value >= 37.3:
+ temp_line5.set_style_line_color(lv.color_make(0xff,0x00,0x00),0)
+ else:
+ temp_line5.set_style_line_color(lv.color_make(35,141,255),0)
+
+ if i == 5:
+ temp_line6.set_points(hr_line_points,2)
+ temp_line6.set_pos(167,150-line_value)
+ temp_line6.set_size(10,line_value)
+ if value >= 37.3:
+ temp_line6.set_style_line_color(lv.color_make(0xff,0x00,0x00),0)
+ else:
+ temp_line6.set_style_line_color(lv.color_make(35,141,255),0)
+
+ if i == 6:
+ temp_line7.set_points(hr_line_points,2)
+ temp_line7.set_pos(195,150-line_value)
+ temp_line7.set_size(10,line_value)
+ if value >= 37.3:
+ temp_line7.set_style_line_color(lv.color_make(0xff,0x00,0x00),0)
+ else:
+ temp_line7.set_style_line_color(lv.color_make(35,141,255),0)
+ else:
+ value = read_data["0{}".format(count)]
+ value_temp = int(value)
+ if value <= 30:
+ line_value = int(value_temp)
+ elif value <= 34:
+ line_value = int((value_temp-30)*4.25)+30
+ elif value <= 38:
+ line_value = int((value_temp-34)*5)+47
+ elif value <= 42:
+ line_value = int((value_temp-38)*4)+67
+ elif value < 46:
+ line_value = int((value_temp-42)*3.75)+85
+ else:
+ value = 46
+ line_value = 100
+
+
+ if line_value >= 100:
+ line_value = 100
+ #
+ hr_line_points = [{"x":0,"y":0},{"x":0,"y":line_value}]
+ if count == 1:
+ temp_line1.set_points(hr_line_points,2)
+ temp_line1.set_pos(29,150-line_value)
+ temp_line1.set_size(10,line_value)
+ if value >= 37.3:
+ temp_line1.set_style_line_color(lv.color_make(0xff,0x00,0x00),0)
+ else:
+ temp_line1.set_style_line_color(lv.color_make(35,141,255),0)
+
+ if count == 2:
+ temp_line2.set_points(hr_line_points,2)
+ temp_line2.set_pos(57,150-line_value)
+ temp_line2.set_size(10,line_value)
+ if value >= 37.3:
+ temp_line2.set_style_line_color(lv.color_make(0xff,0x00,0x00),0)
+ else:
+ temp_line2.set_style_line_color(lv.color_make(35,141,255),0)
+
+ if count == 3:
+ temp_line3.set_points(hr_line_points,2)
+ temp_line3.set_pos(84,150-line_value)
+ temp_line3.set_size(10,line_value)
+ if value >= 37.3:
+ temp_line3.set_style_line_color(lv.color_make(0xff,0x00,0x00),0)
+ else:
+ temp_line3.set_style_line_color(lv.color_make(35,141,255),0)
+
+
+ if count == 4:
+ temp_line4.set_points(hr_line_points,2)
+ temp_line4.set_pos(112,150-line_value)
+ temp_line4.set_size(10,line_value)
+ if value >= 37.3:
+ temp_line4.set_style_line_color(lv.color_make(0xff,0x00,0x00),0)
+ else:
+ temp_line4.set_style_line_color(lv.color_make(35,141,255),0)
+
+ if count == 5:
+ temp_line5.set_points(hr_line_points,2)
+ temp_line5.set_pos(140,150-line_value)
+ temp_line5.set_size(10,line_value)
+ if value >= 37.3:
+ temp_line5.set_style_line_color(lv.color_make(0xff,0x00,0x00),0)
+ else:
+ temp_line5.set_style_line_color(lv.color_make(35,141,255),0)
+
+ if count == 6:
+ temp_line6.set_points(hr_line_points,2)
+ temp_line6.set_pos(167,150-line_value)
+ temp_line6.set_size(10,line_value)
+ if value >= 37.3:
+ temp_line6.set_style_line_color(lv.color_make(0xff,0x00,0x00),0)
+ else:
+ temp_line6.set_style_line_color(lv.color_make(35,141,255),0)
+
+ if count == 7:
+ temp_line7.set_points(hr_line_points,2)
+ temp_line7.set_pos(195,150-line_value)
+ temp_line7.set_size(10,line_value)
+ if value >= 37.3:
+ temp_line7.set_style_line_color(lv.color_make(0xff,0x00,0x00),0)
+ else:
+ temp_line7.set_style_line_color(lv.color_make(35,141,255),0)
+
+ def start_measure(self,*args):
+ global temperature_label,temperature_keep_label,temperature_done_img ,temp_reset_btn_img,temperature_start_label,temperature_bpm_label ,temperature_done_label
+ self.point = self.point + 1
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+
+ temp = EventMesh.publish(constants.EVENT.GET_TEMP)
+ tmp = str(temp).split('.')[0] + '.' + str(temp).split('.')[1][:1]#获取小数点后一位 舍去小数点最后一位
+ print("self.temp:{}".format(temp))
+ if self.point >= 2:
+ if temp != 0:
+ temperature_bpm_label.set_text("{}".format(tmp))
+ else:
+ temperature_bpm_label.set_text("- -")
+
+ if self.point%4 == 0 :
+ temperature_start_label.set_text("正在测量中..")
+ temperature_done_img.set_src("U:/static/temp_gif02.png")
+ if self.point%4 == 1 :
+ temperature_start_label.set_text("正在测量中...")
+ temperature_done_img.set_src("U:/static/temp_gif01.png")
+ if self.point%4 == 2 :
+ temperature_start_label.set_text("正在测量中.")
+ temperature_done_img.set_src("U:/static/temp_gif02.png")
+
+ if self.point%4 == 3 :
+ temperature_start_label.set_text("正在测量中.")
+ temperature_done_img.set_src("U:/static/temp_gif03.png")
+
+ tmp_f = str(temp).split('.')[0]
+ tmp_f_tmp = int(tmp_f)
+
+ tmp_d = str(temp).split('.')[1][:1]
+ tmp_d_tmp = int(tmp_d)
+ if self.point >= 2:
+ if temp >= 37.3:
+ temperature_keep_label.set_text("体温偏高")
+ temperature_keep_label.set_style_text_color(lv.color_make(0xff, 0x00, 0x00), lv.STATE.DEFAULT)
+ else:
+ temperature_keep_label.set_text("体温正常")
+ temperature_keep_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+ if self.point > 120 : #测2min
+
+ if temp >= 37.3:
+ temperature_done_img.set_src("U:/static/temp_high.png")
+ else:
+ temperature_done_img.set_src("U:/static/temp_gif03.png")
+ temp_reset_btn_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ temperature_start_label.set_text("测量结束,点击重测")
+
+ EventMesh.publish("set_history_temp_value",temp)
+ self.show_history_data()
+ self.timer.stop()
+ self.point = 0
+ EventMesh.publish("set_temp_state",0)
+ EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
+ EventMesh.publish(constants.EVENT.STOP_TEMP)
+
+
+ print("stop debug9")
+
+ def Close(self):
+ self.timer.stop()
+ EventMesh.publish("set_temp_state",0)
+ EventMesh.publish(constants.EVENT.STOP_TEMP)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "health"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "health"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+# class TemperatureScreen(Screen):
+# NAME = "temperature"
+
+# def __init__(self):
+# super().__init__()
+# self.meta = None
+# self.temp_timer = osTimer()
+# self.count = 0
+# def initialization(self):
+# global temperature_screen,temperature_bg_img ,temperature_body_label ,temperature_degree_img ,temperature_value_label,\
+# temperature_wrist_label,temperature_wrist_degree_img ,temperature_wrist_value_label,temperature_measure_end_label,temperature_measure_countdown_label
+# if temperature_screen == None:
+# temperature_screen = lv.obj()
+# print("temperature_screen")
+# temperature_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# temperature_bg_img = lv.img(temperature_screen)
+# temperature_bg_img.set_pos(30, 50)
+# temperature_bg_img.set_size(31, 32)
+# temperature_bg_img.set_src("U:/static/temp_hand.png")
+# temperature_bg_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# temperature_body_label = lv.label(temperature_screen)
+# temperature_body_label.set_pos(80, 40)
+# temperature_body_label.set_size(160, 20)
+# temperature_body_label.set_text("当前腕温")
+# temperature_body_label.set_long_mode(lv.label.LONG.WRAP)
+# temperature_body_label.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+# temperature_body_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# temperature_degree_img = lv.img(temperature_screen)
+# temperature_degree_img.set_pos(146, 70)
+# temperature_degree_img.set_size(22, 22)
+# temperature_degree_img.set_src("U:/static/degree.png")
+# temperature_degree_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# temperature_value_label = lv.label(temperature_screen)
+# temperature_value_label.set_pos(90,73)
+# temperature_value_label.set_size(50, 30)
+# temperature_value_label.set_text("--")
+# temperature_value_label.set_long_mode(lv.label.LONG.WRAP)
+# temperature_value_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# temperature_value_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# # temperature_wrist_label = lv.label(temperature_screen)
+# # temperature_wrist_label.set_pos(80,120)
+# # temperature_wrist_label.set_size(100, 20)
+# # temperature_wrist_label.set_text("当前腕温")
+# # temperature_wrist_label.set_long_mode(lv.label.LONG.WRAP)
+# # temperature_wrist_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# # temperature_wrist_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# # temperature_wrist_degree_img = lv.img(temperature_screen)
+# # temperature_wrist_degree_img.set_pos(150, 150)
+# # temperature_wrist_degree_img.set_size(22, 22)
+# # temperature_wrist_degree_img.set_src("U:/static/degree.png")
+# # temperature_wrist_degree_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# # temperature_wrist_value_label = lv.label(temperature_screen)
+# # temperature_wrist_value_label.set_pos(96,155)
+# # temperature_wrist_value_label.set_size(50, 30)
+# # temperature_wrist_value_label.set_text("--")
+# # temperature_wrist_value_label.set_long_mode(lv.label.LONG.WRAP)
+# # temperature_wrist_value_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# # temperature_wrist_value_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# temperature_measure_countdown_label = lv.label(temperature_screen)
+# temperature_measure_countdown_label.set_pos(0,160)
+# temperature_measure_countdown_label.set_size(240, 30)
+# temperature_measure_countdown_label.set_text("03:00")
+# temperature_measure_countdown_label.set_long_mode(lv.label.LONG.WRAP)
+# temperature_measure_countdown_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# temperature_measure_countdown_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# temperature_measure_end_label = lv.label(temperature_screen)
+# temperature_measure_end_label.set_pos(0,220)
+# temperature_measure_end_label.set_size(240, 30)
+# temperature_measure_end_label.set_text(" ")
+# temperature_measure_end_label.set_long_mode(lv.label.LONG.WRAP)
+# temperature_measure_end_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# temperature_measure_end_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# self.meta = temperature_screen
+# if temperature_value_label != None:
+# temperature_value_label.set_text("--")
+# if temperature_measure_end_label != None:
+# temperature_measure_end_label.set_text(" ")
+# if temperature_measure_countdown_label != None:
+# temperature_measure_countdown_label.set_text("03:00")
+# EventMesh.publish("set_temp_state",1)
+# EventMesh.publish(constants.EVENT.START_TEMP)
+# self.count = 0
+# self.countdown = 3*60
+# self.temp_timer.start(1*1000, 1, self.temp_timerout)
+# def temp_timerout(self,*args):
+# global temperature_value_label,temperature_measure_countdown_label,temperature_measure_end_label
+# self.count += 1
+# EventMesh.publish("system_sleep_rest")#防止黑屏
+# temp = EventMesh.publish(constants.EVENT.GET_TEMP)
+# tmp = str(temp).split('.')[0] + '.' + str(temp).split('.')[1][:1]#获取小数点后一位 舍去小数点最后一位
+# if temperature_measure_end_label != None:
+# temperature_value_label.set_text("{}".format(tmp))
+
+# tmp_f = str(temp).split('.')[0]
+# tmp_f_tmp = int(tmp_f)
+
+# tmp_d = str(temp).split('.')[1][:1]
+# tmp_d_tmp = int(tmp_d)
+
+# if self.countdown > 0:
+# self.countdown-=1
+# min = self.countdown / 60
+# sec = self.countdown % 60
+# if temperature_measure_countdown_label != None:
+# temperature_measure_countdown_label.set_text("{}:{}".format("%02d"%(min),"%02d"%(sec)))
+
+# # print("temp:{} tmp_f:{} tmp_f_tmp:{} tmp_d:{} tmp_d_tmp:{} self.count:{}".format(temp,tmp_f,tmp_f_tmp,tmp_d,tmp_d_tmp,self.count))
+# if self.count >= 3*60:
+# self.count = 0
+# EventMesh.publish("set_temp_state",0)
+# if temperature_measure_end_label != None:
+# temperature_measure_end_label.set_text("测量完成")
+# self.temp_timer.stop()
+# EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
+# EventMesh.publish(constants.EVENT.STOP_TEMP)
+# def Close(self):
+# self.count = 0
+# self.temp_timer.stop()
+# EventMesh.publish("set_temp_state",0)
+# EventMesh.publish(constants.EVENT.STOP_TEMP)
+
+# def done_return(self):
+# EventMesh.publish("load_screen", {"screen": "health"})
+
+# def btn1_release(self):
+# EventMesh.publish("load_screen", {"screen": "health"})
+
+# def btn8_press(self):
+# EventMesh.publish("watch_top_show")
+# EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+
+line_points = [{"x":0,"y":0},{"x":240,"y":0}]
+spo2_screen = None
+spo2_label_0 = None
+spo2_done_img = None
+spo2_label = None
+spo2_label_1 = None
+spo2_line = None
+spo2_last_time = None
+spo2_last_value = None
+heartrate_screen = None
+heartrate_label = None
+heartrate_done_img = None
+heartrate_start_label = None
+heartrate_bpm_label = None
+heartrate_done_label = None
+heartrate_line_bg_img = None
+spo2_line1 = None
+spo2_line2 = None
+spo2_line3 = None
+spo2_line4 = None
+spo2_line5 = None
+spo2_line6 = None
+spo2_line7 = None
+spo2_reset_btn_img = None
+spo2_label = None
+spo2_line_bg_img = None
+spo2_done_img = None
+spo2_done_label = None
+spo2_value_label = None
+spo2_start_label = None
+
+style_line_red = lv.style_t()
+style_line_red.init()
+style_line_red.set_line_width(10)
+style_line_red.set_line_color(lv.color_make(0xff, 0x00, 0x00))
+
+spo2_line_points = [{"x":0,"y":0},{"x":0,"y":0}]
+
+class Spo2Screen(Screen):
+ NAME = "spo2"
+
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.timer = osTimer()
+ self.point = 0
+ self.spo2_value = 0
+
+ def initialization(self):
+ global spo2_screen,spo2_label,spo2_value_label,spo2_reset_btn_img,spo2_done_img,spo2_line_bg_img,spo2_line1,spo2_line2,\
+ spo2_line3,spo2_line4,spo2_line5,spo2_line6,spo2_line7,spo2_line_bg_img ,spo2_start_label ,spo2_done_label
+ if spo2_screen == None:
+ spo2_screen = lv.obj()
+ print("spo2_screen")
+ spo2_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ spo2_label = lv.label(spo2_screen)
+ spo2_label.set_pos(0, 20)
+ spo2_label.set_size(240, 40)
+ spo2_label.set_text("血氧")
+ spo2_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0)
+ spo2_label.set_long_mode(lv.label.LONG.WRAP)
+ spo2_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ spo2_line_bg_img = lv.img(spo2_screen)
+ spo2_line_bg_img.set_pos(5, 60)
+ spo2_line_bg_img.set_size(230, 120)
+ spo2_line_bg_img.set_src("U:/static/spo2_line_bg.png")
+
+
+ spo2_done_img = lv.img(spo2_screen)
+ spo2_done_img.set_pos(20, 240)
+ spo2_done_img.set_src("U:/static/spo2_gif04.png")
+
+ spo2_reset_btn_img = lv.img(spo2_screen)
+ spo2_reset_btn_img.set_pos(0, 192)
+ spo2_reset_btn_img.set_src("U:/static/reset_hr_btn.png")
+ spo2_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN)
+ spo2_reset_btn_img.add_flag(lv.obj.FLAG.CLICKABLE)
+
+ spo2_start_label = lv.label(spo2_screen)
+ spo2_start_label.set_size(240,40)
+ spo2_start_label.set_pos(0,200)
+ spo2_start_label.set_text(" ")
+ spo2_start_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0)
+ spo2_start_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ spo2_start_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+
+
+ spo2_line1 = lv.line(spo2_screen)
+ spo2_line1.set_points(spo2_line_points,2)
+ spo2_line1.set_pos(25,60)
+ spo2_line1.set_size(10,0)
+ spo2_line1.add_style(style_line_red,0)
+
+ spo2_line2 = lv.line(spo2_screen)
+ spo2_line2.set_points(spo2_line_points,2)
+ spo2_line2.set_pos(53,60)
+ spo2_line2.set_size(10,0)
+ spo2_line2.add_style(style_line_red,0)
+
+ spo2_line3 = lv.line(spo2_screen)
+ spo2_line3.set_points(spo2_line_points,2)
+ spo2_line3.set_pos(80,60)
+ spo2_line3.set_size(10,0)
+ spo2_line3.add_style(style_line_red,0)
+
+ spo2_line4 = lv.line(spo2_screen)
+ spo2_line4.set_points(spo2_line_points,2)
+ spo2_line4.set_pos(109,60)
+ spo2_line4.set_size(10,0)
+ spo2_line4.add_style(style_line_red,0)
+
+ spo2_line5 = lv.line(spo2_screen)
+ spo2_line5.set_points(spo2_line_points,2)
+ spo2_line5.set_pos(136,60)
+ spo2_line5.set_size(10,0)
+ spo2_line5.add_style(style_line_red,0)
+
+ spo2_line6 = lv.line(spo2_screen)
+ spo2_line6.set_points(spo2_line_points,2)
+ spo2_line6.set_pos(164,60)
+ spo2_line6.set_size(10,0)
+ spo2_line6.add_style(style_line_red,0)
+
+ spo2_line7 = lv.line(spo2_screen)
+ spo2_line7.set_points(spo2_line_points,2)
+ spo2_line7.set_pos(192,60)
+ spo2_line7.set_size(10,0)
+ spo2_line7.add_style(style_line_red,0)
+
+ spo2_value_label = lv.label(spo2_screen)
+ spo2_value_label.set_size(110, 40)
+ spo2_value_label.set_pos(130, 270)
+ spo2_value_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ spo2_value_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+
+
+ self.meta = spo2_screen
+ spo2_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)),
+ lv.EVENT.CLICKED, None)
+
+ def post_processor_after_initialization(self):
+ self.point = 0
+ self.spo2_value = 0
+ self.show_history_data()
+ self.restart_up(0)
+
+ def restart_up(self,e):
+ global spo2_value_label,heartrate_bpm_label,spo2_start_label,spo2_reset_btn_img
+ self.timer.start(1*500, 1, self.start_measure)
+ if spo2_reset_btn_img != None:
+ spo2_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN)
+ self.point = 0
+
+ spo2_value_label.set_text("- -%")
+ spo2_start_label.set_text("正在测量中.")
+ EventMesh.publish("set_spo2_state",1)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)
+
+ def show_history_data(self):
+ global spo2_line1,spo2_line2,spo2_line3,spo2_line4,spo2_line5,spo2_line6,spo2_line7
+ read_data = {}
+ read_data = EventMesh.publish("get_history_spo2_value")
+ print("hr get_history_spo2_value",read_data)
+ if read_data != None:
+ count = len(read_data)
+ if count != 0:
+ if count >= 7:
+ for i in range(count):
+ value = read_data["0{}".format(i+1)]
+ if value < 80:
+ value = 80
+ if value >= 100:
+ value = 100
+ if value <= 85:
+ value = value - 80
+ line_value = int(value*6)
+ elif value <= 90:
+ value = value-85
+ line_value = int((17/5)*value)+30
+ elif value <= 95:
+ value = value-90
+ line_value = int((21/5)*value)+47
+ elif value <= 100:
+ value = value-95
+ line_value = int((16/5)*value)+68
+
+
+ if line_value >= 100:
+ line_value = 100
+ #print("hr hist",line_value)
+ hr_line_points = [{"x":0,"y":0},{"x":0,"y":line_value}]
+ if i == 0:
+ spo2_line1.set_points(hr_line_points,2)
+ spo2_line1.set_pos(25,160-line_value)
+ spo2_line1.set_size(10,line_value)
+ if i == 1:
+ spo2_line2.set_points(hr_line_points,2)
+ spo2_line2.set_pos(53,160-line_value)
+ spo2_line2.set_size(10,line_value)
+
+ if i == 2:
+ spo2_line3.set_points(hr_line_points,2)
+ spo2_line3.set_pos(80,160-line_value)
+ spo2_line3.set_size(10,line_value)
+
+ if i == 3:
+ spo2_line4.set_points(hr_line_points,2)
+ spo2_line4.set_pos(109,160-line_value)
+ spo2_line4.set_size(10,line_value)
+
+ if i == 4:
+ spo2_line5.set_points(hr_line_points,2)
+ spo2_line5.set_pos(136,160-line_value)
+ spo2_line5.set_size(10,line_value)
+
+ if i == 5:
+ spo2_line6.set_points(hr_line_points,2)
+ spo2_line6.set_pos(164,160-line_value)
+ spo2_line6.set_size(10,line_value)
+
+ if i == 6:
+ spo2_line7.set_points(hr_line_points,2)
+ spo2_line7.set_pos(192,160-line_value)
+ spo2_line7.set_size(10,line_value)
+ else:
+ value = read_data["0{}".format(count)]
+ if value < 80:
+ value = 80
+ if value >= 100:
+ value = 100
+
+ if value <= 85:
+ value = value - 80
+ line_value = int(value*6)
+ elif value <= 90:
+ value = value-85
+ line_value = int((17/5)*value)+30
+ elif value <= 95:
+ value = value-90
+ line_value = int((21/5)*value)+47
+ elif value <= 100:
+ value = value-95
+ line_value = int((16/5)*value)+68
+
+
+ if line_value >= 100:
+ line_value = 100
+ #
+ hr_line_points = [{"x":0,"y":0},{"x":0,"y":line_value}]
+ if count == 1:
+ spo2_line1.set_points(hr_line_points,2)
+ spo2_line1.set_pos(25,160-line_value)
+ spo2_line1.set_size(10,line_value)
+ if count == 2:
+ spo2_line2.set_points(hr_line_points,2)
+ spo2_line2.set_pos(53,160-line_value)
+ spo2_line2.set_size(10,line_value)
+
+ if count == 3:
+ spo2_line3.set_points(hr_line_points,2)
+ spo2_line3.set_pos(80,160-line_value)
+ spo2_line3.set_size(10,line_value)
+
+ if count == 4:
+ spo2_line4.set_points(hr_line_points,2)
+ spo2_line4.set_pos(109,160-line_value)
+ spo2_line4.set_size(10,line_value)
+
+ if count == 5:
+ spo2_line5.set_points(hr_line_points,2)
+ spo2_line5.set_pos(136,160-line_value)
+ spo2_line5.set_size(10,line_value)
+
+ if count == 6:
+ spo2_line6.set_points(hr_line_points,2)
+ spo2_line6.set_pos(164,160-line_value)
+ spo2_line6.set_size(10,line_value)
+
+ if count == 7:
+ spo2_line7.set_points(hr_line_points,2)
+ spo2_line7.set_pos(192,160-line_value)
+ spo2_line7.set_size(10,line_value)
+
+
+ def start_measure(self,*args):
+ global spo2_screen,spo2_label,spo2_start_label,spo2_value_label,spo2_done_img ,spo2_reset_btn_img
+ self.point = self.point + 1
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ if self.point >= 2:
+ if self.spo2_value != 0:
+ spo2_value_label.set_text("{}%".format(self.spo2_value))
+ else:
+ spo2_value_label.set_text("- - %")
+
+ if self.point%4 == 0 :
+ spo2_start_label.set_text("正在测量中..")
+ spo2_done_img.set_src("U:/static/spo2_gif03.png")
+
+ if self.point%4 == 1 :
+ spo2_start_label.set_text("正在测量中...")
+ spo2_done_img.set_src("U:/static/spo2_gif02.png")
+
+ if self.point%4 == 2 :
+ spo2_start_label.set_text("正在测量中.")
+ spo2_done_img.set_src("U:/static/spo2_gif01.png")
+
+ if self.point%4 == 3 :
+ spo2_start_label.set_text("正在测量中.")
+ spo2_done_img.set_src("U:/static/spo2_gif04.png")
+
+
+
+ if self.point > 120: #测20s
+ spo2_done_img.set_src("U:/static/spo2_gif04.png")
+ self.spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ if self.spo2_value >= 85:
+ EventMesh.publish("set_old_spo2_data",self.spo2_value)
+ EventMesh.publish("set_history_spo2_value",self.spo2_value)
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,self.spo2_value)
+ spo2_reset_btn_img.clear_flag(lv.obj.FLAG.HIDDEN)
+
+
+ if self.spo2_value != 0:
+ spo2_start_label.set_text("测量结束,点击重测")
+ spo2_value_label.set_text("{}%".format(self.spo2_value))
+ # heartrate_done_label.set_text("测量完成")
+ else:
+ spo2_value_label.set_text("- - %")
+ spo2_start_label.set_text("测量异常,点击重测")
+
+ self.show_history_data()
+
+ self.timer.stop()
+ self.point = 0
+ EventMesh.publish("set_spo2_state",0)#0代表关闭测试
+ print("stop debug9")
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+
+ def Close(self):
+ self.timer.stop()
+ get_hr_state = EventMesh.publish("get_hr_state")
+ get_spo2_state = EventMesh.publish("get_spo2_state")
+ if get_hr_state == 1 or get_spo2_state == 1:
+ EventMesh.publish("set_spo2_state",0)#0代表关闭测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "health"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "health"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+
+
+# class Spo2Screen(Screen):
+# NAME = "spo2"
+
+# def __init__(self):
+# super().__init__()
+# self.meta = None
+# self.timer = osTimer()
+# self.point = 0
+# self.spo2_value = 0
+# self.last_spo2_value = 0
+# self.rtc = RTC()
+
+# def initialization(self):
+# global spo2_screen ,spo2_label_0 ,spo2_done_img ,spo2_label ,spo2_label_1 ,spo2_line ,spo2_last_time,spo2_last_value
+# if spo2_screen == None:
+# spo2_screen = lv.obj()
+# print("spo2_screen")
+# spo2_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# spo2_label_0 = lv.label(spo2_screen)
+# spo2_label_0.set_pos(0, 10)
+# spo2_label_0.set_size(240, 40)
+# spo2_label_0.set_text("血氧")
+# spo2_label_0.set_long_mode(lv.label.LONG.WRAP)
+# spo2_label_0.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# spo2_label_0.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# spo2_done_img = lv.img(spo2_screen)
+# spo2_done_img.set_pos(89, 50)
+# spo2_done_img.set_size(62, 84)
+# spo2_done_img.set_src("U:/static/IMAGE_SPO2_ONLY_TEST_DONE.png")
+
+# spo2_label = lv.label(spo2_screen)
+# spo2_label.set_size(240,30)
+# spo2_label.set_pos(0,160)
+# spo2_label.set_text(" ")
+# spo2_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# spo2_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# spo2_label_1 = lv.label(spo2_screen)
+# spo2_label_1.set_size(240,40)
+# spo2_label_1.set_pos(0,200)
+# spo2_label_1.set_text("测量中.")
+# spo2_label_1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# spo2_label_1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+# spo2_line = lv.line(spo2_screen)
+# spo2_line.set_points(line_points,2)
+# spo2_line.set_pos(0,240)
+# spo2_line.set_size(240,10)
+# spo2_line.add_style(style_line,0)
+
+# spo2_last_time = lv.label(spo2_screen)
+# spo2_last_time.set_size(240, 15)
+# spo2_last_time.set_pos(0, 250)
+# spo2_last_time.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# spo2_last_time.set_text(" ")
+# spo2_last_time.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+
+# spo2_last_value = lv.label(spo2_screen)
+# spo2_last_value.set_size(240, 15)
+# spo2_last_value.set_pos(0, 280)
+# spo2_last_value.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# spo2_last_value.set_text(" ")
+# spo2_last_value.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# self.meta = spo2_screen
+
+# self.point = 0
+# self.spo2_value = 0
+# self.timer.start(1*1000, 1, self.start_measure)
+# EventMesh.publish("set_spo2_state",1)#2代表后台进入血氧测试
+# EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)
+# self.last_spo2_value = EventMesh.publish("get_old_spo2_data")
+# spo2_label.set_text("--%")
+# if self.last_spo2_value == 0:
+# spo2_last_value.set_text(" ")
+# else:
+# spo2_last_value.set_text("{}%".format(self.last_spo2_value))
+
+# def start_measure(self,*args):
+# global spo2_screen ,spo2_label_0 ,spo2_done_img ,spo2_label ,spo2_label_1 ,spo2_line ,spo2_last_time,spo2_last_value
+# self.point = self.point + 1
+# EventMesh.publish("system_sleep_rest")#防止黑屏
+# self.spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+# if self.spo2_value == 0:
+# spo2_label.set_text("--%")
+# else:
+# spo2_label.set_text("{} %".format(self.spo2_value))
+# if self.point%4 == 0 :
+# spo2_label_1.set_text("测量中..")
+# if self.point%4 == 1 :
+# spo2_label_1.set_text("测量中...")
+# if self.point%4 == 2 :
+# spo2_label_1.set_text("测量中....")
+# if self.point%4 == 3 :
+# spo2_label_1.set_text("测量中.")
+
+# if self.point > 60: #测20s
+# self.spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+# # print("ui self.spo2_value :{}".format(self.spo2_value))
+# if self.spo2_value > 85 and self.spo2_value != None:
+# EventMesh.publish("set_old_spo2_data",self.spo2_value)
+# EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,self.spo2_value)
+# spo2_label.set_text("{} %".format(self.spo2_value))
+# if self.spo2_value == 0:
+# spo2_label.set_text(" ")
+# spo2_label_1.set_text("退出,请重新测量")
+# self.last_spo2_value = EventMesh.publish("get_old_spo2_data")
+# spo2_last_value.set_text(" ")
+# else:
+# self.last_spo2_value = self.spo2_value
+# spo2_last_value.set_text("{}%".format(self.last_spo2_value))
+# spo2_label_1.set_text("测量完成")
+# time = EventMesh.publish("screen_get_time")
+# #print("time ",time)
+# rtc_time = self.rtc.datetime()
+# time_time =" {}:{}".format("%02d"%(time[0][0]),"%02d"%(time[0][1]))#测量时间
+# spo2_last_time.set_text(str(rtc_time[0])+'/'+str(rtc_time[1])+'/'+str(rtc_time[2])+str(time_time))
+
+
+
+# self.timer.stop()
+# self.point = 0
+# EventMesh.publish("set_spo2_state",0)#0代表关闭测试
+# EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+# # spo2_last_time.set_text()
+
+# def Close(self):
+# self.timer.stop()
+# get_hr_state = EventMesh.publish("get_hr_state")
+# get_spo2_state = EventMesh.publish("get_spo2_state")
+# if get_hr_state == 1 or get_spo2_state == 1:
+# EventMesh.publish("set_spo2_state",0)#0代表关闭测试
+# EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+
+# def done_return(self):
+# EventMesh.publish("load_screen", {"screen": "health"})
+
+# def btn1_release(self):
+# EventMesh.publish("load_screen", {"screen": "health"})
+
+# def btn8_press(self):
+# EventMesh.publish("watch_top_show")
+# EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+
+
+
+
+
+# -------------------------------------------countdown screen----------------------------------------------------------
+countdown_screen = None
+countdown_title = None
+countdown_hour = None
+countdown_mao = None
+countdown_mao = None
+countdown_mao1 = None
+countdown_sec = None
+countdown_hour_up = None
+countdown_hour_up_btn = None
+countdown_hour_down = None
+countdown_hour_down_btn = None
+countdown_min_up = None
+countdown_min_up_btn = None
+countdown_min_down = None
+countdown_min_down_btn = None
+countdown_sec_up = None
+countdown_sec_up_btn = None
+countdown_sec_down = None
+countdown_sec_down_btn = None
+countdown_reset_img = None
+countdown_reset_imgbtn = None
+countdown_start_img = None
+countdown_start_imgbtn = None
+countdown_stop_img = None
+countdown_min = None
+class CountdownScreen(Screen):
+ NAME = "countdown"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.timer = osTimer()
+ self.sec = 0
+ self.min = 0
+ self.hour = 0
+ self.total = 0
+ self.flag = 1
+ self.g_state = 0
+ self.g_end = 0
+ self.total = 0
+ self.time_tmp = 0
+ self.timer_cb = 0
+
+ def initialization(self):
+ global countdown_screen ,countdown_title,countdown_hour ,countdown_mao ,countdown_mao ,countdown_mao1 ,\
+ countdown_sec ,countdown_hour_up ,countdown_hour_up_btn ,countdown_hour_down ,countdown_hour_down_btn ,\
+ countdown_min_up,countdown_min_up_btn ,countdown_min_down,countdown_min_down_btn,countdown_sec_up ,\
+ countdown_sec_up_btn,countdown_sec_down ,countdown_sec_down_btn ,countdown_reset_img ,countdown_reset_imgbtn ,\
+ countdown_start_img,countdown_start_imgbtn,countdown_stop_img ,countdown_min
+ if countdown_screen == None :
+ countdown_screen = lv.obj()
+ print("countdown_screen")
+ countdown_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_title = lv.label(countdown_screen)
+ countdown_title.set_pos(0, 20)
+ countdown_title.set_size(240, 20)
+ countdown_title.set_text("倒计时")
+ countdown_title.set_long_mode(lv.label.LONG.WRAP)
+ countdown_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ countdown_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_hour = lv.label(countdown_screen)
+ countdown_hour.set_pos(30, 140)
+ countdown_hour.set_size(60, 30)
+ countdown_hour.set_text("00")
+ countdown_hour.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_hour.set_long_mode(lv.label.LONG.WRAP)
+ countdown_hour.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ countdown_mao = lv.label(countdown_screen)
+ countdown_mao.set_pos(82, 138)
+ countdown_mao.set_size(30, 30)
+ countdown_mao.set_text(":")
+ countdown_mao.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_mao.set_long_mode(lv.label.LONG.WRAP)
+ countdown_mao.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+
+ countdown_min = lv.label(countdown_screen)
+ countdown_min.set_pos(95, 140)
+ countdown_min.set_size(60, 30)
+ countdown_min.set_text("00")
+ countdown_min.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_min.set_long_mode(lv.label.LONG.WRAP)
+ countdown_min.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ countdown_mao1 = lv.label(countdown_screen)
+ countdown_mao1.set_pos(146, 138)
+ countdown_mao1.set_size(30, 30)
+ countdown_mao1.set_text(":")
+ countdown_mao1.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_mao1.set_long_mode(lv.label.LONG.WRAP)
+ countdown_mao1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+
+ countdown_sec = lv.label(countdown_screen)
+ countdown_sec.set_pos(160, 140)
+ countdown_sec.set_size(60, 30)
+ countdown_sec.set_text("00")
+ countdown_sec.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_sec.set_long_mode(lv.label.LONG.WRAP)
+ countdown_sec.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ countdown_hour_up = lv.img(countdown_screen)
+ countdown_hour_up.set_size(34, 30)
+ countdown_hour_up.set_pos(36, 100)
+ countdown_hour_up.set_src("U:/static/time_up.png")
+ countdown_hour_up.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_hour_up_btn= lv.img(countdown_screen)
+ countdown_hour_up_btn.set_size(62, 70)
+ countdown_hour_up_btn.set_pos(20, 80)
+ countdown_hour_up_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+ countdown_hour_down = lv.img(countdown_screen)
+ countdown_hour_down.set_size(34, 30)
+ countdown_hour_down.set_pos(36, 180)
+ countdown_hour_down.set_src("U:/static/time_down.png")
+ countdown_hour_down.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_hour_down.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_hour_down_btn= lv.img(countdown_screen)
+ countdown_hour_down_btn.set_size(62, 80)
+ countdown_hour_down_btn.set_pos(20, 150)
+ countdown_hour_down_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+ countdown_min_up = lv.img(countdown_screen)
+ countdown_min_up.set_size(34, 30)
+ countdown_min_up.set_pos(99, 100)
+ countdown_min_up.set_src("U:/static/time_up.png")
+ countdown_min_up.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_min_up.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_min_up_btn= lv.img(countdown_screen)
+ countdown_min_up_btn.set_size(64, 70)
+ countdown_min_up_btn.set_pos(82, 80)
+ countdown_min_up_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+
+ countdown_min_down = lv.img(countdown_screen)
+ countdown_min_down.set_size(34, 30)
+ countdown_min_down.set_pos(99, 180)
+ countdown_min_down.set_src("U:/static/time_down.png")
+ countdown_min_down.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_min_down.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_min_down_btn= lv.img(countdown_screen)
+ countdown_min_down_btn.set_size(64, 80)
+ countdown_min_down_btn.set_pos(82, 150)
+ countdown_min_down_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+ countdown_sec_up = lv.img(countdown_screen)
+ countdown_sec_up.set_size(34, 30)
+ countdown_sec_up.set_pos(165, 100)
+ countdown_sec_up.set_src("U:/static/time_up.png")
+ countdown_sec_up.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_sec_up_btn = lv.img(countdown_screen)
+ countdown_sec_up_btn.set_size(64, 70)
+ countdown_sec_up_btn.set_pos(146, 80)
+ countdown_sec_up_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+ countdown_sec_down = lv.img(countdown_screen)
+ countdown_sec_down.set_size(34, 30)
+ countdown_sec_down.set_pos(165, 180)
+ countdown_sec_down.set_src("U:/static/time_down.png")
+ countdown_sec_down.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_sec_down.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_sec_down_btn = lv.img(countdown_screen)
+ countdown_sec_down_btn.set_size(64, 80)
+ countdown_sec_down_btn.set_pos(146, 150)
+ countdown_sec_down_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+ countdown_reset_img = lv.img(countdown_screen)
+ countdown_reset_img.set_size(99, 36)
+ countdown_reset_img.set_src("U:/static/stopwatch_reset.png")
+ countdown_reset_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_reset_img.set_pos(10, 260)
+
+ countdown_reset_imgbtn = lv.img(countdown_screen)
+ countdown_reset_imgbtn.set_size(99, 70)
+ countdown_reset_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_reset_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_reset_imgbtn.set_pos(10, 240)
+
+
+
+ countdown_start_img = lv.img(countdown_screen)
+ countdown_start_img.set_size(99, 36)
+ countdown_start_img.set_src("U:/static/stopwatch_play.png")
+ countdown_start_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_start_img.set_pos(120, 260)
+
+ countdown_start_imgbtn = lv.img(countdown_screen)
+ countdown_start_imgbtn.set_size(99, 70)
+ countdown_start_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_start_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_start_imgbtn.set_pos(120, 240)
+
+
+
+ countdown_stop_img = lv.img(countdown_screen)
+ countdown_stop_img.set_size(99, 36)
+ countdown_stop_img.set_src("U:/static/stopwatch_stop.png")
+ countdown_stop_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_stop_img.set_pos(120, 260)
+ countdown_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
+
+ countdown_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_reset_img.clear_flag(lv.obj.FLAG.HIDDEN)
+
+ self.meta = countdown_screen
+
+ countdown_sec_up_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.sec_up(e)),
+ lv.EVENT.CLICKED, None)
+ countdown_sec_down_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.sec_down(e)),
+ lv.EVENT.CLICKED, None)
+ countdown_min_up_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.min_up(e)),
+ lv.EVENT.CLICKED, None)
+ countdown_min_down_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.min_down(e)),
+ lv.EVENT.CLICKED, None)
+ countdown_hour_up_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.hour_up(e)),
+ lv.EVENT.CLICKED, None)
+ countdown_hour_down_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.hour_down(e)),
+ lv.EVENT.CLICKED, None)
+ countdown_start_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.start(e)),
+ lv.EVENT.CLICKED, None)
+ countdown_reset_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.reset(e)),
+ lv.EVENT.CLICKED, None)
+ # countdown_stop_imgbtn.add_event_cb(lambda e: self.stop(e),
+ # lv.EVENT.CLICKED, None)
+ date_tmp = utime.localtime()
+ self.time_tmp = utime.mktime(date_tmp)
+ if self.g_state == 0:
+ countdown_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_reset_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_up.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_down.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min_up.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min_down.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec_up.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec_down.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_title.clear_flag(lv.obj.FLAG.HIDDEN)
+ self.g_end = 0
+ self.total = 0
+ self.hour = 0
+ self.min = 0
+ self.sec = 0
+ self.show_value()
+ if self.g_state == 1:
+ if self.timer_cb == 1:
+ EventMesh.publish("set_countdown_off_state", [0,self.g_state])
+ self.timer.start(1000,1,self.fun)
+
+ def sec_up(self,e):
+ EventMesh.publish("add_countdown_sec")
+ self.sec = EventMesh.publish("get_countdown_sec")
+ print("sec_up:",self.sec)
+ self.show_value()
+
+ def sec_down(self,e):
+ EventMesh.publish("reduce_countdown_sec")
+ self.sec = EventMesh.publish("get_countdown_sec")
+ print("sec_down:",self.sec)
+ self.show_value()
+
+ def min_up(self,e):
+ EventMesh.publish("add_countdown_min")
+ self.min = EventMesh.publish("get_countdown_min")
+ print("min_up:",self.min)
+ self.show_value()
+
+ def min_down(self,e):
+ EventMesh.publish("reduce_countdown_min")
+ self.min = EventMesh.publish("get_countdown_min")
+ print("min_down:",self.min)
+ self.show_value()
+
+ def hour_up(self,e):
+ EventMesh.publish("add_countdown_hour")
+ self.hour = EventMesh.publish("get_countdown_hour")
+
+ print("hour_up:",self.hour)
+ self.show_value()
+
+ def hour_down(self,e):
+ EventMesh.publish("reduce_countdown_hour")
+ self.hour = EventMesh.publish("get_countdown_hour")
+ print("hour_down:",self.hour)
+ self.show_value()
+
+ def start(self,e):
+ global countdown_screen ,countdown_title,countdown_hour ,countdown_mao ,countdown_mao ,countdown_mao1 ,\
+ countdown_sec ,countdown_hour_up ,countdown_hour_up_btn ,countdown_hour_down ,countdown_hour_down_btn ,\
+ countdown_min_up,countdown_min_up_btn ,countdown_min_down,countdown_min_down_btn,countdown_sec_up ,\
+ countdown_sec_up_btn,countdown_sec_down ,countdown_sec_down_btn ,countdown_reset_img ,countdown_reset_imgbtn ,\
+ countdown_start_img,countdown_start_imgbtn,countdown_stop_img ,countdown_min
+ self.total = self.hour*60*60 + self.min*60 + self.sec
+ print("--00:",self.total,self.hour,self.min,self.sec,self.g_state)
+ if self.g_state == 1:
+ self.g_state = 2
+ self.stop()
+ elif self.g_state == 2:
+ self.g_state = 1
+ if self.total > 0:
+ date_tmp = utime.localtime()
+ timeSecond = utime.mktime(date_tmp)
+ print("start self.timeSecond:{}".format(timeSecond))
+ EventMesh.publish("set_countdown_all_time", [self.total,timeSecond])
+ if self.g_state != 2:
+ self.g_state = 1
+ self.g_end = 0
+ date_tmp = utime.localtime()
+ self.timeSecond = utime.mktime(date_tmp)
+ self.show_value()
+ self.timer.start(1000,1,self.fun)
+ countdown_hour_up.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_down.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_up.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_down.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min_up.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min_down.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec_up.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec_down.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_start_img.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_stop_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_reset_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ EventMesh.publish("set_countdown_off_state", [0,self.g_state])
+
+ def stop(self):
+ global countdown_screen ,countdown_title,countdown_hour ,countdown_mao ,countdown_mao ,countdown_mao1 ,\
+ countdown_sec ,countdown_hour_up ,countdown_hour_up_btn ,countdown_hour_down ,countdown_hour_down_btn ,\
+ countdown_min_up,countdown_min_up_btn ,countdown_min_down,countdown_min_down_btn,countdown_sec_up ,\
+ countdown_sec_up_btn,countdown_sec_down ,countdown_sec_down_btn ,countdown_reset_img ,countdown_reset_imgbtn ,\
+ countdown_start_img,countdown_start_imgbtn,countdown_stop_img ,countdown_min
+ print("in stop")
+ countdown_hour_up.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_down.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_up.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_down.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min_up.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min_down.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec_up.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec_down.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_reset_img.clear_flag(lv.obj.FLAG.HIDDEN)
+
+ self.g_end = 0
+ self.timer.stop()
+ # self.show_value()
+ # EventMesh.publish("load_screen", {"screen": "countdown"})
+
+ def fun(self,e):
+ date_tmp = utime.localtime()
+ self.time_tmp = utime.mktime(date_tmp)
+ total_sec = self.time_tmp - self.timeSecond
+ # print("total_sec:{} self.time_tmp:{} self.timeSecond:{} self.total:{}".format(total_sec,self.time_tmp,self.timeSecond,self.total))
+ if self.total > 0:
+ self.total = self.total - total_sec
+ self.timeSecond = self.time_tmp
+
+
+ self.hour = self.total//3600
+ self.min = self.total%3600//60
+ self.sec = self.total%60
+
+
+ # print("self.total:{} self.time_tmp:{} self.timeSecond:{} test_hour:{} test_min:{} test_sec:{}".format(self.total,self.time_tmp,self.timeSecond,test_hour,test_min,test_sec))
+ self.show_value()
+ # print("Close self.timeSecond:22")
+ EventMesh.publish("set_countdown_all_time", [self.total,self.timeSecond])
+ if self.total <= 0:
+ self.g_state = 0
+ self.g_end = 1
+ self.hour = 0
+ self.min = 0
+ self.sec = 0
+ EventMesh.publish("set_countdown_off_state", [0,self.g_state])
+ self.timer.stop()
+ self.show_value()
+ EventMesh.publish("load_screen", {"screen": "countdown_end"})
+
+ # self.total = self.total - 1
+
+ # self.sec = self.sec - 1
+ # if self.sec < 0:
+ # self.sec = 59
+
+ def Close(self):
+ time = EventMesh.publish("get_countdown_all_time")
+ if time > 0 and self.g_state == 1:
+ self.timer_cb = 1
+ date_tmp = utime.localtime()
+ self.timeSecond = utime.mktime(date_tmp)
+ EventMesh.publish("set_countdown_off_state", [1,self.g_state])
+ # print("Close self.timeSecond:{}".format(self.timeSecond))
+ EventMesh.publish("set_countdown_all_time", [self.total,self.timeSecond])
+ self.timer.stop()
+ else:
+ msg_tmp = EventMesh.publish("get_countdown_off_state")
+ self.g_state = msg_tmp[1]
+ EventMesh.publish("set_countdown_off_state", [0,self.g_state])
+
+ def reset(self,e):
+ global countdown_screen ,countdown_title,countdown_hour ,countdown_mao ,countdown_mao ,countdown_mao1 ,\
+ countdown_sec ,countdown_hour_up ,countdown_hour_up_btn ,countdown_hour_down ,countdown_hour_down_btn ,\
+ countdown_min_up,countdown_min_up_btn ,countdown_min_down,countdown_min_down_btn,countdown_sec_up ,\
+ countdown_sec_up_btn,countdown_sec_down ,countdown_sec_down_btn ,countdown_reset_img ,countdown_reset_imgbtn ,\
+ countdown_start_img,countdown_start_imgbtn,countdown_stop_img ,countdown_min
+ # print("in reset")
+ self.timer.stop()
+ self.hour = 0
+ self.min = 0
+ self.sec = 0
+ self.g_state = 0
+ self.g_end = 0
+ self.total = 0
+ EventMesh.publish("set_countdown_off_state", [0,self.g_state])
+ EventMesh.publish("reset_time_countdown")
+ countdown_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_reset_img.clear_flag(lv.obj.FLAG.HIDDEN)
+
+ countdown_hour_up.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_down.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min_up.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min_down.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec_up.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec_down.clear_flag(lv.obj.FLAG.HIDDEN)
+ self.show_value()
+
+
+ def show_value(self):
+ global countdown_screen ,countdown_title,countdown_hour ,countdown_mao ,countdown_mao ,countdown_mao1 ,\
+ countdown_sec ,countdown_hour_up ,countdown_hour_up_btn ,countdown_hour_down ,countdown_hour_down_btn ,\
+ countdown_min_up,countdown_min_up_btn ,countdown_min_down,countdown_min_down_btn,countdown_sec_up ,\
+ countdown_sec_up_btn,countdown_sec_down ,countdown_sec_down_btn ,countdown_reset_img ,countdown_reset_imgbtn ,\
+ countdown_start_img,countdown_start_imgbtn,countdown_stop_img ,countdown_min
+
+ countdown_sec.set_text(str("%02d"%(self.sec)))
+ countdown_min.set_text(str("%02d"%(self.min)))
+ countdown_hour.set_text(str("%02d"%(self.hour)))
+
+ def lcd_on(self):
+ print("lcd_on self.timer_cb:{}".format(self.timer_cb))
+ time = EventMesh.publish("get_countdown_all_time")
+
+ if time > 0 and self.g_state != 0:
+ if self.g_state == 1:
+ if self.timer_cb != 0:
+ self.timer_cb = 0
+ EventMesh.publish("set_countdown_off_state", [0,self.g_state])
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ total_sec = time_tmp - self.timeSecond
+ # print("total_sec:{} self.time_tmp:{} self.timeSecond:{} self.total:{}".format(total_sec,self.time_tmp,self.timeSecond,self.total))
+ if self.total > 0:
+ self.total = self.total - total_sec
+ self.timeSecond = self.time_tmp
+ self.hour = self.total//3600
+ self.min = self.total%3600//60
+ self.sec = self.total%60
+ self.show_value()
+ self.timer.start(1000,1,self.fun)
+ else:
+ msg_tmp = EventMesh.publish("get_countdown_off_state")
+ self.g_state = msg_tmp[1]
+ EventMesh.publish("set_countdown_off_state", [0,self.g_state])
+
+ else:
+ self.reset(0)
+ msg_tmp = EventMesh.publish("get_countdown_off_state")
+ self.g_state = msg_tmp[1]
+ EventMesh.publish("set_countdown_off_state", [0,self.g_state])
+
+ def lcd_off(self):
+ time = EventMesh.publish("get_countdown_all_time")
+ if time > 0 and self.g_state == 1:
+ self.timer_cb = 1
+ date_tmp = utime.localtime()
+ self.timeSecond = utime.mktime(date_tmp)
+ EventMesh.publish("set_countdown_off_state", [1,self.g_state])
+ EventMesh.publish("set_countdown_all_time", [self.total,self.timeSecond])
+ self.timer.stop()
+ else:
+ EventMesh.publish("set_countdown_off_state", [0,self.g_state])
+
+ def done_return(self):
+ if self.g_state == 0:
+ self.timer.stop()
+ if self.g_end == 1:
+ EventMesh.publish("load_screen", {"screen": "countdown"})
+ else:
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+ def btn1_release(self):
+ if self.g_state == 0:
+ self.timer.stop()
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+ def btn8_press(self):
+ if self.g_state == 0:
+ self.timer.stop()
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+#结束倒计时显示图标
+countdown_end_screen = None
+countdown_end_img = None
+countdown_end_label = None
+class CountdownEndScreen(Screen):
+ NAME = "countdown_end"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.FIND_timer=osTimer()
+ self.aud = audio.Audio(0)
+ self.FIND_timer_count = 0
+
+ def initialization(self):
+ global countdown_end_screen ,countdown_end_img ,countdown_end_label
+ if countdown_end_screen == None:
+ countdown_end_screen = lv.obj()
+ print("countdown_end_screen")
+ countdown_end_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_end_img = lv.img(countdown_end_screen)
+ countdown_end_img.set_size(140, 140)
+ countdown_end_img.set_pos(50, 60)
+ countdown_end_img.set_src("U:/static/time_finish.png")
+ countdown_end_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_end_label = lv.label(countdown_end_screen)
+ countdown_end_label.set_pos(0, 240)
+ countdown_end_label.set_size(240, 40)
+ countdown_end_label.set_text("时间到")
+ countdown_end_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_end_label.set_long_mode(lv.label.LONG.WRAP)
+ countdown_end_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ self.meta = countdown_end_screen
+ self.FIND_timer_count = 0
+ self.FIND_timer.start(3000, 1, self.FIND_timer_cb)
+ self.aud.play(1, 1, 'U:/static/audio_audio_haixiu.mp3') #播放声音
+
+ def FIND_timer_cb(self, *args):
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.FIND_timer_count += 1
+ if self.FIND_timer_count >= 4: #120秒
+ self.stop_FIND()
+ EventMesh.publish("load_screen", {"screen": "countdown"})
+ return
+ self.aud.play(1, 1, 'U:/static/audio_audio_haixiu.mp3')
+
+ def stop_FIND(self) :
+ self.FIND_timer.stop()
+ self.aud.stopAll()
+
+ def Close(self):
+ self.stop_FIND()
+
+ def done_left_to_right(self):
+ self.stop_FIND()
+ EventMesh.publish("load_screen", {"screen": "countdown"})
+
+ def done_right_to_left(self):
+ self.stop_FIND()
+ EventMesh.publish("load_screen", {"screen": "countdown"})
+
+ def done_bottom_to_top(self):
+ self.stop_FIND()
+ EventMesh.publish("load_screen", {"screen": "countdown"})
+
+ def done_top_to_bottom(self):
+ self.stop_FIND()
+ EventMesh.publish("load_screen", {"screen": "countdown"})
+
+ def done_return(self):
+ self.stop_FIND()
+ EventMesh.publish("load_screen", {"screen": "countdown"})
+
+ def done_click(self):
+ self.stop_FIND()
+ EventMesh.publish("load_screen", {"screen": "countdown"})
+
+ def btn1_release(self):
+ self.stop_FIND()
+ EventMesh.publish("load_screen", {"screen": "countdown"})
+
+ def btn8_press(self):
+ self.stop_FIND()
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+# -------------------------------------------stopwatch screen----------------------------------------------------------
+
+
+stopwatch_screen = None
+stopwatch_title = None
+stopwatch_label_min = None
+stopwatch_mao = None
+stopwatch_label_sec = None
+stopwatch_mao1 = None
+stopwatch_label_ms = None
+stopwatch_reset_img = None
+stopwatch_reset_imgbtn = None
+stopwatch_start_img = None
+stopwatch_start_imgbtn = None
+stopwatch_stop_img = None
+class StopwatchScreen(Screen):
+ NAME = "stopwatch"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.ms_value = 0
+ self.sec_value = 0
+ self.min_value = 0
+ self.s_state = 0
+ self.total_time = 0
+ self.TimeSecond = 0
+ self.timer = osTimer()
+
+ def initialization(self):
+ global stopwatch_screen,stopwatch_title,stopwatch_label_min,stopwatch_mao,stopwatch_label_sec ,\
+ stopwatch_mao1 ,stopwatch_label_ms,stopwatch_reset_img ,topwatch_reset_imgbtn ,stopwatch_start_img ,\
+ stopwatch_start_imgbtn, stopwatch_stop_img
+ if stopwatch_screen == None :
+ stopwatch_screen = lv.obj()
+ print("stopwatch_screen")
+ stopwatch_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ stopwatch_title = lv.label(stopwatch_screen)
+ stopwatch_title.set_pos(0, 20)
+ stopwatch_title.set_size(240, 20)
+ stopwatch_title.set_text("秒表")
+ stopwatch_title.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ stopwatch_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ stopwatch_label_min = lv.label(stopwatch_screen)
+ stopwatch_label_min.set_pos(30, 140)
+ stopwatch_label_min.set_size(60, 30)
+ stopwatch_label_min.set_text("00")
+ stopwatch_label_min.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_label_min.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_label_min.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ stopwatch_mao = lv.label(stopwatch_screen)
+ stopwatch_mao.set_pos(82, 138)
+ stopwatch_mao.set_size(30, 30)
+ stopwatch_mao.set_text(":")
+ stopwatch_mao.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_mao.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_mao.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+
+ stopwatch_label_sec = lv.label(stopwatch_screen)
+ stopwatch_label_sec.set_pos(95, 140)
+ stopwatch_label_sec.set_size(60, 30)
+ stopwatch_label_sec.set_text("00")
+ stopwatch_label_sec.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_label_sec.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_label_sec.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ stopwatch_mao1 = lv.label(stopwatch_screen)
+ stopwatch_mao1.set_pos(146, 138)
+ stopwatch_mao1.set_size(30, 30)
+ stopwatch_mao1.set_text(".")
+ stopwatch_mao1.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_mao1.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_mao1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+
+ stopwatch_label_ms = lv.label(stopwatch_screen)
+ stopwatch_label_ms.set_pos(160, 140)
+ stopwatch_label_ms.set_size(60, 30)
+ stopwatch_label_ms.set_text("0")
+ stopwatch_label_ms.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_label_ms.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_label_ms.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+
+
+
+ stopwatch_reset_img = lv.img(stopwatch_screen)
+ stopwatch_reset_img.set_size(99, 36)
+ stopwatch_reset_img.set_src("U:/static/stopwatch_reset.png")
+ stopwatch_reset_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_reset_img.set_pos(10, 210)
+
+ stopwatch_reset_imgbtn = lv.img(stopwatch_screen)
+ stopwatch_reset_imgbtn.set_size(99, 76)
+ stopwatch_reset_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+ stopwatch_reset_imgbtn.set_pos(10, 190)
+
+
+ stopwatch_start_img = lv.img(stopwatch_screen)
+ stopwatch_start_img.set_size(99, 36)
+ stopwatch_start_img.set_src("U:/static/stopwatch_play.png")
+ stopwatch_start_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_start_img.set_pos(115, 210)
+
+
+ stopwatch_start_imgbtn = lv.img(stopwatch_screen)
+ stopwatch_start_imgbtn.set_size(99, 76)
+ stopwatch_start_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+ stopwatch_start_imgbtn.set_pos(115, 190)
+
+
+ stopwatch_stop_img = lv.img(stopwatch_screen)
+ stopwatch_stop_img.set_size(99, 36)
+ stopwatch_stop_img.set_src("U:/static/stopwatch_stop.png")
+ stopwatch_stop_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_stop_img.set_pos(115, 210)
+ stopwatch_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ stopwatch_start_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.start(e)),
+ lv.EVENT.CLICKED, None)
+
+ stopwatch_reset_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.reset(e)),
+ lv.EVENT.CLICKED, None)
+ self.meta = stopwatch_screen
+
+ if self.s_state == 0:
+ self.reset(0)
+ if self.s_state == 1:
+ date_tmp = utime.localtime()
+ timeSecond = utime.mktime(date_tmp)
+ reduce = timeSecond - self.TimeSecond
+ self.total_time = self.total_time+reduce
+ if self.total_time >= 99*60:
+ self.total_time = 99*60
+ self.ms_value = 0
+ stopwatch_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ stopwatch_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ self.show_value()
+ else:
+ self.timer.start(100,1,self._fun)
+
+
+ def start(self, e):
+ global stopwatch_screen,stopwatch_title,stopwatch_label_min,stopwatch_mao,stopwatch_label_sec ,\
+ stopwatch_mao1 ,stopwatch_label_ms,stopwatch_reset_img ,topwatch_reset_imgbtn ,stopwatch_start_img ,\
+ stopwatch_start_imgbtn, stopwatch_stop_img
+ print("stopwatch start:{}".format(self.s_state))
+ #self.timer.start(100, 1, self._fun)
+
+ if self.s_state == 1:
+ self.s_state = 2
+ self.paused()
+ elif self.s_state == 2:
+ self.s_state = 1
+ if self.s_state != 2:
+ self.s_state = 1
+ if self.total_time >= 99*60:
+ self.ms_value = 0
+ self.sec_value = 0
+ self.min_value = 0
+ self.total_time = 0
+ self.show_value()
+ self.timer.start(100,1,self._fun)
+ stopwatch_stop_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ stopwatch_start_img.add_flag(lv.obj.FLAG.HIDDEN)
+ # print("ms_value start:{} {} {}".format(self.ms_value,self.sec_value,self.min_value))
+
+
+
+ def paused(self):
+ global stopwatch_screen,stopwatch_title,stopwatch_label_min,stopwatch_mao,stopwatch_label_sec ,\
+ stopwatch_mao1 ,stopwatch_label_ms,stopwatch_reset_img ,topwatch_reset_imgbtn ,stopwatch_start_img ,\
+ stopwatch_start_imgbtn, stopwatch_stop_img
+ print("stopwatch pause")
+ stopwatch_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ stopwatch_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ self.timer.stop()
+ self.show_value()
+
+ def reset(self,e):
+ global stopwatch_screen,stopwatch_title,stopwatch_label_min,stopwatch_mao,stopwatch_label_sec ,\
+ stopwatch_mao1 ,stopwatch_label_ms,stopwatch_reset_img ,topwatch_reset_imgbtn ,stopwatch_start_img ,\
+ stopwatch_start_imgbtn, stopwatch_stop_img
+ print("stopwatch reset")
+
+ self.sec_value = 0
+ self.min_value = 0
+ self.ms_value = 0
+ self.s_state = 0
+ self.total_time = 0
+ stopwatch_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ stopwatch_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ self.timer.stop()
+ self.show_value()
+
+ def _fun(self,e):
+ self.ms_value += 1
+ if self.ms_value > 9:
+ self.ms_value = 0
+ self.sec_value += 1
+ self.total_time+=1
+ if self.sec_value > 59:
+ self.sec_value = 0
+ if self.total_time > 99*60:
+ self.total_time = 99*60
+ self.timer.stop()
+ stopwatch_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ stopwatch_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+
+ self.show_value()
+
+ def show_value(self):
+ global stopwatch_screen,stopwatch_title,stopwatch_label_min,stopwatch_mao,stopwatch_label_sec ,\
+ stopwatch_mao1 ,stopwatch_label_ms,stopwatch_reset_img ,topwatch_reset_imgbtn ,stopwatch_start_img ,\
+ stopwatch_start_imgbtn, stopwatch_stop_img
+ if self.total_time >= 99*60:
+ self.total_time = 99*60
+ test_s = self.total_time % 60
+ test_m = self.total_time//60
+ # print("test_s:{} test_m:{} self.total_time:{}".format(test_s,test_m,self.total_time))
+
+ stopwatch_label_ms.set_text(str("%d"%(self.ms_value)))
+ stopwatch_label_sec.set_text(str("%02d"%(test_s)))
+ stopwatch_label_min.set_text(str("%02d"%(test_m)))
+
+ def Close(self):
+ if self.s_state == 1:
+ self.timer.stop()
+ date_tmp = utime.localtime()
+ self.TimeSecond = utime.mktime(date_tmp)
+
+ def lcd_on(self):
+ if self.s_state == 1:
+ date_tmp = utime.localtime()
+ timeSecond = utime.mktime(date_tmp)
+ reduce = timeSecond - self.TimeSecond
+ self.total_time = self.total_time+reduce
+ total = self.total_time // 60
+ if total >= 99:
+ self.total_time = 99*60
+ self.timer.stop()
+ self.s_state = 0
+ self.ms_value = 0
+ stopwatch_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ stopwatch_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ self.show_value()
+ else:
+
+ print("stopwatch reset start:{}".format(self.s_state))
+ #self.timer.start(100, 1, self._fun)
+ self.show_value()
+ self.timer.start(100,1,self._fun)
+ stopwatch_stop_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ stopwatch_start_img.add_flag(lv.obj.FLAG.HIDDEN)
+ # print("ms_value start:{} {} {}".format(self.ms_value,self.sec_value,self.min_value))
+
+ pass
+
+ def lcd_off(self):
+ if self.s_state == 1:
+ date_tmp = utime.localtime()
+ timeSecond = utime.mktime(date_tmp)
+ self.TimeSecond = timeSecond
+ self.timer.stop()
+ pass
+
+ def done_return(self):
+ if self.s_state == 0:
+ self.timer.stop()
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+ def btn1_release(self):
+ if self.s_state == 0:
+ self.timer.stop()
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+ def btn8_press(self):
+ if self.s_state == 0:
+ self.timer.stop()
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+FIND_screen = None
+watchface_mpsignal_img = None
+class UIFINDScreen(Screen):
+ NAME = "FIND"
+ def __init__(self):
+ super().__init__()
+ self.read_data = {}
+ self.volum_size = 8
+ check_volum = ql_fs.path_exists("/usr/static/storage_file/config.json")
+ if check_volum == True :
+ with open("/usr/static/storage_file/config.json","r") as fd:#音频文件编号
+ self.read_data = ujson.load(fd)
+ if self.read_data != {}:
+ b = str("volum") in self.read_data.keys()
+ if b == True:
+ self.volum_size = self.read_data["volum"]
+ else:
+ self.volum_size = 8
+ else:
+ self.volum_size = 8
+ else:
+ self.volum_size = 8
+ self.aud = audio.Audio(0)
+ self.aud.set_pa(Pin.GPIO29)
+ self.aud.setVolume(self.volum_size)
+ self.FIND_timer = osTimer()
+ self.FIND_timer_count = 0
+
+ self.meta = None
+
+ def initialization(self):
+ self.meta = FIND_screen
+
+ def post_processor_after_initialization(self):
+ self.FIND_timer_count = 0
+ print("self.FIND_timer_count:{}".format(self.FIND_timer_count))
+ self.FIND_timer.start(3000, 1, self.FIND_timer_cb)
+ self.aud.play(1, 1, 'U:/static/audio_audio_haixiu.mp3') #播放声音
+
+ def FIND_timer_cb(self, *args):
+ self.aud.play(1, 1, 'U:/static/audio_audio_haixiu.mp3')
+ self.FIND_timer_count += 1
+ if self.FIND_timer_count > 20: #120秒
+ self.stop_FIND()
+
+ def stop_FIND(self) :
+ self.FIND_timer.stop()
+ self.aud.stop() #播放声音
+
+
+ def Close(self):
+ print("self.FIND_timer_Close")
+ self.FIND_timer.stop()
+ self.aud.stop() #播放声音
+
+ def done_left_to_right(self):
+ self.stop_FIND()
+
+ def done_right_to_left(self):
+ self.stop_FIND()
+ def done_bottom_to_top(self):
+ self.stop_FIND()
+
+ def done_top_to_bottom(self):
+ self.stop_FIND()
+
+ def done_return(self):
+ self.stop_FIND()
+
+ def done_click(self):
+ self.stop_FIND()
+
+
+ def btn1_release(self):
+ self.stop_FIND()
+
+
+ def btn8_press(self):
+ self.stop_FIND()
+
+Lowpower_screen = None
+Lowpower_screen_img = None
+class LowPowerScreen(Screen):
+ NAME = "LOW_POWER"
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+
+ def initialization(self):
+ global Lowpower_screen ,Lowpower_screen_img
+ if Lowpower_screen == None :
+ Lowpower_screen = lv.obj()
+ print("Lowpower_screen")
+ Lowpower_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ # add style for watchface
+ Lowpower_screen.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+ #进入图片
+ Lowpower_screen_img = lv.img(Lowpower_screen)
+ Lowpower_screen_img.set_pos(int(40),int(45))
+ Lowpower_screen_img.set_size(160,230)
+ Lowpower_screen_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ Lowpower_screen_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ Lowpower_screen_img.set_src("U:/static/low_power.png")
+ Lowpower_screen_img.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+ self.meta = Lowpower_screen
+
+ def done_left_to_right(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_right_to_left(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_bottom_to_top(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_top_to_bottom(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_click(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+sos_screen = None
+sos_screen_label = None
+sos_screen_label_p = None
+
+#sos求组提示界面
+class sosScreen(Screen):
+ NAME = "SOS_POPUP"
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.timer = osTimer()
+ self.meta_type = "popup"
+ self.count = 0
+
+ def initialization(self):
+ global sos_screen ,sos_screen_label
+ if sos_screen == None :
+ sos_screen = lv.obj()
+ print("SOS_POPUP")
+ sos_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ # add style for watchface
+ sos_screen.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+ #进入图片
+
+ sos_screen_label = lv.label(sos_screen)
+ sos_screen_label.set_pos(0, 20)
+ sos_screen_label.set_size(240, 30)
+ sos_screen_label.set_text("SOS")
+ sos_screen_label.add_style(style_font_youyuan_20_red, lv.PART.MAIN | lv.STATE.DEFAULT)
+ sos_screen_label.set_long_mode(lv.label.LONG.WRAP)
+ sos_screen_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+
+
+ sos_screen_label = lv.label(sos_screen)
+ sos_screen_label.set_text("是否拨打紧急\n求助电话?")
+ sos_screen_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ sos_screen_label.set_size(240, 50)
+ sos_screen_label.set_pos(0,65)
+ sos_screen_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ sos_screen_label = lv.label(sos_screen)
+ sos_screen_label.set_text("无操作10s后\n自动拨打")
+ sos_screen_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ sos_screen_label.set_size(240, 50)
+ sos_screen_label.set_pos(0,140)
+ sos_screen_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ sos_screen_confirm_img = lv.img(sos_screen)
+ sos_screen_confirm_img.set_size(176, 46)
+ sos_screen_confirm_img.set_pos(32, 210)
+ sos_screen_confirm_img.set_src("U:/static/off_icon.png")
+ sos_screen_confirm_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ sos_screen_confirm_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ sos_screen_confirm_label = lv.label(sos_screen_confirm_img)
+ sos_screen_confirm_label.set_text("确定")
+ sos_screen_confirm_label.align(lv.ALIGN.CENTER, 0, 5)
+ sos_screen_confirm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ sos_screen_return = lv.img(sos_screen)
+ sos_screen_return.set_size(176, 46)
+ sos_screen_return.set_pos(32, 270)
+ sos_screen_return.set_src("U:/static/cancel_icon.png")
+ sos_screen_return.add_flag(lv.obj.FLAG.CLICKABLE)
+ sos_screen_return.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ sos_screen_return_label = lv.label(sos_screen_return)
+ sos_screen_return_label.set_text("取消")
+ sos_screen_return_label.align(lv.ALIGN.CENTER, 0, 5)
+ sos_screen_return_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ sos_screen_return_label.set_ext_click_area(20)
+
+ self.meta = sos_screen
+ sos_screen_confirm_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.timer_comfirm_cb(e)),
+ lv.EVENT.CLICKED, None)
+
+ sos_screen_return.add_event_cb(lambda e: EventMesh.callback_wrapper(self.timer_cancel_cb(e)),
+ lv.EVENT.CLICKED, None)
+
+ def timer_comfirm_cb(self,e):
+ EventMesh.publish("set_sos_flag", 1)
+
+ def timer_cancel_cb(self,e):
+ EventMesh.publish("return_prev_screen")
+
+ def post_processor_before_initialization(self):
+ self.count = 0
+ self.timer.start(5000,1,self.timer_cb_onescond)
+
+ def timer_cb_onescond(self,e):
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.count+=1
+ if self.count >= 2:
+ self.count = 0
+ EventMesh.publish("set_sos_flag", 1)
+
+ def Close(self):
+ self.timer.stop()
+
+ def done_left_to_right(self):
+ EventMesh.publish("return_prev_screen")
+ pass
+ def done_right_to_left(self):
+ EventMesh.publish("return_prev_screen")
+ pass
+ def done_bottom_to_top(self):
+ EventMesh.publish("return_prev_screen")
+ pass
+ def done_top_to_bottom(self):
+ EventMesh.publish("return_prev_screen")
+ pass
+ def done_return(self):
+ EventMesh.publish("return_prev_screen")
+ pass
+ def done_click(self):
+ #EventMesh.publish("return_prev_screen")
+ pass
+
+ def btn8_press(self):
+
+ pass
+ def btn1_press(self):
+ EventMesh.publish("return_prev_screen")
+ pass
+ def btn1_release(self):
+ EventMesh.publish("return_prev_screen")
+ pass
+
+
+no_sos_screen = None
+no_sos_screen_label = None
+
+#没有设置紧急联系人的号码
+class noSosDataScreen(Screen):
+ NAME = "NO_SOS_POPUP"
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.meta_type = "popup"
+ self.count = 0
+ self.timer = osTimer()
+
+ def initialization(self):
+ global no_sos_screen ,no_sos_screen_label
+ if no_sos_screen == None :
+ no_sos_screen = lv.obj()
+ print("NO_SOS_POPUP")
+ no_sos_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ # add style for watchface
+ no_sos_screen.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+ #进入图片
+
+ no_sos_screen_label = lv.label(no_sos_screen)
+ no_sos_screen_label.set_pos(0, 110)
+ no_sos_screen_label.set_size(240, 80)
+ no_sos_screen_label.set_text("请在手机app上设置\n紧急联系人号码")
+ no_sos_screen_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ no_sos_screen_label.set_long_mode(lv.label.LONG.WRAP)
+ no_sos_screen_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+
+
+ self.meta = no_sos_screen
+ def post_processor_before_initialization(self):
+ self.count = 0
+ self.timer.start(1000,1,self.timer_cb_onescond)
+
+ def Close(self):
+ self.timer.stop()
+
+ def timer_cb_onescond(self,e):
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.count+=1
+ if self.count >= 10:
+ self.count = 0
+ EventMesh.publish("return_prev_screen")
+
+
+ def done_left_to_right(self):
+ EventMesh.publish("return_prev_screen")
+ pass
+ def done_right_to_left(self):
+ EventMesh.publish("return_prev_screen")
+ pass
+ def done_bottom_to_top(self):
+ EventMesh.publish("return_prev_screen")
+ pass
+ def done_top_to_bottom(self):
+ EventMesh.publish("return_prev_screen")
+ pass
+ def done_return(self):
+ EventMesh.publish("return_prev_screen")
+ pass
+ def done_click(self):
+ EventMesh.publish("return_prev_screen")
+ pass
+
+ def btn8_press(self):
+
+ pass
+ def btn1_press(self):
+ EventMesh.publish("return_prev_screen")
+ pass
+ def btn1_release(self):
+ EventMesh.publish("return_prev_screen")
+ pass
+
+
+
+
+system_init_screen = None
+system_init_label = None
+class SystemInitScreen(Screen):
+ #系统初始化中...
+ NAME = "system_init"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.system_init_timer=osTimer()
+ self.system_init_timer_count = 0
+
+ def initialization(self):
+ global system_init_screen ,system_init_label
+ if system_init_screen == None:
+ system_init_screen = lv.obj()
+ print("Lowpower_screen")
+ system_init_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ system_init_label = lv.label(system_init_screen)
+ system_init_label.set_pos(0, 150)
+ system_init_label.set_size(240, 40)
+ system_init_label.set_text("系统初始化中")
+ system_init_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ system_init_label.set_long_mode(lv.label.LONG.WRAP)
+ system_init_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ self.meta = system_init_screen
+ self.system_init_timer_count = 0
+ self.system_init_timer.start(1000, 1, self.system_init_timer_cb)
+
+ def system_init_timer_cb(self, *args):
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.system_init_timer_count += 1
+ if self.system_init_timer_count > 4:
+ self.system_init_timer_count = 1
+ if system_init_screen != None:
+
+ system_init_label_str = "系统初始化中"
+ if self.system_init_timer_count == 1:
+ system_init_label.set_text("系统初始化中.")
+ elif self.system_init_timer_count == 2:
+ system_init_label.set_text("系统初始化中..")
+ elif self.system_init_timer_count == 3:
+ system_init_label.set_text("系统初始化中...")
+ else:
+ system_init_label.set_text("系统初始化中....")
+
+ def Close(self):
+ self.system_init_timer.stop()
+
+
+
+#from usr.ui_WatchFaceScreen import WatchFaceScreen
+class UI(object):
+ def __init__(self):
+ #self.screen = WatchFaceScreen()
+ #self.screen_old = self.screen
+ self.ui_queue = Queue()
+ _thread.stack_size(13*1024)
+ _thread.start_new_thread(self.ui_queue_thread, ())
+ _thread.stack_size(8*1024)
+ self.screen = None
+ self.screen_old = None
+ self.screen_prev = None
+ self.screen_list = []
+ self.lv = lv
+ self.system_sleep_timer = osTimer()
+ self.system_sleep_timer_count = 0
+ self.sleep_flag = 1
+ self.level = 6
+ self.read_data = {}
+ self.aud = audio.Audio(0)
+ self.aud.set_pa(Pin.GPIO29)
+ self.aud.setVolume(11)
+ # self.level = EventMesh.publish("get_brightness_level")
+ self.read_data = EventMesh.publish("get_storage_data")
+ self.main_flag = 0
+ self.main_id = 0
+ self.set_interrup_flag = 0
+ self.UI_high_priority_flag = 0 #如果=1,则当前ui不被打断
+ # print("self.read_data:{} self.level:{}".format(self.read_data,self.level))
+ # check = ql_fs.path_exists("/usr/static/storage_file/config.json")
+ # if check == True:
+ # with open("/usr/static/storage_file/config.json","r") as fd:
+ # self.read_data = ujson.load(fd)
+ # if self.read_data != {}:
+ # b = str("brightness_level") in self.read_data.keys()
+ # if b == True:
+ # self.level = self.read_data["brightness_level"]
+ # else:
+ # self.level = 6
+ # self.read_data["brightness_level"] = self.level
+ # EventMesh.publish("set_storage_data", self.read_data)
+ # with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
+ # ujson.dump(self.read_data,fd)
+ # else:
+ # self.level = 6 #默认是6级别
+
+ # if self.level == None:
+ # self.level = 6
+ # self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, self.level, 10)
+ # self.PWM_backlight.open()
+ self.sleep_lock = 0
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("load_screen", self.load_screen_cb)
+
+ EventMesh.subscribe("btn1_press", self.btn_press)
+ EventMesh.subscribe("btn8_press", self.btn_press)
+ EventMesh.subscribe("btn8_long_press", self.btn_press)
+
+ EventMesh.subscribe("btn1_release", self.btn_release)
+ EventMesh.subscribe("btn8_release", self.btn_release)
+
+ EventMesh.subscribe("done_left_to_right", self.ui_press)
+ EventMesh.subscribe("done_right_to_left", self.ui_press)
+ EventMesh.subscribe("done_bottom_to_top", self.ui_press)
+ EventMesh.subscribe("done_top_to_bottom", self.ui_press)
+ EventMesh.subscribe("done_return", self.ui_press)
+ EventMesh.subscribe("done_click", self.ui_press)
+ EventMesh.subscribe("done_error", self.ui_press)
+ EventMesh.subscribe("done_press", self.ui_press)
+ EventMesh.subscribe("call_in", self.publish_call_in)
+
+ EventMesh.subscribe("get_lcd_state", self.get_lcd_state)
+ EventMesh.subscribe("set_lcd_state", self.set_lcd_state)
+
+ #EventMesh.subscribe("call_in", self.publish_call_in)
+ #EventMesh.subscribe("set_bg_img", self.set_bg_img)
+
+ EventMesh.subscribe(constants.EVENT.SYSTEM_SLEEP, self.system_sleep)
+ EventMesh.subscribe(constants.EVENT.SYSTEM_UP, self.system_up)
+ EventMesh.subscribe("system_sleep_rest", self.system_sleep_rest)
+ EventMesh.subscribe("set_UI_high_priority", self.set_UI_high_priority)
+ EventMesh.subscribe("get_UI_high_priority", self.get_UI_high_priority)
+
+ EventMesh.subscribe("set_interrup_incall", self.set_interrup_incall)
+ EventMesh.subscribe("get_interrup_incall", self.get_interrup_incall)
+ EventMesh.subscribe("get_screen_NAME",self.get_screen_NAME)
+ EventMesh.subscribe("publish_message_event_ui",self.publish_message_event_ui)
+ EventMesh.subscribe("return_prev_screen",self.return_prev_screen)
+
+ self.system_sleep_timer.start(1000, 1, self.system_sleep_timer_cb)
+
+ def publish_message_event_ui(self,event,msg):
+ self.ui_queue.put(msg)
+
+ #ui的消息队列处理,防止内存越界 格式:{函数名,数据}
+ def ui_queue_thread(self):
+ while True:
+ data = self.ui_queue.get()
+ #print("ui_queue_thread:data = {}".format(data))
+ if data != None:
+ try:
+ data["func"](data["data"])
+ except Exception as e:
+ usys.print_exception(e)
+ print("ui_queue_thread:ERROR:{}".format(e))
+ # for scr in self.screen_list:
+ # if scr.handle_message_event(data) == 1 :
+ # break
+ def return_prev_screen(self, event, msg):
+ if self.screen_prev != None:
+ EventMesh.publish("load_screen", {"screen": self.screen_prev.NAME})
+
+ def set_interrup_incall(self, event, msg):
+ self.set_interrup_flag = msg
+
+ def get_interrup_incall(self, event, msg):
+ return self.set_interrup_flag
+
+ def set_UI_high_priority(self, event, msg):
+ self.UI_high_priority_flag = msg
+
+ def get_UI_high_priority(self, event, msg):
+ return self.UI_high_priority_flag
+
+ def get_lcd_state(self, event, key):
+ return self.sleep_flag
+
+ def set_lcd_state(self, event, key):
+ print("key_:{}".format(key))
+ self.sleep_flag = key
+
+ def system_sleep_rest(self, event, key):
+ #print("system_sleep_rest!!!!!")
+ self.system_sleep_timeout_rest()
+
+ def ui_press(self, event, key):
+ screen_NAME = EventMesh.publish("get_screen_NAME")
+ if screen_NAME == "system_init":
+ return
+ self.system_sleep_timeout_rest()
+ #print("ui press {}".format(event))
+ if event == "done_left_to_right":
+ self.screen.done_left_to_right()
+ if event == "done_right_to_left":
+ self.screen.done_right_to_left()
+ if event == "done_bottom_to_top":
+ self.screen.done_bottom_to_top()
+ if event == "done_top_to_bottom":
+ self.screen.done_top_to_bottom()
+ if event == "done_return":
+ self.screen.done_return()
+ if event == "done_click":
+ self.screen.done_click()
+ # if event == "done_press":
+ # self.system_sleep_timeout_rest()
+ def btn_press(self, event, key):
+ screen_NAME = EventMesh.publish("get_screen_NAME")
+ if screen_NAME == "system_init":
+ return
+ print("btn_press: {}".format(event))
+ #主表盘按电源键,息屏
+
+ #息屏状态按按钮都亮屏
+
+
+ if self.main_flag != 1 and self.sleep_flag == 0:
+ if event == "btn8_long_press":
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#有卡时触发sos报警 无卡时自动关机
+ sos_number = EventMesh.publish("get_dial_sos_number")
+ if sos_number != None:
+ if len(sos_number) != 0:
+ screen_NAME = EventMesh.publish("get_screen_NAME")
+ if screen_NAME != None:
+ if screen_NAME != "SOS_POPUP":
+ EventMesh.publish("load_screen", {"screen": "SOS_POPUP"})
+ else:
+ EventMesh.publish("load_screen", {"screen": "NO_SOS_POPUP"})
+ else:
+ EventMesh.publish("load_screen", {"screen": "no_sim_power_screen"})
+ else:
+ self.__lcd_on()
+ return
+ # if event == "btn1_press":
+ # self.screen.btn1_press()
+ # self.__lcd_on()
+ if event == "btn8_press":
+ self.screen.btn8_press()
+ if event == "btn8_long_press":
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#有卡时触发sos报警 无卡时自动关机
+ sos_number = EventMesh.publish("get_dial_sos_number")
+ if sos_number != None:
+ if len(sos_number) != 0:
+ screen_NAME = EventMesh.publish("get_screen_NAME")
+ if screen_NAME != None:
+ if screen_NAME != "SOS_POPUP":
+ EventMesh.publish("load_screen", {"screen": "SOS_POPUP"})
+ else:
+ EventMesh.publish("load_screen", {"screen": "NO_SOS_POPUP"})
+ else:
+ EventMesh.publish("load_screen", {"screen": "no_sim_power_screen"})
+
+ if event == "btn1_press":
+ pass
+
+
+
+ def btn_release(self, event, msg):
+ screen_NAME = EventMesh.publish("get_screen_NAME")
+ if screen_NAME == "system_init":
+ return
+ print("btn_release: {}".format(event))
+ # if self.main_flag != 1 and self.sleep_flag == 0:
+ # self.__lcd_on()
+ # return
+ # if event == "btn1_release":
+
+ # self.screen.btn1_release()
+
+ def __lcd_on(self):
+ self.system_sleep_timeout_rest()
+ if self.sleep_flag == 0 :
+ print("__lcd_on")
+ if self.sleep_lock == 1:
+ print("__lcd_on:sleep_lock:error!")
+ utime.sleep_ms(200)
+ self.sleep_lock = 1
+ self.sleep_flag = 1
+
+
+ #lcd_ctrl.write(1)
+ #utime.sleep(10)
+
+ self.system_sleep_timer.start(1000, 1, self.system_sleep_timer_cb)
+ EventMesh.publish("set_lcd_state",self.sleep_flag)
+
+ utime.sleep_ms(2)
+ lv.autoSleep(0)
+ pm.autosleep(0)
+ pm.sclkEx_set(0, 1, 5)
+ utime.sleep_ms(60)
+
+
+ self.sleep_lock = 0
+
+
+ def publish_call_in(self, event, msg):
+ EventMesh.publish("load_screen", {"screen": "dialing", "meta": msg})
+
+ def __lcd_off(self):
+
+ if self.sleep_flag == 1 :
+ print("__lcd_off")
+ if self.sleep_lock == 1:
+ print("__lcd_on:sleep_lock:error!")
+ utime.sleep_ms(200)
+ self.sleep_lock = 1
+ self.sleep_flag = 0
+
+ #lcd_ctrl.write(0)
+ #
+ lv.autoSleep(1)
+ pm.autosleep(1)
+ pm.sclkEx_set(1, 1, 5)
+ utime.sleep_ms(2)
+
+ #utime.sleep_ms(80)
+ EventMesh.publish("set_lcd_state",self.sleep_flag)
+ self.sleep_lock = 0
+
+ self.system_sleep_timer.stop()
+ EventMesh.publish("Hsensor_set_sleep") #让系统更快休眠
+
+ def system_sleep(self, event, msg) :
+ pass
+ # self.__lcd_off()
+
+ def system_up(self, event, msg):
+ pass
+ # self.__lcd_on()
+
+ def system_sleep_timer_cb(self, *args):
+ #print("system_sleep_timer_count:{}".format(self.system_sleep_timer_count))
+ time = EventMesh.publish("get_brightness_time")
+ if time == None:
+ time = 10
+ self.system_sleep_timer_count += 1
+ if self.system_sleep_timer_count >= time :
+ self.system_sleep_timer_count = 0
+ # self.__lcd_off()
+
+ def system_sleep_timeout_rest(self) :
+ #print("system_sleep_timeout_rest")
+ self.system_sleep_timer_count = 0
+
+ def start(self):
+ #self.post_processor_after_instantiation()
+ pass
+
+ def add_screen(self, screen):
+ self.screen_list.append(screen)
+ return self
+
+ def get_screen_NAME(self, event, msg):
+ return 0
+
+ def load_screen_cb(self, topic, msg):
+ EventMesh.publish("publish_message_event_ui",{"func":self.load_screen,"data":msg})
+
+ def load_screen(self, msg):
+ print("msg1={}".format(msg))
+ if self.UI_high_priority_flag == 1:#电话界面屏蔽其他界面
+ return
+ if self.screen :
+ if self.screen.NAME == msg["screen"]:
+ return
+ for scr in self.screen_list:
+ if scr.NAME == msg["screen"]:
+ # 每次屏幕切换开始息屏倒计时
+
+ if scr.NAME == 'main_menu':
+ self.main_flag = 1
+ else :
+ self.main_flag = 0
+ mem = gc.mem_free()
+ print('1剩余内存RAM:{} KB'.format(mem / 1024))
+
+ self.screen = scr
+
+
+ if self.screen_old != None :
+ self.screen_old.Close() #先关闭上一次界面
+ self.lv.img.cache_invalidate_src(None) #清img cache
+ self.lv.img.cache_set_size(16) #开img cache
+ if self.screen_old.meta_type != "popup": #不是弹窗,保存上一个界面,用来返回
+ self.screen_prev = self.screen_old #
+ self.screen_old = self.screen
+ if msg.get("meta"):
+ self.screen.meta_info = msg.get("meta")
+ print("load_screen:post_processor_before_initialization")
+ self.screen.post_processor_before_initialization()
+ print("load_screen:initialization")
+ # self.screen.initialization()
+
+ print("load_screen.load()")
+ self.screen.load()
+ self.lv.scr_load(self.screen.get_meta())
+
+ self.screen.post_processor_after_initialization()
+ # self.__lcd_on()
+ mem = gc.mem_free()
+ print('2剩余内存RAM:{} KB'.format(mem / 1024))
+
+
+
+
+
--- /dev/null
+#表盘
+import osTimer
+import lvgl as lv
+import EventMesh
+import osTimer
+import constants
+from ui import Screen,style_screen
+import ql_fs
+import ujson
+from machine import RTC
+
+
+
+# style_font_youyuan_20 = lv.style_t()
+# style_font_youyuan_20.init()
+# style_font_youyuan_20.set_text_color(lv.color_make(0xff, 0xff, 0xff))
+# style_font_youyuan_20.set_text_font_v2("font_22.bin",22,0)
+
+watchface_style_default = lv.style_t()
+watchface_style_default.init()
+watchface_style_default.set_text_color(lv.color_make(0xff, 0xff, 0xff))
+watchface_style_default.set_text_font_v2("font_28.bin",28,0)
+
+
+style_font_youyuan_28 = lv.style_t()
+style_font_youyuan_28.init()
+style_font_youyuan_28.set_text_color(lv.color_make(0xFF, 0xFF, 0xFF))
+style_font_youyuan_28.set_text_font(lv.font_28_dial)
+
+Watchface = lv.obj()
+print("Watchface")
+Watchface1 = lv.obj(Watchface)
+
+Watchface1.set_size(240,320)
+#Watchface1.set_pos(0,0)
+Watchface1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+Watchface1.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+# create style style_watchface_img_default
+style_watchface_img_default = lv.style_t()
+style_watchface_img_default.init()
+style_watchface_img_default.set_img_recolor(lv.color_make(0xff,0xff,0xff))
+style_watchface_img_default.set_img_recolor_opa(0)
+style_watchface_img_default.set_img_opa(255)
+
+
+#表盘
+
+#状态栏
+
+watchface1_mpsignal_img = lv.img(Watchface1)
+watchface1_mpsignal_img.set_pos(int(20),int(0))
+watchface1_mpsignal_img.set_size(24,17)
+watchface1_mpsignal_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface1_mpsignal_img.add_flag(lv.obj.FLAG.CLICKABLE)
+watchface1_mpsignal_img.set_src("U:/static/mpsignal5.png")
+watchface1_mpsignal_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface1_res_stat_battery_img = lv.img(Watchface1)
+watchface1_res_stat_battery_img.set_pos(int(200),int(0))
+watchface1_res_stat_battery_img.set_size(30,18)
+watchface1_res_stat_battery_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface1_res_stat_battery_img.add_flag(lv.obj.FLAG.CLICKABLE)
+watchface1_res_stat_battery_img.set_src("U:/static/vbat_100.png")
+watchface1_res_stat_battery_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface1_res_stat_charge_in_img = lv.img(Watchface1)
+watchface1_res_stat_charge_in_img.set_pos(int(180),int(0))
+watchface1_res_stat_charge_in_img.set_size(10,18)
+watchface1_res_stat_charge_in_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface1_res_stat_charge_in_img.add_flag(lv.obj.FLAG.CLICKABLE)
+watchface1_res_stat_charge_in_img.set_src("U:/static/charge_in.png")
+# add style for watchface1_res_stat_charge_in_img
+watchface1_res_stat_charge_in_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#主图片
+watchface1_bg_img = lv.img(Watchface1)
+watchface1_bg_img.set_pos(int(9),int(65))
+watchface1_bg_img.set_size(222,222)
+watchface1_bg_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface1_bg_img.add_flag(lv.obj.FLAG.CLICKABLE)
+watchface1_bg_img.set_src("U:/static/bg.png")
+watchface1_bg_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+#时间
+
+
+style_font_youyuan_70_black = lv.style_t()
+style_font_youyuan_70_black.init()
+style_font_youyuan_70_black.set_text_color(lv.color_make(0x32, 0xc8, 0xdb))
+style_font_youyuan_70_black.set_text_font(lv.font_70_bold)
+#init3:(2106, 2, 7, 6, 29, 38, 6, 38)
+data = RTC().datetime()
+hour = data[4]
+min = data[5]
+
+week = data[3]
+
+date1 = data[1]
+date2 = data[2]
+print("hour:{} min:{} week:{} date1:{} date2:{} data:{}".format(hour,min,week,date1,date2,data))
+
+def get_week(msg):
+ if msg == 1:
+ return '一'
+ elif msg == 2:
+ return '二'
+ elif msg == 3:
+ return '三'
+ elif msg == 4:
+ return '四'
+ elif msg == 5:
+ return '五'
+ elif msg == 6:
+ return '六'
+ elif msg == 7 or msg == 0:
+ return '日'
+
+
+watchface1_time1_text = lv.label(Watchface1)
+watchface1_time1_text.set_pos(20, 50)
+watchface1_time1_text.set_size(190, 71)
+watchface1_time1_text.set_align(lv.TEXT_ALIGN.LEFT)
+watchface1_time1_text.set_text("{}:{}".format("%02d"%(hour),"%02d"%(min)))
+# watchface1_time1_text.set_text("%02d:%02d"%(hour,min))
+watchface1_time1_text.add_style(style_font_youyuan_70_black, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#日期
+watchface1_date_span = lv.label(Watchface1)
+watchface1_date_span.set_pos(8, 122)
+watchface1_date_span.set_size(140, 30)
+watchface1_date_span.set_align(lv.TEXT_ALIGN.LEFT)
+watchface1_date_span.set_text("%d月%d日"%(date1,date2))
+watchface1_date_span.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFAULT)
+#星期
+watchface1_week_span = lv.label(Watchface1)
+watchface1_week_span.set_pos(8, 160)
+watchface1_week_span.set_size(100, 30)
+watchface1_week_span.set_align(lv.TEXT_ALIGN.LEFT)
+watchface1_week_span.set_text("星期%s"%(get_week(week)))
+watchface1_week_span.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+
+watchface1_step_span = lv.label(Watchface1)
+watchface1_step_span.set_pos(142, 159)
+watchface1_step_span.set_size(78, 30)
+watchface1_step_span.set_align(lv.TEXT_ALIGN.LEFT)
+watchface1_step_span.set_text("0")
+watchface1_step_span.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+
+# watchface1_HB_span = lv.label(Watchface1)
+# watchface1_HB_span.set_pos(52, 235)
+# watchface1_HB_span.set_size(80, 30)
+# watchface1_HB_span.set_align(lv.TEXT_ALIGN.LEFT)
+# watchface1_HB_span.set_text("0")
+# watchface1_HB_span.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface1_HB_span = lv.label(Watchface1)
+watchface1_HB_span.set_pos(5, 235)
+watchface1_HB_span.set_size(115, 30)
+watchface1_HB_span.set_text("0")
+watchface1_HB_span.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+watchface1_HB_span.add_style(style_font_youyuan_28, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+watchface1_SPO2_span = lv.label(Watchface1)
+watchface1_SPO2_span.set_pos(110, 235)
+watchface1_SPO2_span.set_size(120, 30)
+watchface1_SPO2_span.set_text("0")
+watchface1_SPO2_span.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+watchface1_SPO2_span.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+class WatchFace1():
+ NAME = "Watchface1"
+ # # #表盘1
+ def __init__(self,main_menu):
+ print("Watchface1:__init__")
+ self.meta = Watchface1
+ Watchface1.set_parent(main_menu)#设置父控件
+
+ def initialization(self,main_menu):
+ print("Watchface1:initialization")
+
+ #获取信号
+ signal = EventMesh.publish("screen_get_sig")
+ if signal:
+ self.__signal(None, signal)
+ # 获取电池电量
+ battery = EventMesh.publish("screen_get_battery")
+ if battery:
+ self.__battery(None, battery)
+ time = EventMesh.publish("screen_get_time")
+ #print("publish_time:"+time)
+ if time:
+ self.__time(None, time)
+ hrValue = EventMesh.publish("get_old_hr_data")
+ if hrValue:
+ self.__oldHrValue(None, hrValue)
+
+ spo2Value = EventMesh.publish("get_old_spo2_data")
+ if spo2Value :
+ self.__oldSpo2Value(None, spo2Value)
+ # print("main get_step msg:{}".format(msg))
+
+ # step = EventMesh.publish(constants.EVENT.GET_STEP)
+ step = EventMesh.publish("get_old_step_value")
+ self.__stepValue(None, step)
+
+
+ def timerout_update(self):
+ #获取信号
+ signal = EventMesh.publish("screen_get_sig")
+ if signal:
+ self.__signal(None, signal)
+ # 获取电池电量
+ battery = EventMesh.publish("screen_get_battery")
+ if battery:
+ self.__battery(None, battery)
+
+ time = EventMesh.publish("screen_get_time")
+ #print("publish_time:"+time)
+ if time:
+ self.__time(None, time)
+
+ hrValue = EventMesh.publish("get_old_hr_data")
+ if hrValue:
+ self.__oldHrValue(None, hrValue)
+
+ spo2Value = EventMesh.publish("get_old_spo2_data")
+ if spo2Value :
+ self.__oldSpo2Value(None, spo2Value)
+ # print("main get_step msg:{}".format(msg))
+ # step = EventMesh.publish(constants.EVENT.GET_STEP)
+ step = EventMesh.publish("get_old_step_value")
+ self.__stepValue(None, step)
+
+ def __time(self, event, msg):
+ #时间
+ watchface1_time1_text.set_text("{}:{}".format("%02d"%(msg[0][0]),"%02d"%(msg[0][1])))
+
+ watchface1_date_span.set_text(msg[2])#日期
+ watchface1_week_span.set_text(msg[3]) #星期
+
+ def __signal(self, event, msg):
+ #print("__signal_cb:",str(msg))
+ # 信号强度值范围0 ~ 31,值越大表示信号强度越好
+ #print("__signal_cb:{}".format(msg//8))
+ if msg:
+ if msg >= 0 and msg<=31 :
+ watchface1_mpsignal_img.set_src("U:/static/mpsignal{}.png".format(msg//8+1))
+ else :
+ watchface1_mpsignal_img.set_src("U:/static/mpsignal5.png")
+
+ def __battery(self, event, msg):
+ #print("__battery_cb:",str(msg))
+ #print(msg)
+ if msg[0] == '1':
+ watchface1_res_stat_charge_in_img.set_src("U:/static/charge_in.png")
+ else:
+ watchface1_res_stat_charge_in_img.set_src("U:/static/charge_in1.png")
+
+ watchface1_res_stat_battery_img.set_src("U:/static/vbat_%d.png"%(msg[1]))#"U:/vbat_60.png"
+ pass
+
+ def __oldHrValue(self, event, msg):
+ watchface1_HB_span.set_text(str(msg))
+
+ def __oldSpo2Value(self, event, msg):
+ watchface1_SPO2_span.set_text(str(msg))
+
+ def __stepValue(self, event, msg):
+ if msg == None:
+ watchface1_step_span.set_text("0")
+ else:
+ watchface1_step_span.set_text(str(msg))
+
+ def Close(self):
+ pass
+
+ def done_left_to_right(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def done_right_to_left(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def done_top_to_bottom(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def done_bottom_to_top(self):
+ EventMesh.publish("load_screen", {"screen": "call_log"})
+
+# create style style_watchface_img_default
+style_watchface_img_default = lv.style_t()
+style_watchface_img_default.init()
+style_watchface_img_default.set_img_recolor(lv.color_make(0xff,0xff,0xff))
+style_watchface_img_default.set_img_recolor_opa(0)
+style_watchface_img_default.set_img_opa(255)
+
+Watchface2 = lv.obj(Watchface)
+Watchface2.set_size(240,320)
+#Watchface2.set_pos(0,0)
+Watchface2.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+Watchface2.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#表盘
+
+#状态栏
+
+watchface2_mpsignal_img = lv.img(Watchface2)
+watchface2_mpsignal_img.set_pos(int(20),int(0))
+watchface2_mpsignal_img.set_size(24,17)
+watchface2_mpsignal_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface2_mpsignal_img.add_flag(lv.obj.FLAG.CLICKABLE)
+watchface2_mpsignal_img.set_src("U:/static/mpsignal5.png")
+watchface2_mpsignal_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface2_res_stat_battery_img = lv.img(Watchface2)
+watchface2_res_stat_battery_img.set_pos(int(200),int(0))
+watchface2_res_stat_battery_img.set_size(30,18)
+watchface2_res_stat_battery_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface2_res_stat_battery_img.add_flag(lv.obj.FLAG.CLICKABLE)
+watchface2_res_stat_battery_img.set_src("U:/static/vbat_100.png")
+watchface2_res_stat_battery_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface2_res_stat_charge_in_img = lv.img(Watchface2)
+watchface2_res_stat_charge_in_img.set_pos(int(180),int(0))
+watchface2_res_stat_charge_in_img.set_size(10,18)
+watchface2_res_stat_charge_in_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface2_res_stat_charge_in_img.add_flag(lv.obj.FLAG.CLICKABLE)
+watchface2_res_stat_charge_in_img.set_src("U:/static/charge_in.png")
+# add style for watchface_res_stat_charge_in_img
+watchface2_res_stat_charge_in_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+style_font_youyuan_70_red = lv.style_t()
+style_font_youyuan_70_red.init()
+style_font_youyuan_70_red.set_text_color(lv.color_make(0xff, 0xff, 0xff))
+style_font_youyuan_70_red.set_text_font(lv.font_70_bold)
+#时间
+x = 30
+y = 80
+watchface2_time1_hour_text = lv.label(Watchface2)
+watchface2_time1_hour_text.set_pos(20, 80)
+watchface2_time1_hour_text.set_size(88, 70)
+watchface2_time1_hour_text.set_align(lv.TEXT_ALIGN.LEFT)
+watchface2_time1_hour_text.set_text("{}".format("%02d"%(hour)))
+watchface2_time1_hour_text.add_style(style_font_youyuan_70_red, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface2_time1_mao_text = lv.label(Watchface2)
+watchface2_time1_mao_text.set_pos(108, 76)
+watchface2_time1_mao_text.set_size(44, 70)
+watchface2_time1_mao_text.set_align(lv.TEXT_ALIGN.LEFT)
+watchface2_time1_mao_text.set_text(":")
+watchface2_time1_mao_text.add_style(style_font_youyuan_70_red, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface2_time1_hour1_text = lv.label(Watchface2)
+watchface2_time1_hour1_text.set_pos(152, 80)
+watchface2_time1_hour1_text.set_size(88, 70)
+watchface2_time1_hour1_text.set_align(lv.TEXT_ALIGN.LEFT)
+watchface2_time1_hour1_text.set_text("{}".format("%02d"%(min)))
+watchface2_time1_hour1_text.add_style(style_font_youyuan_70_red, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+
+
+#日期
+watchface2_date_span = lv.label(Watchface2)
+watchface2_date_span.set_pos(18, 170)
+watchface2_date_span.set_size(120, 35)
+watchface2_date_span.set_align(lv.TEXT_ALIGN.LEFT)
+watchface2_date_span.set_text("%d月%d日"%(date1,date2))
+watchface2_date_span.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#日期
+watchface2_week = lv.label(Watchface2)
+watchface2_week.set_pos(146, 170)
+watchface2_week.set_size(110, 35)
+watchface2_week.set_align(lv.TEXT_ALIGN.LEFT)
+watchface2_week.set_text("星期%s"%(get_week(week)))
+watchface2_week.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFAULT)
+#星期
+
+
+# watchface2_week = lv.img(Watchface2)
+# watchface2_week.set_pos(int(30+56+20+25),int(y+56+30))
+# watchface2_week.set_size(90,30)
+# watchface2_week.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+# watchface2_week.set_src("U:/static/watch_plate/style_2/week/0_week.png")
+# watchface2_week.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+
+watchface2_step_img = lv.img(Watchface2)
+watchface2_step_img.set_pos(int(95),int(260))
+watchface2_step_img.set_size(26,21)
+watchface2_step_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface2_step_img.set_src("U:/static/step.png")
+watchface2_step_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface2_step_txt = lv.label(Watchface2)
+watchface2_step_txt.set_pos(125, 260)
+watchface2_step_txt.set_size(80, 35)
+watchface2_step_txt.set_align(lv.TEXT_ALIGN.LEFT)
+watchface2_step_txt.set_text("0")
+watchface2_step_txt.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+class WatchFace2():
+ NAME = "Watchface2"
+ # # #表盘2
+ def __init__(self,main_menu):
+ print("Watchface2:__init__")
+ self.meta = Watchface2
+ Watchface2.set_parent(main_menu)#设置父控件
+
+ def initialization(self,main_menu):
+ print("Watchface2:initialization")
+
+ #获取信号
+ signal = EventMesh.publish("screen_get_sig")
+ if signal:
+ self.__signal(None, signal)
+ # 获取电池电量
+ battery = EventMesh.publish("screen_get_battery")
+ if battery:
+ self.__battery(None, battery)
+ time = EventMesh.publish("screen_get_time")
+ #print("publish_time:"+time)
+ if time:
+ self.__time(None, time)
+
+ step = EventMesh.publish("get_old_step_value")
+ self.__stepValue(None, step)
+
+
+ def timerout_update(self):
+ #获取信号
+ signal = EventMesh.publish("screen_get_sig")
+ if signal:
+ self.__signal(None, signal)
+ # 获取电池电量
+ battery = EventMesh.publish("screen_get_battery")
+ if battery:
+ self.__battery(None, battery)
+
+ time = EventMesh.publish("screen_get_time")
+ #print("publish_time:"+time)
+ if time:
+ self.__time(None, time)
+
+ step = EventMesh.publish("get_old_step_value")
+ self.__stepValue(None, step)
+
+ def __time(self, event, msg):
+ #时间
+ hour1_chose = (msg[0][0])//10%10
+ hour2_chose = (msg[0][0])%10
+ min1_chose = (msg[0][1])//10%10
+ min2_chose = (msg[0][1])%10
+ watchface2_time1_hour_text.set_text("{}".format("%02d"%(msg[0][0])))
+ watchface2_time1_hour1_text.set_text("{}".format("%02d"%(msg[0][1])))
+ # watchface2_time1_hour_text.set_text("{}".format("%d"%(hour1_chose)))
+ # watchface2_time1_hour2_text.set_text("{}".format("%d"%(hour2_chose)))
+ # watchface2_time2_min1_text.set_text("{}".format("%d"%(min1_chose)))
+ # watchface2_time2_min2_text.set_text("{}".format("%d"%(min2_chose)))
+ watchface2_date_span.set_text(msg[2])#日期
+ watchface2_week.set_text(msg[3])#星期
+ # watchface2_week.set_src("U:/static/watch_plate/style_2/week/%d_week.png"%(msg[5])) #星期
+
+ def __signal(self, event, msg):
+ #print("__signal_cb:",str(msg))
+ # 信号强度值范围0 ~ 31,值越大表示信号强度越好
+ #print("__signal_cb:{}".format(msg//8))
+ if msg:
+ if msg >= 0 and msg<=31 :
+ watchface2_mpsignal_img.set_src("U:/static/mpsignal{}.png".format(msg//8+1))
+ else :
+ watchface2_mpsignal_img.set_src("U:/static/mpsignal5.png")
+
+ def __battery(self, event, msg):
+ #print("__battery_cb:",str(msg))
+ #print(msg)
+ if msg[0] == '1':
+ watchface2_res_stat_charge_in_img.set_src("U:/static/charge_in.png")
+ else:
+ watchface2_res_stat_charge_in_img.set_src("U:/static/charge_in1.png")
+
+ watchface2_res_stat_battery_img.set_src("U:/static/vbat_%d.png"%(msg[1]))#"U:/vbat_60.png"
+ pass
+ def __stepValue(self, event, msg):
+ if msg == None:
+ watchface2_step_txt.set_text("0")
+ else:
+ watchface2_step_txt.set_text(str(msg))
+
+
+ # def __weather_type(self, event, msg):
+ # if msg == None:
+ # watchface2_temp_img.add_flag(lv.obj.FLAG.HIDDEN)
+ # watchface2_no_temp_txt.clear_flag(lv.obj.FLAG.HIDDEN)
+ # else:
+ # type = int(msg)
+ # watchface2_no_temp_txt.add_flag(lv.obj.FLAG.HIDDEN)
+ # watchface2_temp_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ # watchface2_temp_img.set_src("U:/static/watch_plate/style_2/%d_main2_weather.png"%(type))
+
+ # def __weather_value(self, event, msg):
+ # if msg == None:
+ # watchface2_temp_degree.add_flag(lv.obj.FLAG.HIDDEN)
+ # watchface2_no_temp_txt.clear_flag(lv.obj.FLAG.HIDDEN)
+ # watchface2_temp_txt.add_flag(lv.obj.FLAG.HIDDEN)
+ # else:
+ # watchface2_no_temp_txt.add_flag(lv.obj.FLAG.HIDDEN)
+ # watchface2_temp_txt.clear_flag(lv.obj.FLAG.HIDDEN)
+ # watchface2_temp_degree.clear_flag(lv.obj.FLAG.HIDDEN)
+ # watchface2_temp_txt.set_text(str(msg))
+
+ def Close(self):
+ pass
+
+ def done_left_to_right(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def done_right_to_left(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_top_to_bottom(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def done_bottom_to_top(self):
+ EventMesh.publish("load_screen", {"screen": "call_log"})
+
+class WatchFace():
+ #NAME = "Watchface"
+
+ def __init__(self):
+ #表盘
+ self.meta = None
+ self.watchface_style_num = "Watchface1"
+ self.watchface_list = []
+ self.timer_update = osTimer()
+ EventMesh.subscribe("set_change_face", self.change_face)
+ self.read_data = {}
+ self.PWM_backlight = None
+ check = ql_fs.path_exists("/usr/static/storage_file/config.json")
+ if check == True:
+ with open("/usr/static/storage_file/config.json","r") as fd:
+ self.read_data = ujson.load(fd)
+ if self.read_data != {}:
+ b = str("watchface") in self.read_data.keys()
+ if b == True:
+ self.watchface_style_num = self.read_data["watchface"]
+ else:
+ self.watchface_style_num = "Watchface1"
+ else:
+ self.watchface_style_num = "Watchface1"
+
+ def initialization(self,main_menu):
+ if self.watchface_list == [] : #第一次初始化
+ self.watchface_list.append( WatchFace1(main_menu))
+ self.watchface_list.append( WatchFace2(main_menu))
+ print("watchface INIT !!!!!!!!:",self.watchface_style_num)
+ for wat in self.watchface_list:
+ if wat.NAME == self.watchface_style_num :
+ self.watchface_style = wat
+ wat.meta.add_flag(lv.obj.FLAG.HIDDEN) #隐藏
+ self.watchface_style.initialization(main_menu)
+ self.meta = self.watchface_style.meta
+ self.watchface_style.meta.clear_flag(lv.obj.FLAG.HIDDEN)#显示
+ self.timer_update.start(10000, 1, self.timerout_update)
+
+ def timerout_update(self, *args, **kwargs):
+ self.watchface_style.timerout_update()
+
+ def change_face(self, event=None, msg=None):
+ print("change_face :",msg)
+ self.watchface_style_num = str(msg)
+
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+ # def done_left_to_right(self):
+ # EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ # def done_right_to_left(self):
+ # EventMesh.publish("load_screen", {"screen": "main_menu"})
+ # def done_top_to_bottom(self):
+ # EventMesh.publish("load_screen", {"screen": "popup"})
+
+ # def done_bottom_to_top(self):
+ # EventMesh.publish("load_screen", {"screen": "call_log"})
+ # def done_return(self):
+ # EventMesh.publish("load_screen", {"screen": "Watchface"})
+
+ # def btn1_release(self):
+ # EventMesh.publish("load_screen", {"screen": "Watchface"})
+
+ # def btn8_press(self):
+ # EventMesh.publish("load_screen", {"screen": "Watchface"})
+
+ def Close(self):
+ print("watchface Close !!!!!!!!")
+ self.timer_update.stop()
+ self.watchface_style.Close()
+ return
+
+
+
+
--- /dev/null
+
+import lvgl as lv
+import ql_fs
+import EventMesh
+from misc import Power
+from ui import style_screen,style_font_youyuan_20,style_btn,style_img,Screen,style_contact_btn
+import constants
+import osTimer
+import audio
+from machine import Pin
+import ujson
+# -------------------------------------------setting screen----------------------------------------------------------
+
+style_bar = lv.style_t()
+style_bar.init()
+style_bar.set_radius(10)
+style_bar.set_bg_color(lv.color_make(0xA0, 0xA0, 0xA0))
+style_bar.set_bg_grad_color(lv.color_make(0xA0, 0xA0, 0xA0))
+style_bar.set_bg_grad_dir(lv.GRAD_DIR.VER)
+style_bar.set_bg_opa(60)
+style_bar.set_pad_left(0)
+style_bar.set_pad_right(0)
+style_bar.set_pad_top(0)
+style_bar.set_pad_bottom(0)
+
+style_volume_btn = lv.style_t()
+style_volume_btn.init()
+style_volume_btn.set_shadow_opa(0)
+style_volume_btn.set_border_width(0)
+style_volume_btn.set_bg_color(lv.color_make(0x80, 0x80, 0x80))
+
+style_bar_indic = lv.style_t()
+style_bar_indic.init()
+style_bar_indic.set_radius(10)
+style_bar_indic.set_bg_color(lv.color_make(0xff, 0x61, 0x3a))
+style_bar_indic.set_bg_grad_color(lv.color_make(0xff, 0x61, 0x3a))
+style_bar_indic.set_bg_grad_dir(lv.GRAD_DIR.VER)
+style_bar_indic.set_bg_opa(255)
+
+health_cont_y = 0
+health_screen = lv.obj()
+print("health_screen")
+health_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+health_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+health_title_img = lv.img(health_screen)
+health_title_img.set_pos(58, 10)
+health_title_img.set_size(124, 30)
+health_title_img.set_src("U:/static/health/health_text.png")
+health_title_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+setting_cont_style = lv.style_t()
+setting_cont_style.init()
+setting_cont_style.set_radius(0)
+setting_cont_style.set_bg_color(lv.color_make(0x00, 0x00, 0x00))
+setting_cont_style.set_bg_grad_color(lv.color_make(0x00, 0x00, 0x00))
+setting_cont_style.set_bg_grad_dir(lv.GRAD_DIR.VER)
+setting_cont_style.set_bg_opa(255)
+setting_cont_style.set_border_width(0)
+setting_cont_style.set_pad_left(0)
+setting_cont_style.set_pad_right(0)
+setting_cont_style.set_pad_top(0)
+setting_cont_style.set_pad_bottom(0)
+
+health_list_screen = lv.obj(health_screen)
+health_list_screen.set_pos(0, 50)
+health_list_screen.set_size(240, 270)
+health_list_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+health_list_screen.add_style(setting_cont_style,lv.PART.MAIN | lv.STATE.DEFAULT)
+
+setting_cont = lv.obj(health_list_screen)
+setting_cont.set_pos(0, 0)
+setting_cont.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+setting_cont.set_size(240, 271)
+setting_cont.add_style(setting_cont_style,lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+health_hr = lv.btn(setting_cont)
+health_hr.set_pos(0, health_cont_y)
+health_hr.set_size(0, 0)
+health_hr_label = lv.label(health_hr)
+health_hr_label.set_text("心率")
+health_hr.set_style_pad_all(0, lv.STATE.DEFAULT)
+health_hr_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+health_hr_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+health_hr_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+health_hr.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+health_hr_img = lv.img(setting_cont)
+health_hr_img.set_pos(0, health_cont_y)
+health_hr_img.set_size(232, 80)
+health_hr_img.add_flag(lv.obj.FLAG.CLICKABLE)
+health_hr_img.set_src("U:/static/health/health_hr.png")
+health_hr_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+health_cont_y+=90
+
+
+
+health_spo2 = lv.btn(setting_cont)
+health_spo2.set_pos(0, health_cont_y)
+health_spo2.set_size(0, 0)
+health_spo2_label = lv.label(health_spo2)
+health_spo2_label.set_text("血氧")
+health_spo2.set_style_pad_all(0, lv.STATE.DEFAULT)
+health_spo2_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+health_spo2_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+health_spo2_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+health_spo2.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+health_spo2_img = lv.img(setting_cont)
+health_spo2_img.set_pos(0, health_cont_y)
+health_spo2_img.set_size(232, 80)
+health_spo2_img.add_flag(lv.obj.FLAG.CLICKABLE)
+health_spo2_img.set_src("U:/static/health/health_spo2.png")
+health_spo2_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+health_cont_y+=90
+
+health_temp = lv.btn(setting_cont)
+health_temp.set_pos(0, health_cont_y)
+health_temp.set_size(0, 0)
+health_temp_label = lv.label(health_temp)
+health_temp_label.set_text("体温")
+health_temp.set_style_pad_all(0, lv.STATE.DEFAULT)
+health_temp_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+health_temp_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+health_temp_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+health_temp.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+health_temp_img = lv.img(setting_cont)
+health_temp_img.set_pos(0, health_cont_y)
+health_temp_img.set_size(232, 80)
+health_temp_img.add_flag(lv.obj.FLAG.CLICKABLE)
+health_temp_img.set_src("U:/static/health/health_temp.png")
+health_temp_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+health_cont_y+=90
+
+
+
+
+class HealthScreen(Screen):#健康测量
+ NAME = "health"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = health_screen
+ # setting_language.add_event_cb(lambda e: self.load_screen(e, {"screen": "language"}), lv.EVENT.CLICKED, None)
+ health_hr_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "heartrate"})), lv.EVENT.CLICKED, None)
+ # setting_themeswitch.add_event_cb(lambda e: self.load_screen(e, {"screen": "themeswitch"}), lv.EVENT.CLICKED, None)
+ health_spo2_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "spo2"})), lv.EVENT.CLICKED, None)
+ health_temp_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "temperature"})), lv.EVENT.CLICKED, None)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+##################################################################
+# -------------------------------------------language screen----------------------------------------------------------
--- /dev/null
+#主菜单
+import utime
+import osTimer
+import lvgl as lv
+import EventMesh
+from machine import Timer
+import voiceCall
+import osTimer
+import constants
+from misc import Power
+import pm
+from ui import Screen
+from ui_WatchFaceScreen import WatchFace
+style_MainMenu_screen_default = lv.style_t()
+style_MainMenu_screen_default.init()
+style_MainMenu_screen_default.set_radius(0)
+style_MainMenu_screen_default.set_bg_color(lv.color_make(0x00, 0x00, 0x00))
+style_MainMenu_screen_default.set_bg_opa(255)
+style_MainMenu_screen_default.set_border_width(0)
+style_MainMenu_screen_default.set_pad_left(0)
+style_MainMenu_screen_default.set_pad_right(0)
+style_MainMenu_screen_default.set_pad_top(0)
+style_MainMenu_screen_default.set_pad_bottom(0)
+
+style_MainMenu_img_default = lv.style_t()
+style_MainMenu_img_default.init()
+style_MainMenu_img_default.set_img_recolor(lv.color_make(0xff,0xff,0xff))
+style_MainMenu_img_default.set_img_recolor_opa(0)
+style_MainMenu_img_default.set_img_opa(255)
+
+style_font_youyuan_20 = lv.style_t()
+style_font_youyuan_20.init()
+style_font_youyuan_20.set_text_color(lv.color_make(0xff, 0xff, 0xff))
+style_font_youyuan_20.set_text_font_v2("font_28.bin",28,0)
+
+style_font_youyuan_25 = lv.style_t()
+style_font_youyuan_25.init()
+style_font_youyuan_25.set_text_color(lv.color_make(0xff, 0xff, 0xff))
+style_font_youyuan_25.set_text_font_v2("font_28.bin",28,0)
+
+style_btn = lv.style_t()
+style_btn.init()
+style_btn.set_bg_opa(lv.OPA.TRANSP)
+style_btn.set_shadow_opa(0)
+style_btn.set_border_width(0)
+
+
+# MainMenu = lv.obj()
+# class MainMenuScreen(Screen):
+# NAME = "main_menu"
+
+# def __init__(self):
+# super().__init__()
+# #主菜单
+# self.meta = MainMenu
+# self.main_menu_style_num = "MainMenu2"
+
+# def initialization(self):
+# print("main_menu INIT !!!!!!!!")
+# EventMesh.publish("load_screen", {"screen": self.main_menu_style_num})
+
+
+# def post_processor_after_instantiation(self):
+# EventMesh.subscribe("change_style", self.change_style)
+
+
+# def change_style(self, event=None, msg=None): #换风格
+# self.main_menu_style_num = msg
+# EventMesh.publish("load_screen", {"screen": self.main_menu_style_num})
+
+# def Close(self):
+# return
+
+
+# def done_return(self):
+# EventMesh.publish("load_screen", {"screen": "Watchface"})
+
+# def btn1_release(self):
+# EventMesh.publish("load_screen", {"screen": "Watchface"})
+
+# def btn8_press(self):
+# EventMesh.publish("load_screen", {"screen": "Watchface"})
+
+
+
+
+
+style_font_youyuan_font_60 = lv.style_t()
+style_font_youyuan_font_60.init()
+style_font_youyuan_font_60.set_text_color(lv.color_make(0xFF, 0xFF, 0xFF))
+style_font_youyuan_font_60.set_text_font(lv.font_60_main_menu)
+
+MainMenu2 = lv.obj()
+print("MainMenu2")
+MainMenu2_til = lv.tileview(MainMenu2)
+MainMenu2_til.set_scrollbar_mode(0)
+MainMenu2_til.add_style(style_MainMenu_screen_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+#表盘
+MainMenu2_Watchface = MainMenu2_til.add_tile(0, 1, lv.DIR.LEFT | lv.DIR.RIGHT)
+
+label_text = lv.label(MainMenu2_Watchface)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("0")
+#支付宝
+MainMenu2_alipay = MainMenu2_til.add_tile(0, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+#MainMenu2_alipay.set_tile_act(7,0,lv.ANIM.ON)#设置拼接
+label_text = lv.label(MainMenu2_alipay)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("1")
+MainMenu2_img_alipay_text = lv.label(MainMenu2_alipay)
+MainMenu2_img_alipay_text.set_pos(int(0),int(220))
+MainMenu2_img_alipay_text.set_size(240,100)
+MainMenu2_img_alipay_text.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_alipay_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_alipay_text.set_text("支付宝")
+MainMenu2_img_alipay_text.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+MainMenu2_img_alipay = lv.img(MainMenu2_alipay)
+MainMenu2_img_alipay.set_size(160,160)
+MainMenu2_img_alipay.set_pos(40,20)
+MainMenu2_img_alipay.set_src("U:/static/alipay_.png")
+MainMenu2_img_alipay.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_alipay.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+# label_alipay.set_long_mode(lv.label.LONG.WRAP)
+# label_alipay.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# label_alipay.add_style(style_font_youyuan_25, lv.PART.MAIN | lv.STATE.DEFAULT)
+#拨号盘
+MainMenu2_phone = MainMenu2_til.add_tile(1, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_phone)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("2")
+MainMenu2_img_phone = lv.img(MainMenu2_phone)
+MainMenu2_img_phone.set_size(160,160)
+MainMenu2_img_phone.set_pos(40,20)
+MainMenu2_img_phone.set_src("U:/static/IMAGE_ONE_PAGE_CALL.png")
+MainMenu2_img_phone.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_phone.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_phone_text = lv.label(MainMenu2_phone)
+MainMenu2_img_phone_text.set_pos(int(0),int(220))
+MainMenu2_img_phone_text.set_size(240,100)
+MainMenu2_img_phone_text.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_phone_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_phone_text.set_text("拨号盘")
+MainMenu2_img_phone_text.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+#通讯录
+MainMenu2_contacts = MainMenu2_til.add_tile(2, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_contacts)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("3")
+MainMenu2_img_contacts = lv.img(MainMenu2_contacts)
+MainMenu2_img_contacts.set_size(160,160)
+MainMenu2_img_contacts.set_pos(40,20)
+MainMenu2_img_contacts.set_src("U:/static/IMAGE_ONE_PAGE_CONTACTS.png")
+MainMenu2_img_contacts.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_contacts.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_contacts_txt = lv.label(MainMenu2_contacts)
+MainMenu2_img_contacts_txt.set_pos(int(0),int(220))
+MainMenu2_img_contacts_txt.set_size(240,100)
+MainMenu2_img_contacts_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_contacts_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_contacts_txt.set_text("联系人")
+MainMenu2_img_contacts_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#短信
+MainMenu2_SMS = MainMenu2_til.add_tile(3, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_SMS)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("4")
+MainMenu2_img_sms = lv.img(MainMenu2_SMS)
+MainMenu2_img_sms.set_size(160,160)
+MainMenu2_img_sms.set_pos(40,20)
+MainMenu2_img_sms.set_src("U:/static/IMAGE_ONE_PAGE_SMS.png")
+MainMenu2_img_sms.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_sms.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_sms_txt = lv.label(MainMenu2_SMS)
+MainMenu2_img_sms_txt.set_pos(int(0),int(220))
+MainMenu2_img_sms_txt.set_size(240,100)
+MainMenu2_img_sms_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_sms_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_sms_txt.set_text("短信")
+MainMenu2_img_sms_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#微聊
+MainMenu2_wechat = MainMenu2_til.add_tile(4, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_wechat)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("5")
+MainMenu2_img_wechat = lv.img(MainMenu2_wechat)
+MainMenu2_img_wechat.set_size(160,160)
+MainMenu2_img_wechat.set_pos(40,20)
+MainMenu2_img_wechat.set_src("U:/static/IMAGE_ONE_PAGE_WECHAT.png")
+MainMenu2_img_wechat.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_wechat.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_wechat_txt = lv.label(MainMenu2_wechat)
+MainMenu2_img_wechat_txt.set_pos(int(0),int(220))
+MainMenu2_img_wechat_txt.set_size(240,100)
+MainMenu2_img_wechat_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_wechat_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_wechat_txt.set_text("微聊")
+MainMenu2_img_wechat_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#心律检测
+MainMenu2_heartrate = MainMenu2_til.add_tile(5, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_heartrate)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("6")
+MainMenu2_img_health = lv.img(MainMenu2_heartrate)
+MainMenu2_img_health.set_size(160,160)
+MainMenu2_img_health.set_pos(40,20)
+MainMenu2_img_health.set_src("U:/static/IMAGE_ONE_PAGE_HEALTH.png")
+MainMenu2_img_health.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_health.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_health_txt = lv.label(MainMenu2_heartrate)
+MainMenu2_img_health_txt.set_pos(int(0),int(220))
+MainMenu2_img_health_txt.set_size(240,100)
+MainMenu2_img_health_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_health_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_health_txt.set_text("健康测量")
+MainMenu2_img_health_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+#血样检测
+# MainMenu2_spo2 = MainMenu2_til.add_tile(4, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+# label_text = lv.label(MainMenu2_spo2)
+# label_text.set_pos(0, 240)
+# label_text.set_size(0, 0)
+# label_text.set_text("5")
+# MainMenu2_img_spo2 = lv.img(MainMenu2_spo2)
+# MainMenu2_img_spo2.set_size(160,160)
+# MainMenu2_img_spo2.set_pos(40,20)
+# MainMenu2_img_spo2.set_src("U:/static/IMAGE_ONE_PAGE_SPO2_DETECT.png")
+# MainMenu2_img_spo2.add_flag(lv.obj.FLAG.CLICKABLE)
+# MainMenu2_img_spo2.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# MainMenu2_img_spo2_txt = lv.label(MainMenu2_spo2)
+# MainMenu2_img_spo2_txt.set_pos(int(0),int(220))
+# MainMenu2_img_spo2_txt.set_size(240,100)
+# MainMenu2_img_spo2_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+# MainMenu2_img_spo2_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# MainMenu2_img_spo2_txt.set_text("血氧检测")
+# MainMenu2_img_spo2_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+#工具箱
+MainMenu2_toolbox = MainMenu2_til.add_tile(6, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_toolbox)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("7")
+MainMenu2_img_toolbox = lv.img(MainMenu2_toolbox)
+MainMenu2_img_toolbox.set_size(160,160)
+MainMenu2_img_toolbox.set_pos(40,20)
+MainMenu2_img_toolbox.set_src("U:/static/IMAGE_ONE_PAGE_TOOLS.png")
+MainMenu2_img_toolbox.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_toolbox.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_toolbox_txt = lv.label(MainMenu2_toolbox)
+MainMenu2_img_toolbox_txt.set_pos(int(0),int(220))
+MainMenu2_img_toolbox_txt.set_size(240,100)
+MainMenu2_img_toolbox_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_toolbox_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_toolbox_txt.set_text("工具箱")
+MainMenu2_img_toolbox_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+#设置
+MainMenu2_setting = MainMenu2_til.add_tile(7, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+#MainMenu2_setting.set_tile_act(0,0,lv.ANIM.ON)
+label_text = lv.label(MainMenu2_setting)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("8")
+MainMenu2_img_setting = lv.img(MainMenu2_setting)
+MainMenu2_img_setting.set_size(160,160)
+MainMenu2_img_setting.set_pos(40,20)
+MainMenu2_img_setting.set_src("U:/static/IMAGE_ONE_PAGE_SETTINGS.png")
+MainMenu2_img_setting.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_setting.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_setting_txt = lv.label(MainMenu2_setting)
+MainMenu2_img_setting_txt.set_pos(int(0),int(220))
+MainMenu2_img_setting_txt.set_size(240,100)
+MainMenu2_img_setting_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_setting_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_setting_txt.set_text("设置")
+MainMenu2_img_setting_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+
+
+
+
+
+
+#主菜单风格2,单页
+class MainMenuScreen(Screen):
+ NAME = "main_menu"
+ def __init__(self):
+ self.meta = MainMenu2
+ self.watchface = WatchFace()
+ self.menu_id = "0"
+ print("MainMenu1:__init__")
+ #MainMenu2_til.add_event_cb(lambda e: EventMesh.callback_wrapper(self.scroll_begin_event(e)),lv.EVENT.SCROLL_END,None)
+ #lv_obj_add_event_cb(lv_tabview_get_content(tabview), scroll_begin_event, LV_EVENT_SCROLL_END, NULL);
+ MainMenu2_img_phone.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "Phone")), lv.EVENT.CLICKED, None)
+ MainMenu2_img_toolbox.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "toolbox")), lv.EVENT.CLICKED, None)
+ MainMenu2_img_setting.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "setting")), lv.EVENT.CLICKED, None)
+ MainMenu2_img_health.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "health")), lv.EVENT.CLICKED, None)
+ MainMenu2_img_contacts.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "contacts")), lv.EVENT.CLICKED, None)
+ MainMenu2_img_wechat.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "wechat")), lv.EVENT.CLICKED, None)
+ # MainMenu2_img_spo2.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "spo2")), lv.EVENT.CLICKED, None)
+ MainMenu2_img_sms.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "popup")), lv.EVENT.CLICKED, None)
+ MainMenu2_img_alipay.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "alipay_open")), lv.EVENT.CLICKED, None)
+
+ EventMesh.subscribe("watch_top_show", self.watch_top_show)
+ #MainMenu2_img_alipay.add_event_cb(lambda e: img_cb(e, "Watchface_set"), lv.EVENT.CLICKED, None)
+
+ def initialization(self):
+ self.watchface.initialization(MainMenu2_Watchface)
+
+ if self.menu_id =="0":
+ MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF)
+ # if self.meta_info in globals() :
+ # MainMenu2_til.set_tile_id(self.meta_info[0],self.meta_info[1],lv.ANIM.OFF)
+ pass#
+
+ def scroll_begin_event(self, e):
+ print("MainMenu2:scroll_begin_event!")
+ MainMenu = e.get_target()
+ code = e.get_code()
+ if code == lv.EVENT.SCROLL_END:
+ pass
+ def watch_top_show(self, event, msg): #
+ MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF)
+
+ def img_cb(self, e, msg):
+ print("MainMenu2:img_cb:{}".format(msg))
+ EventMesh.publish("load_screen", {"screen": "{}".format(msg)})
+
+ def lcd_on(self):
+ self.watchface.watchface_style.timerout_update()
+ self.watchface.timer_update.start(10000, 1, self.watchface.timerout_update)
+
+ def lcd_off(self):
+ self.watchface.timer_update.stop()
+
+ def done_return(self):
+ MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF)
+
+ def btn1_release(self):
+ flag = EventMesh.publish("get_lcd_state")
+ if flag == 0:
+ EventMesh.publish(constants.EVENT.SYSTEM_UP)
+ else:
+ if MainMenu2_til.get_tile_act() != None:
+ id = MainMenu2_til.get_tile_act().get_child(0).get_text()
+ if id != "0":
+ MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF)
+ else:
+ MainMenu2_til.set_tile_id(0,0,lv.ANIM.OFF)
+
+
+ def btn8_press(self):
+ flag = EventMesh.publish("get_lcd_state")
+ if MainMenu2_til.get_tile_act() != None:
+ id = MainMenu2_til.get_tile_act().get_child(0).get_text()
+ if id == "0":
+ if flag == 1:
+ EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)
+ else:
+ EventMesh.publish(constants.EVENT.SYSTEM_UP)
+ else:
+ if flag == 1:
+ MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF)
+ else:
+ EventMesh.publish(constants.EVENT.SYSTEM_UP)
+ else:
+ if flag == 1:
+ MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF)
+ else:
+ EventMesh.publish(constants.EVENT.SYSTEM_UP)
+
+ def done_bottom_to_top(self):
+ id = MainMenu2_til.get_tile_act().get_child(0).get_text()
+ if id == "0":
+ EventMesh.publish("load_screen", {"screen": "call_log"})
+ self.menu_id = id
+
+ def done_top_to_bottom(self):
+ id = MainMenu2_til.get_tile_act().get_child(0).get_text()
+ if id == "0":
+ EventMesh.publish("load_screen", {"screen": "popup"})
+ self.menu_id = id
+ def done_left_to_right(self):
+ id = MainMenu2_til.get_tile_act().get_child(0).get_text()
+ print("done_left_to_right:ID{}".format(id))
+ if id == "0":
+ MainMenu2_til.set_tile_id(7,0,lv.ANIM.OFF)
+ elif self.menu_id != '2' and id == '1':
+ MainMenu2_til.set_tile_id(7,0,lv.ANIM.OFF)
+ self.menu_id = id
+ def done_right_to_left(self):
+ id = MainMenu2_til.get_tile_act().get_child(0).get_text()
+ print("done_right_to_left:ID{}".format(id))
+ if id == "0":
+ MainMenu2_til.set_tile_id(0,0,lv.ANIM.OFF)
+ elif (self.menu_id != '7' ) and id == '8':
+ MainMenu2_til.set_tile_id(0,0,lv.ANIM.OFF)
+ self.menu_id = id
+
+ def Close(self):
+ self.watchface.Close()
+ print("main_menu Close !!!!!!!!")
+ return
+
--- /dev/null
+
+import lvgl as lv
+import ql_fs
+import EventMesh
+from misc import Power
+from ui import style_screen,style_font_youyuan_20,style_btn,style_img,Screen,style_contact_btn,style_bar,style_bar_indic
+import constants
+import osTimer
+import audio
+from machine import Pin
+import ujson
+# -------------------------------------------setting screen----------------------------------------------------------
+
+
+
+style_volume_btn = lv.style_t()
+style_volume_btn.init()
+style_volume_btn.set_shadow_opa(0)
+style_volume_btn.set_border_width(0)
+style_volume_btn.set_bg_color(lv.color_make(0x80, 0x80, 0x80))
+
+
+
+setting_cont_y = 0
+setting_screen = lv.obj()
+print("setting_screen")
+setting_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+setting_imei_img = lv.img(setting_screen)
+setting_imei_img.set_pos(75, 10)
+setting_imei_img.set_size(90, 30)
+setting_imei_img.set_src("U:/static/setting/setting_text.png")
+setting_imei_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+# setting_title = lv.label(setting)
+# setting_title.set_pos(0, 10)
+# setting_title.set_size(240, 40)
+# setting_title.set_text("设置")
+# setting_title.set_long_mode(lv.label.LONG.WRAP)
+# setting_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# setting_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_cont_style = lv.style_t()
+setting_cont_style.init()
+setting_cont_style.set_radius(0)
+setting_cont_style.set_bg_color(lv.color_make(0x00, 0x00, 0x00))
+setting_cont_style.set_bg_grad_color(lv.color_make(0x00, 0x00, 0x00))
+setting_cont_style.set_bg_grad_dir(lv.GRAD_DIR.VER)
+setting_cont_style.set_bg_opa(255)
+setting_cont_style.set_border_width(0)
+setting_cont_style.set_pad_left(0)
+setting_cont_style.set_pad_right(0)
+setting_cont_style.set_pad_top(0)
+setting_cont_style.set_pad_bottom(0)
+
+
+setting_cont = lv.obj(setting_screen)
+setting_cont.set_pos(0, 50)
+setting_cont.set_size(240, 270)
+setting_cont.add_style(setting_cont_style,lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# setting_language = lv.btn(setting_cont)
+# setting_language.set_pos(0, setting_cont_y)
+# setting_language.set_size(240, 54)
+# setting_language_label = lv.label(setting_language)
+# setting_language_label.set_text("语言设置")
+# setting_language.set_style_pad_all(0, lv.STATE.DEFAULT)
+# setting_language_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+# setting_language_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+# setting_language_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# setting_language.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+# setting_language_img = lv.img(setting_cont)
+# setting_language_img.set_pos(10, setting_cont_y)set_size(47, 47)
+# setting_language_img.set_size(232, 80)
+# setting_language_img.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_language_img.set_src("U:/static/menu_language.png")
+# setting_language_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+#setting_cont_y += 60
+
+setting_dialswitch = lv.btn(setting_cont)
+setting_dialswitch.set_pos(0, setting_cont_y)
+setting_dialswitch.set_size(0, 0)
+setting_dialswitch_label = lv.label(setting_dialswitch)
+setting_dialswitch_label.set_text("表盘切换")
+setting_dialswitch.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_dialswitch_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_dialswitch_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_dialswitch_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_dialswitch.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_dialswitch_img = lv.img(setting_cont)
+setting_dialswitch_img.set_pos(0, setting_cont_y)
+setting_dialswitch_img.set_size(232, 80)
+setting_dialswitch_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_dialswitch_img.set_src("U:/static/setting/menu_watch_switch.png")
+setting_dialswitch_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_cont_y+=90
+
+
+# setting_themeswitch = lv.btn(setting_cont)
+# setting_themeswitch.set_pos(0, 120)
+# setting_themeswitch.set_size(240, 54)
+# setting_themeswitch_label = lv.label(setting_themeswitch)
+# setting_themeswitch_label.set_text("主题切换")
+# setting_themeswitch.set_style_pad_all(0, lv.STATE.DEFAULT)
+# setting_themeswitch_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+# setting_themeswitch_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+# setting_themeswitch_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# setting_themeswitch.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+# setting_themeswitch_img = lv.img(setting_cont)
+# setting_themeswitch_img.set_pos(10, 120)
+# setting_themeswitch_img.set_size(232, 80)
+# setting_themeswitch_img.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_themeswitch_img.set_src("U:/static/menu_theme_switch.png")
+# setting_themeswitch_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+#setting_cont_y+=60
+
+setting_imei = lv.btn(setting_cont)
+setting_imei.set_pos(0, setting_cont_y)
+setting_imei.set_size(0, 0)
+setting_imei_label = lv.label(setting_imei)
+setting_imei_label.set_text("设备IMEI号")
+setting_imei.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_imei_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_imei_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_imei_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_imei.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_imei_img = lv.img(setting_cont)
+setting_imei_img.set_pos(0, setting_cont_y)
+setting_imei_img.set_size(232, 80)
+setting_imei_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_imei_img.set_src("U:/static/setting/menu_imei_qrcode.png")
+setting_imei_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_cont_y+=90
+
+setting_app = lv.btn(setting_cont)
+setting_app.set_pos(0, setting_cont_y)
+setting_app.set_size(0, 0)
+setting_app_label = lv.label(setting_app)
+setting_app_label.set_text("手机安装APP")
+setting_app.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_app_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_app_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_app_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_app.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_app_img = lv.img(setting_cont)
+setting_app_img.set_pos(0, setting_cont_y)
+setting_app_img.set_size(232, 80)
+setting_app_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_app_img.set_src("U:/static/setting/menu_app_qrcode.png")
+setting_app_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_cont_y+=90
+
+setting_bright = lv.btn(setting_cont)
+setting_bright.set_pos(0, setting_cont_y)
+setting_bright.set_size(0, 0)
+setting_bright_label = lv.label(setting_bright)
+setting_bright_label.set_text("屏幕调节")
+setting_bright.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_bright_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_bright_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_bright_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_bright.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_bright_img = lv.img(setting_cont)
+setting_bright_img.set_pos(0, setting_cont_y)
+setting_bright_img.set_size(232, 80)
+setting_bright_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_bright_img.set_src("U:/static/setting/menu_bright.png")
+setting_bright_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_cont_y+=90
+
+setting_volume = lv.btn(setting_cont)
+setting_volume.set_pos(0, setting_cont_y)
+setting_volume.set_size(0, 0)
+setting_volume_label = lv.label(setting_volume)
+setting_volume_label.set_text("铃声")
+setting_volume.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_volume_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_volume_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_volume_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_volume.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_volume_img = lv.img(setting_cont)
+setting_volume_img.set_pos(0, setting_cont_y)
+setting_volume_img.set_size(232, 80)
+setting_volume_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_volume_img.set_src("U:/static/setting/menu_volume.png")
+setting_volume_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_cont_y+=90
+
+setting_restore = lv.btn(setting_cont)
+setting_restore.set_pos(0, setting_cont_y)
+setting_restore.set_size(0, 0)
+setting_restore_label = lv.label(setting_restore)
+setting_restore_label.set_text("恢复出厂设置")
+setting_restore.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_restore_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_restore_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_restore_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_restore.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_restore_img = lv.img(setting_cont)
+setting_restore_img.set_pos(0, setting_cont_y)
+setting_restore_img.set_size(232, 80)
+setting_restore_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_restore_img.set_src("U:/static/setting/menu_restore.png")
+setting_restore_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_cont_y+=90
+
+setting_poweroff = lv.btn(setting_cont)
+setting_poweroff.set_pos(0, setting_cont_y)
+setting_poweroff.set_size(0, 0)
+setting_poweroff_label = lv.label(setting_poweroff)
+setting_poweroff_label.set_text("关机")
+setting_poweroff.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_poweroff_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_poweroff_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_poweroff_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_poweroff.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_poweroff_img = lv.img(setting_cont)
+setting_poweroff_img.set_pos(0, setting_cont_y)
+setting_poweroff_img.set_size(232, 80)
+setting_poweroff_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_poweroff_img.set_src("U:/static/setting/menu_poweroff.png")
+setting_poweroff_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_cont_y+=90
+
+setting_version = lv.btn(setting_cont)
+setting_version.set_pos(0, setting_cont_y)
+setting_version.set_size(0, 0)
+setting_version_label = lv.label(setting_version)
+setting_version_label.set_text("关于设备")
+setting_version.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_version_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_version_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_version_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_version.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_version_img = lv.img(setting_cont)
+setting_version_img.set_pos(0, setting_cont_y)
+setting_version_img.set_size(232, 80)
+setting_version_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_version_img.set_src("U:/static/setting/menu_version.png")
+setting_version_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_cont_y+=90
+
+setting_update = lv.btn(setting_cont)
+setting_update.set_pos(0, setting_cont_y)
+setting_update.set_size(0, 0)
+setting_update_label = lv.label(setting_update)
+setting_update_label.set_text("系统升级")
+setting_update.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_update_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_update_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_update_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_update.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_update_img = lv.img(setting_cont)
+setting_update_img.set_pos(0, setting_cont_y)
+setting_update_img.set_size(232, 80)
+setting_update_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_update_img.set_src("U:/static/setting/menu_upgrade.png")
+setting_update_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+class SettingScreen(Screen):
+ NAME = "setting"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = setting_screen
+ # setting_language.add_event_cb(lambda e: self.load_screen(e, {"screen": "language"}), lv.EVENT.CLICKED, None)
+ setting_dialswitch.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "dialswitch"})), lv.EVENT.CLICKED, None)
+ # setting_themeswitch.add_event_cb(lambda e: self.load_screen(e, {"screen": "themeswitch"}), lv.EVENT.CLICKED, None)
+ setting_imei.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "imei"})), lv.EVENT.CLICKED, None)
+ setting_app.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "app"})), lv.EVENT.CLICKED, None)
+ setting_bright.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "brightness"})), lv.EVENT.CLICKED, None)
+ setting_volume.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "totalvolume"})), lv.EVENT.CLICKED, None)
+ setting_restore.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "restore"})), lv.EVENT.CLICKED, None)
+ setting_poweroff.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "poweroff"})), lv.EVENT.CLICKED, None)
+ setting_update.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "update"})), lv.EVENT.CLICKED, None)
+ setting_version.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "version"})), lv.EVENT.CLICKED, None)
+
+ # img regist btton
+ # setting_language.add_event_cb(lambda e: self.load_screen(e, {"screen": "language"}), lv.EVENT.CLICKED, None)
+ setting_dialswitch_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "dialswitch"})), lv.EVENT.CLICKED, None)
+ # setting_themeswitch.add_event_cb(lambda e: self.load_screen(e, {"screen": "themeswitch"}), lv.EVENT.CLICKED, None)
+ setting_imei_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "imei"})), lv.EVENT.CLICKED, None)
+ setting_app_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "app"})), lv.EVENT.CLICKED, None)
+ setting_bright_img.add_event_cb(lambda e:EventMesh.callback_wrapper( self.load_screen(e, {"screen": "brightness"})), lv.EVENT.CLICKED, None)
+ setting_volume_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "totalvolume"})), lv.EVENT.CLICKED, None)
+ setting_restore_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "restore"})), lv.EVENT.CLICKED, None)
+ setting_poweroff_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "poweroff"})), lv.EVENT.CLICKED, None)
+ setting_update_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "update"})), lv.EVENT.CLICKED, None)
+ setting_version_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "version"})), lv.EVENT.CLICKED, None)
+
+
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+##################################################################
+# -------------------------------------------language screen----------------------------------------------------------
+language_screen = lv.obj()
+print("language_screen")
+language_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+language_title = lv.label(language_screen)
+language_title.set_pos(0, 10)
+language_title.set_size(240, 40)
+language_title.set_text("语言设置")
+language_title.set_long_mode(lv.label.LONG.WRAP)
+language_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+language_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+language_english_btn = lv.btn(language_screen)
+language_english_btn.set_size(240,50)
+language_english_btn.set_pos(0, 60)
+language_english_btn.add_style(style_contact_btn, lv.PART.MAIN | lv.STATE.PRESSED)
+language_english_btn.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+language_english_btn_label = lv.label(language_english_btn)
+language_english_btn_label.set_text("English")
+language_english_btn_label.align(lv.ALIGN.LEFT_MID, 10, 0)
+language_english_btn_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+language_chinese_btn = lv.btn(language_screen)
+language_chinese_btn.set_size(240,50)
+language_chinese_btn.set_pos(0, 120)
+language_chinese_btn.add_style(style_contact_btn, lv.PART.MAIN | lv.STATE.PRESSED)
+language_chinese_btn.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+language_chinese_btn_label = lv.label(language_chinese_btn)
+language_chinese_btn_label.set_text("简体中文")
+language_chinese_btn_label.align(lv.ALIGN.LEFT_MID, 10, 0)
+language_chinese_btn_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# -------------------------------------------dialswitch screen----------------------------------------------------------
+dialswitch_screen = lv.obj()
+dialswitch_screen.set_pos(0,0)
+dialswitch_screen.set_size(240,320)
+print("dialswitch_screen")
+dialswitch_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+dialswitch_title = lv.label(dialswitch_screen)
+dialswitch_title.set_pos(0, 10)
+dialswitch_title.set_size(240, 40)
+dialswitch_title.set_text("表盘切换")
+dialswitch_title.set_long_mode(lv.label.LONG.WRAP)
+dialswitch_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+dialswitch_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+dialswitch_img1 = lv.img(dialswitch_screen)#表盘预览图
+dialswitch_img1.set_pos(50, 60)
+dialswitch_img1.set_size(140, 172)
+dialswitch_img1.set_src("U:/static/DIAL_PREV01.png")
+dialswitch_img1.add_flag(lv.obj.FLAG.CLICKABLE)
+dialswitch_img1.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+dialswitch_btn1_label = lv.label(dialswitch_screen)#显示表盘1 表盘2
+dialswitch_btn1_label.set_text(" ")
+dialswitch_btn1_label.align(lv.ALIGN.TOP_MID, 0, 260)
+dialswitch_btn1_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+dialswitch_butoom_crcile1 = lv.img(dialswitch_screen)#底部显示圆点
+dialswitch_butoom_crcile1.set_pos(95, 300)
+dialswitch_butoom_crcile1.set_size(10, 10)
+dialswitch_butoom_crcile1.set_src("U:/static/point_white.png")
+dialswitch_butoom_crcile1.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+dialswitch_butoom_crcile2 = lv.img(dialswitch_screen)#底部显示圆点
+dialswitch_butoom_crcile2.set_pos(140, 300)
+dialswitch_butoom_crcile2.set_size(10, 10)
+dialswitch_butoom_crcile2.set_src("U:/static/point_black.png")
+dialswitch_butoom_crcile2.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# dialswitch_btn2 = lv.btn(dialswitch_screen)
+# dialswitch_btn2.set_size(240,54)
+# dialswitch_btn2.set_pos(0, 104)
+# dialswitch_btn2.add_style(style_contact_btn, lv.PART.MAIN | lv.STATE.PRESSED)
+# dialswitch_btn2.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+# dialswitch_btn2_label = lv.label(dialswitch_btn2)
+# dialswitch_btn2_label.set_text("表盘2")
+# dialswitch_btn2_label.align(lv.ALIGN.LEFT_MID, 10, 0)
+# dialswitch_btn2_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# btn1_switch = lv.switch(dialswitch_btn1)
+# btn1_switch.set_pos(185, 3)
+# btn1_switch.set_size(10, 10)
+# btn1_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN | lv.PART.INDICATOR)
+# btn1_switch.set_style_bg_color(lv.color_make(0xff, 0x00, 0x00),lv.PART.KNOB | lv.STATE.CHECKED)
+# btn1_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.KNOB)
+
+# btn2_switch = lv.switch(dialswitch_btn2)
+# btn2_switch.set_pos(185, 3)
+# btn2_switch.set_size(10, 10)
+# btn2_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN | lv.PART.INDICATOR)
+# btn2_switch.set_style_bg_color(lv.color_make(0xff, 0x00, 0x00),lv.PART.KNOB | lv.STATE.CHECKED)
+# btn2_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.KNOB)
+
+# -------------------------------------------menustyle screen----------------------------------------------------------
+menustyle_screen = lv.obj()
+print("menustyle_screen")
+menustyle_screen.center()
+menustyle_screen.set_size(240, 320)
+menustyle_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+menustyle_title = lv.label(menustyle_screen)
+menustyle_title.set_pos(0, 10)
+menustyle_title.set_size(240, 40)
+menustyle_title.set_text("主菜单风格")
+menustyle_title.set_long_mode(lv.label.LONG.WRAP)
+menustyle_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+menustyle_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+menustyle_btn1 = lv.btn(menustyle_screen)
+menustyle_btn1.set_size(240,54)
+menustyle_btn1.set_pos(0, 50)
+menustyle_btn1.add_style(style_contact_btn, lv.PART.MAIN | lv.STATE.PRESSED)
+menustyle_btn1.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+menustyle_btn1_label = lv.label(menustyle_btn1)
+menustyle_btn1_label.set_text("四宫格")
+menustyle_btn1_label.align(lv.ALIGN.LEFT_MID, 10, 0)
+menustyle_btn1_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+menu_btn1_switch = lv.switch(menustyle_btn1)
+menu_btn1_switch.set_pos(185, 3)
+menu_btn1_switch.set_size(10, 10)
+menu_btn1_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN | lv.PART.INDICATOR)
+menu_btn1_switch.set_style_bg_color(lv.color_make(0xff, 0x00, 0x00),lv.PART.KNOB | lv.STATE.CHECKED)
+menu_btn1_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.KNOB)
+
+menustyle_btn2 = lv.btn(menustyle_screen)
+menustyle_btn2.set_size(240,54)
+menustyle_btn2.set_pos(0, 104)
+menustyle_btn2.add_style(style_contact_btn, lv.PART.MAIN | lv.STATE.PRESSED)
+menustyle_btn2.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+menustyle_btn2_label = lv.label(menustyle_btn2)
+menustyle_btn2_label.set_text("单页")
+menustyle_btn2_label.align(lv.ALIGN.LEFT_MID, 10, 0)
+menustyle_btn2_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+menu_btn2_switch = lv.switch(menustyle_btn2)
+menu_btn2_switch.set_pos(185, 3)
+menu_btn2_switch.set_size(10, 10)
+menu_btn2_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN | lv.PART.INDICATOR)
+menu_btn2_switch.set_style_bg_color(lv.color_make(0xff, 0x00, 0x00),lv.PART.KNOB | lv.STATE.CHECKED)
+menu_btn2_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.KNOB)
+
+
+
+
+
+# -------------------------------------------app screen----------------------------------------------------------
+#app_screen = lv.obj()
+app_screen = lv.obj()
+print("app_screen")
+app_screen.center()
+app_screen.set_size(240, 320)
+app_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+app_img = lv.img(app_screen)
+app_img.set_pos(int(20),int(40))
+app_img.set_size(200,200)
+app_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+app_img.add_flag(lv.obj.FLAG.CLICKABLE)
+app_img.set_src("U:/static/IMAGE_APP_QR_CODE.png")
+app_img.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+# app_qr = lv.qrcode(imei, 150, fg_color, bg_color)
+# app_qr.center()
+# Add a border with bg_color
+# app_qr.set_style_border_color(bg_color, 0)
+# app_qr.set_style_border_width(5, 0)
+# app_qr_data = str("https://fangzoudiu.xcloudtech.com/xiao_jian")
+# app_qr.update(app_qr_data,len(app_qr_data))
+
+app_label = lv.label(app_screen)
+app_label.set_pos(0, 280)
+app_label.set_size(240, 20)
+app_label.set_text(" ")
+app_label.set_long_mode(lv.label.LONG.WRAP)
+app_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+app_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+# -------------------------------------------volume screen----------------------------------------------------------
+volume_screen = lv.obj()
+print("volume_screen")
+volume_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+volume_phone_btn = lv.btn(volume_screen)
+volume_phone_btn.set_size(240,40)
+volume_phone_btn.set_pos(0,30)
+volume_phone_btn.add_style(style_volume_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+volume_phone_label = lv.label(volume_phone_btn)
+volume_phone_label.set_text("电话铃声")
+volume_phone_label.align(lv.ALIGN.CENTER, 0, 0)
+volume_phone_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+volume_alarm_btn = lv.btn(volume_screen)
+volume_alarm_btn.set_size(240,40)
+volume_alarm_btn.set_pos(0,100)
+volume_alarm_btn.add_style(style_volume_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+volume_alarm_label = lv.label(volume_alarm_btn)
+volume_alarm_label.set_text("闹钟铃声")
+volume_alarm_label.align(lv.ALIGN.CENTER, 0, 0)
+volume_alarm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+volume_message_btn = lv.btn(volume_screen)
+volume_message_btn.set_size(240,40)
+volume_message_btn.set_pos(0,170)
+volume_message_btn.add_style(style_volume_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+volume_message_label = lv.label(volume_message_btn)
+volume_message_label.set_text("消息铃声")
+volume_message_label.align(lv.ALIGN.CENTER, 0, 0)
+volume_message_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# -------------------------------------------phonering screen----------------------------------------------------------
+phonering_screen = lv.obj()
+print("phonering_screen")
+phonering_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+phonering_title = lv.label(phonering_screen)
+phonering_title.set_pos(0, 10)
+phonering_title.set_size(240, 40)
+phonering_title.set_text("电话铃声")
+phonering_title.set_long_mode(lv.label.LONG.WRAP)
+phonering_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+phonering_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+phonering_label1 = lv.label(phonering_screen)
+phonering_label1.set_pos(10, 70)
+phonering_label1.set_size(230, 40)
+phonering_label1.set_text("电话铃声:")
+phonering_label1.set_long_mode(lv.label.LONG.WRAP)
+phonering_label1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+phonering_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+phonering_bar = lv.bar(phonering_screen)
+phonering_bar.set_pos(20, 120)
+phonering_bar.set_size(200, 15)
+phonering_bar.set_style_anim_time(1000, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+phonering_bar.set_mode(lv.bar.MODE.NORMAL)
+phonering_bar.set_value(50, lv.ANIM.OFF)
+phonering_bar.add_style(style_bar, lv.PART.MAIN | lv.STATE.DEFAULT)
+phonering_bar.add_style(style_bar_indic, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+
+phonering_reduce_imgbtn = lv.img(phonering_screen)
+phonering_reduce_imgbtn.set_pos(0, 150)
+phonering_reduce_imgbtn.set_size(110, 46)
+phonering_reduce_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+phonering_reduce_imgbtn.set_src("U:/static/reduce_btn.png")
+phonering_reduce_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+phonering_add_imgbtn = lv.img(phonering_screen)
+phonering_add_imgbtn.set_pos(120, 150)
+phonering_add_imgbtn.set_size(110, 46)
+phonering_add_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+phonering_add_imgbtn.set_src("U:/static/add_btn.png")
+
+phonering_add_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+# -------------------------------------------alarmvolume screen----------------------------------------------------------
+alarmvolume_screen = lv.obj()
+print("alarmvolume_screen")
+alarmvolume_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+alarmvolume_title = lv.label(alarmvolume_screen)
+alarmvolume_title.set_pos(0, 10)
+alarmvolume_title.set_size(240, 40)
+alarmvolume_title.set_text("闹钟铃声")
+alarmvolume_title.set_long_mode(lv.label.LONG.WRAP)
+alarmvolume_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+alarmvolume_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+alarmvolume_label1 = lv.label(alarmvolume_screen)
+alarmvolume_label1.set_pos(10, 70)
+alarmvolume_label1.set_size(230, 40)
+alarmvolume_label1.set_text("闹钟铃声:")
+alarmvolume_label1.set_long_mode(lv.label.LONG.WRAP)
+alarmvolume_label1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+alarmvolume_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+alarmvolume_bar = lv.bar(alarmvolume_screen)
+alarmvolume_bar.set_pos(20, 120)
+alarmvolume_bar.set_size(200, 15)
+alarmvolume_bar.set_style_anim_time(1000, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+alarmvolume_bar.set_mode(lv.bar.MODE.NORMAL)
+alarmvolume_bar.set_value(50, lv.ANIM.OFF)
+alarmvolume_bar.add_style(style_bar, lv.PART.MAIN | lv.STATE.DEFAULT)
+alarmvolume_bar.add_style(style_bar_indic, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+
+alarmvolume_reduce_imgbtn = lv.img(alarmvolume_screen)
+alarmvolume_reduce_imgbtn.set_pos(5, 150)
+alarmvolume_reduce_imgbtn.set_size(110, 46)
+alarmvolume_reduce_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+alarmvolume_reduce_imgbtn.set_src("U:/static/reduce_btn.png")
+
+alarmvolume_reduce_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+alarmvolume_add_imgbtn = lv.img(alarmvolume_screen)
+alarmvolume_add_imgbtn.set_pos(125, 150)
+alarmvolume_add_imgbtn.set_size(110, 46)
+alarmvolume_add_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+alarmvolume_add_imgbtn.set_src("U:/static/add_btn.png")
+
+alarmvolume_add_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+# -------------------------------------------msgvolume screen----------------------------------------------------------
+msgvolume_screen = lv.obj()
+print("msgvolume_screen")
+msgvolume_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+msgvolume_title = lv.label(msgvolume_screen)
+msgvolume_title.set_pos(0, 10)
+msgvolume_title.set_size(240, 40)
+msgvolume_title.set_text("消息铃声")
+msgvolume_title.set_long_mode(lv.label.LONG.WRAP)
+msgvolume_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+msgvolume_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+msgvolume_label1 = lv.label(msgvolume_screen)
+msgvolume_label1.set_pos(10, 70)
+msgvolume_label1.set_size(230, 40)
+msgvolume_label1.set_text("消息铃声:")
+msgvolume_label1.set_long_mode(lv.label.LONG.WRAP)
+msgvolume_label1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+msgvolume_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+msgvolume_bar = lv.bar(msgvolume_screen)
+msgvolume_bar.set_pos(20, 120)
+msgvolume_bar.set_size(200, 15)
+msgvolume_bar.set_style_anim_time(1000, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+msgvolume_bar.set_mode(lv.bar.MODE.NORMAL)
+msgvolume_bar.set_value(50, lv.ANIM.OFF)
+msgvolume_bar.add_style(style_bar, lv.PART.MAIN | lv.STATE.DEFAULT)
+msgvolume_bar.add_style(style_bar_indic, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+
+msgvolume_reduce_imgbtn = lv.img(msgvolume_screen)
+msgvolume_reduce_imgbtn.set_pos(5, 150)
+msgvolume_reduce_imgbtn.set_size(110, 46)
+msgvolume_reduce_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+msgvolume_reduce_imgbtn.set_src("U:/static/reduce_btn.png")
+
+msgvolume_reduce_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+msgvolume_add_imgbtn = lv.img(msgvolume_screen)
+msgvolume_add_imgbtn.set_pos(125, 150)
+msgvolume_add_imgbtn.set_size(110, 46)
+msgvolume_add_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+msgvolume_add_imgbtn.set_src("U:/static/add_btn.png")
+
+msgvolume_add_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+# -------------------------------------------restore screen----------------------------------------------------------
+restore_screen = lv.obj()
+print("restore_screen")
+restore_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+restore_label = lv.label(restore_screen)
+restore_label.set_pos(0, 100)
+restore_label.set_size(240, 40)
+restore_label.set_text("恢复出厂设置?")
+restore_label.set_long_mode(lv.label.LONG.WRAP)
+restore_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+restore_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+restore_confirm_label = lv.label(restore_screen)
+restore_confirm_label.set_text("确认")
+restore_confirm_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+restore_confirm_label.set_size(120, 60)
+restore_confirm_label.set_pos(0,180)
+restore_confirm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+restore_confirm = lv.label(restore_screen)
+restore_confirm.set_text(" ")
+restore_confirm.set_size(120, 80)
+restore_confirm.set_pos(0,160)
+restore_confirm.add_flag(lv.obj.FLAG.CLICKABLE)
+
+restore_cancel_label = lv.label(restore_screen)
+restore_cancel_label.set_text("返回")
+restore_cancel_label.set_size(120, 60)
+restore_cancel_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+restore_cancel_label.set_pos(120,180)
+restore_cancel_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+restore_cancel = lv.label(restore_screen)
+restore_cancel.set_text(" ")
+restore_cancel.set_size(120, 80)
+restore_cancel.set_pos(120,160)
+restore_cancel.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+
+
+
+# -------------------------------------------version screen----------------------------------------------------------
+version_screen = lv.obj()
+print("version_screen")
+version_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+version_msg = "Software Version:\n\
+MMI\n\
+Version:UIX8910_C55_V\n\
+1.0_Release\n\
+Build Time:\n\
+2-17-2023\n\
+9:32:5\n\
+IMEI:\n\
+"
+import versions
+
+version_label1 = lv.label(version_screen)
+version_label1.set_pos(0, 30)
+version_label1.set_size(240, 30)
+version_label1.set_long_mode(lv.label.LONG.WRAP)
+version_label1.set_text("Software Version:")
+version_label1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+version_label2 = lv.label(version_screen)
+version_label2.set_pos(0, 60)
+version_label2.set_size(240, 30)
+version_label2.set_long_mode(lv.label.LONG.WRAP)
+version_label2.set_text("Python Lvgl")
+version_label2.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+version_label3 = lv.label(version_screen)
+version_label3.set_pos(0, 90)
+version_label3.set_size(240, 30)
+version_label3.set_long_mode(lv.label.LONG.WRAP)
+version_label3.set_text("Version:")
+version_label3.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label3.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+version_label3 = lv.label(version_screen)
+version_label3.set_pos(0, 120)
+version_label3.set_size(240, 30)
+version_label3.set_long_mode(lv.label.LONG.WRAP)
+version_label3.set_text(versions.Version)
+version_label3.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label3.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# version_label4 = lv.label(version_screen)
+# version_label4.set_pos(0, version_label_y)
+# version_label4.set_size(240, 30)
+# version_label4.set_long_mode(lv.label.LONG.WRAP)
+# version_label4.set_text("")
+# version_label4.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# version_label4.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+version_label5 = lv.label(version_screen)
+version_label5.set_pos(0, 150)
+version_label5.set_size(240, 30)
+version_label5.set_long_mode(lv.label.LONG.WRAP)
+version_label5.set_text("Build Time:")
+version_label5.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label5.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+version_label6 = lv.label(version_screen)
+version_label6.set_pos(0, 180)
+version_label6.set_size(240, 30)
+version_label6.set_long_mode(lv.label.LONG.WRAP)
+version_label6.set_text(versions.Build_Time)
+version_label6.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label6.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# version_label7 = lv.label(version_screen)
+# version_label7.set_pos(0, 210)
+# version_label7.set_size(240, 30)
+# version_label7.set_long_mode(lv.label.LONG.WRAP)
+# version_label7.set_text(versions.Build_Time.split(" ")[1])
+# version_label7.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# version_label7.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+version_label8 = lv.label(version_screen)
+version_label8.set_pos(0, 210)
+version_label8.set_size(240, 30)
+version_label8.set_long_mode(lv.label.LONG.WRAP)
+version_label8.set_text("IMEI:")
+version_label8.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label8.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+version_label9 = lv.label(version_screen)
+version_label9.set_pos(20, 240)
+version_label9.set_size(220, 30)
+version_label9.set_long_mode(lv.label.LONG.WRAP)
+version_label9.set_text(" ")
+version_label9.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label9.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+# -------------------------------------------update screen----------------------------------------------------------
+update_screen = lv.obj()
+print("update_screen")
+update_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+update_title = lv.label(update_screen)
+update_title.set_pos(0, 10)
+update_title.set_size(240, 40)
+update_title.set_text("系统更新")
+update_title.set_long_mode(lv.label.LONG.WRAP)
+update_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+update_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+update_label = lv.label(update_screen)
+update_label.set_text(" 已经是最新版本")
+update_label.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+update_label.set_size(240, 50)
+update_label.set_pos(0,50)
+update_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+update_return = lv.label(update_screen)
+update_return.set_text("返回")
+update_return.set_size(240, 40)
+update_return.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+update_return.set_pos(0,240)
+update_return.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+update_return.add_flag(lv.obj.FLAG.CLICKABLE)
+
+class RestoreScreen(Screen):
+ NAME = "restore"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = restore_screen
+ restore_confirm.add_event_cb(lambda e: EventMesh.callback_wrapper(self.confirm(e)),lv.EVENT.CLICKED, None)
+ restore_cancel.add_event_cb(lambda e: EventMesh.callback_wrapper(self.concel(e)),lv.EVENT.CLICKED, None)
+
+
+ def confirm(self, e):
+ ret = 0
+ ret = ql_fs.path_exists("/usr/static/storage_file")#电话本
+ if ret == True:
+ ql_fs.rmdirs("/usr/static/storage_file")
+ ql_fs.mkdirs("/usr/static/storage_file")
+ EventMesh.publish("alipay_unbind")
+ EventMesh.publish(constants.PROTOCOL.DLT_SEND)
+
+ def concel(self, e):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+class UpdateScreen(Screen):
+ NAME = "update"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = update_screen
+ update_return.add_event_cb(lambda e: EventMesh.callback_wrapper(self.back(e)),lv.EVENT.CLICKED, None)
+
+ def back(self,e):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+class VersionScreen(Screen):
+ NAME = "version"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = version_screen
+ self.btn_count = 0
+ def initialization(self):
+ imei = EventMesh.publish(constants.EVENT.GET_IMEI)
+ version_label9.set_text(imei)
+
+ def Close(self):
+ self.btn_count = 0
+
+ def done_click(self):
+ self.btn_count += 1
+ if self.btn_count >= 5 :
+ EventMesh.publish("load_screen", {"screen": "factorymode"})
+
+ def done_bottom_to_top(self):
+ self.btn_count += 1
+ if self.btn_count >= 5 :
+ EventMesh.publish("load_screen", {"screen": "factorymode"})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+# -------------------------------------------poweroff screen----------------------------------------------------------
+poweroff_screen = lv.obj()
+print("poweroff_screen")
+poweroff_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+poweroff_img = lv.img(poweroff_screen)
+poweroff_img.set_pos(100, 30)
+poweroff_img.set_size(61, 61)
+poweroff_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+poweroff_img.set_src("U:/static/poweroff_icon.png")
+
+poweroff_label = lv.label(poweroff_screen)
+poweroff_label.set_text("是否关机?")
+poweroff_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+poweroff_label.set_size(240, 20)
+poweroff_label.set_pos(0,120)
+poweroff_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+poweroff_confirm_img = lv.img(poweroff_screen)
+poweroff_confirm_img.set_size(176, 46)
+poweroff_confirm_img.set_pos(32, 150)
+poweroff_confirm_img.set_src("U:/static/off_icon.png")
+poweroff_confirm_img.add_flag(lv.obj.FLAG.CLICKABLE)
+poweroff_confirm_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+poweroff_confirm_label = lv.label(poweroff_confirm_img)
+poweroff_confirm_label.set_text("关机")
+poweroff_confirm_label.align(lv.ALIGN.CENTER, 0, 5)
+poweroff_confirm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+poweroff_return = lv.img(poweroff_screen)
+poweroff_return.set_size(176, 46)
+poweroff_return.set_pos(32, 210)
+poweroff_return.set_src("U:/static/cancel_icon.png")
+poweroff_return.add_flag(lv.obj.FLAG.CLICKABLE)
+poweroff_return.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+poweroff_return_label = lv.label(poweroff_return)
+poweroff_return_label.set_text("返回")
+poweroff_return_label.align(lv.ALIGN.CENTER, 0, 5)
+poweroff_return_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+poweroff_return.set_ext_click_area(20)
+
+
+class PoweroffScreen(Screen):
+ NAME = "poweroff"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = poweroff_screen
+ poweroff_confirm_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.confirm(e)),lv.EVENT.CLICKED, None)
+ poweroff_return.add_event_cb(lambda e: EventMesh.callback_wrapper(self.concel(e)),lv.EVENT.CLICKED, None)
+
+ def initialization(self):
+ pass
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def confirm(self, e):
+ EventMesh.publish("load_screen", {"screen": "poweroff_comfirm"})
+
+
+ def concel(self, e):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+
+poweroff_confirm_screen = lv.obj()
+print("poweroff_confirm_screen")
+poweroff_confirm_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+poweroff_confirm_label = lv.label(poweroff_confirm_screen)
+poweroff_confirm_label.set_text("Goodbye")
+poweroff_confirm_label.align(lv.ALIGN.CENTER, 0, 0)
+# poweroff_confirm_label.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+import utime
+class PoweroffConfirmScreen(Screen):
+ NAME = "poweroff_comfirm"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = poweroff_confirm_screen
+ self.timer = osTimer()
+ self.read_data = {}
+ def initialization(self):
+ step = EventMesh.publish("get_old_step_value")
+ self.read_data = EventMesh.publish("get_storage_data")
+ if step != 0:
+ self.read_data["old_step"] = step
+ date_tmp = utime.localtime()
+ self.read_data["old_timesecond"] = date_tmp#关机保存一个是时间
+ #print("self.read_data:{}".format(self.read_data))
+ with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_data,fd)
+ self.timer.start(3*1000,0,self.power_off)
+
+ def power_off(self,*args):
+
+ Power.powerDown()
+
+ def done_return(self):
+ pass
+
+ def btn1_release(self):
+ pass
+
+ def btn8_press(self):
+ pass
+from common import Abstract
+class TimePoweroffScreen(Abstract):
+
+
+ def __init__(self):
+ super().__init__()
+ self.power_off_flag = 0
+ self.read_data = {}
+ EventMesh.subscribe("get_time_power_off", self.get_time_power_off)
+ EventMesh.subscribe("power_off_callback", self.power_off_callback)
+ EventMesh.subscribe("set_time_power_off", self.set_time_power_off)
+
+
+ def power_off_callback(self,event,msg):
+ if self.power_off_flag == 0:
+ self.power_off_flag = 1
+ EventMesh.publish("set_time_power_off")
+ Power.powerDown()
+
+ elif self.power_off_flag == 1:
+ self.power_off_flag = 0
+ EventMesh.publish("set_time_power_off")
+ Power.powerRestart()
+
+
+ def get_time_power_off(self,event,msg):
+ if self.power_off_flag == 0:
+ self.power_off_flag = 1
+ elif self.power_off_flag == 1:
+ self.power_off_flag = 0
+
+ def set_time_power_off(self,event,msg):
+ self.read_data = EventMesh.publish("get_storage_data")
+ if self.read_data != {}:
+ b = str("off_on") in self.read_data().keys()
+ if b == True:
+ pass
+
+
+
+
+ def done_return(self):
+ pass
+
+ def btn1_release(self):
+ pass
+
+ def btn8_press(self):
+ pass
+
+class LanguageScreen(Screen):
+ NAME = "language"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = language_screen
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+
+class DialswitchScreen(Screen):
+ NAME = "dialswitch"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = dialswitch_screen
+ self.read_data = {}
+ self.watchface_style_num = "Watchface1"
+ dialswitch_img1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.watchface01(e)),
+ lv.EVENT.CLICKED, None)
+ self.dial_num = 1
+ self.move = 0
+ self.timer= osTimer()
+
+ def initialization(self):
+ self.dial_num = 1
+ self.move = 0
+ self.read_data = EventMesh.publish("get_storage_data")
+ if self.read_data != {}:
+ b = str("watchface") in self.read_data.keys()
+ if b == True:
+ self.watchface_style_num = self.read_data["watchface"]
+ if self.watchface_style_num == "Watchface1":
+ self.dial_num = 1
+ else:
+ self.dial_num = 2
+ self.show_info()
+
+
+
+ def watchface01(self,e):
+ code = e.get_code()
+ if code == lv.EVENT.CLICKED:
+ self.timer.start(50,0,self.enter_main_show)
+
+ def enter_main_show(self,e):
+ self.read_data = EventMesh.publish("get_storage_data")
+ self.read_data["watchface"] = "Watchface{}".format(self.dial_num)
+ EventMesh.publish("set_storage_data", self.read_data)
+ with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_data,fd)
+ EventMesh.publish("set_change_face", "Watchface{}".format(self.dial_num))
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def done_left_to_right(self):#右滑
+ #print("done_left_to_right!!!!!!!!!")
+ self.move = 1
+ if self.dial_num > 1:
+ self.dial_num-=1
+ else:
+ self.dial_num = 2
+ self.timer.stop()
+ self.show_info()
+
+ def done_right_to_left(self):#左滑
+ #print("done_right_to_left!!!!!!!!!")
+ self.move = 2
+ self.dial_num+=1
+ if self.dial_num > 2:
+ self.dial_num = 1
+ self.show_info()
+ self.timer.stop()
+
+ def done_bottom_to_top(self):
+ self.move = 3
+ self.timer.stop()
+
+ def done_top_to_bottom(self):
+ self.move = 4
+ self.timer.stop()
+
+ def show_info(self):
+ dialswitch_img1.set_src("U:/static/DIAL_PREV0{}.png".format(self.dial_num))
+ dialswitch_btn1_label.set_text("表盘{}".format(self.dial_num))
+ if(self.dial_num == 1):
+ dialswitch_butoom_crcile1.set_src("U:/static/point_white.png")
+ dialswitch_butoom_crcile2.set_src("U:/static/point_black.png")
+ else:
+ dialswitch_butoom_crcile1.set_src("U:/static/point_black.png")
+ dialswitch_butoom_crcile2.set_src("U:/static/point_white.png")
+ def Close(self):
+ self.timer.stop()
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+class ThemeswitchScreen(Screen):
+ NAME = "themeswitch"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = menustyle_screen
+ menustyle_btn1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.fun1(e)),
+ lv.EVENT.PRESSED, None)
+
+ menustyle_btn2.add_event_cb(lambda e: EventMesh.callback_wrapper(self.fun2(e)),
+ lv.EVENT.PRESSED, None)
+
+ def fun1(self,e):
+ menu_btn1_switch.add_state(lv.STATE.CHECKED)
+ menu_btn2_switch.clear_state(lv.STATE.CHECKED)
+ EventMesh.publish("change_style", "MainMenu1")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def fun2(self,e):
+ menu_btn1_switch.clear_state(lv.STATE.CHECKED)
+ menu_btn2_switch.add_state(lv.STATE.CHECKED)
+ EventMesh.publish("change_style", "MainMenu2")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+# -------------------------------------------imei screen----------------------------------------------------------
+imei_screen = lv.obj()
+print("imei_screen")
+imei_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+bg_color = lv.palette_lighten(lv.PALETTE.LIGHT_BLUE, 5)
+fg_color = lv.palette_darken(lv.PALETTE.BLUE, 4)
+
+imei_qr = lv.qrcode(imei_screen, 150, fg_color, bg_color)
+imei_qr.center()
+# Add a border with bg_color
+imei_qr.set_style_border_color(bg_color, 0)
+imei_qr.set_style_border_width(5, 0)
+
+
+imei_label = lv.label(imei_screen)
+imei_label.set_pos(0, 280)
+imei_label.set_size(240, 20)
+imei_label.set_text(" ")
+imei_label.set_long_mode(lv.label.LONG.WRAP)
+imei_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+imei_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+class ImeiScreen(Screen):
+ NAME = "imei"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = imei_screen
+
+ def initialization(self):
+
+ imei = EventMesh.publish(constants.EVENT.GET_IMEI)
+ imei_qr_data = str(imei)
+ imei_qr.update(imei_qr_data,len(imei_qr_data))
+ imei_label.set_text(imei)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+class AppScreen(Screen):
+ NAME = "app"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = app_screen
+ def initialization(self):
+ imei = EventMesh.publish(constants.EVENT.GET_IMEI)
+ app_label.set_text(imei)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+# -------------------------------------------brightness screen----------------------------------------------------------
+brightness_screen = lv.obj()
+print("brightness_screen")
+brightness_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+brightness_title = lv.label(brightness_screen)
+brightness_title.set_pos(0, 10)
+brightness_title.set_size(240, 40)
+brightness_title.set_text("屏幕调节")
+brightness_title.set_long_mode(lv.label.LONG.WRAP)
+brightness_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+brightness_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+brightness_label1 = lv.label(brightness_screen)
+brightness_label1.set_pos(10, 70)
+brightness_label1.set_size(230, 40)
+brightness_label1.set_text("亮度:")
+brightness_label1.set_long_mode(lv.label.LONG.WRAP)
+brightness_label1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+brightness_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+brightness_bar = lv.bar(brightness_screen)
+brightness_bar.set_pos(20, 100)
+brightness_bar.set_size(200, 25)
+brightness_bar.set_style_anim_time(1000, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+brightness_bar.set_mode(lv.bar.MODE.NORMAL)
+brightness_bar.set_value(50, lv.ANIM.OFF)
+brightness_bar.add_style(style_bar, lv.PART.MAIN | lv.STATE.DEFAULT)
+brightness_bar.add_style(style_bar_indic, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+
+brightness_reduce_imgbtn = lv.img(brightness_screen)
+brightness_reduce_imgbtn.set_pos(5, 195)
+brightness_reduce_imgbtn.set_size(110, 46)
+brightness_reduce_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+brightness_reduce_imgbtn.set_src("U:/static/reduce_btn.png")
+brightness_reduce_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+brightness_add_imgbtn = lv.img(brightness_screen)
+brightness_add_imgbtn.set_pos(125, 195)
+brightness_add_imgbtn.set_size(110, 46)
+brightness_add_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+brightness_add_imgbtn.set_src("U:/static/add_btn.png")
+brightness_add_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+brightness_label_time = lv.label(brightness_screen)
+brightness_label_time.set_pos(10, 150)
+brightness_label_time.set_size(80, 30)
+brightness_label_time.set_text("时间:")
+brightness_label_time.set_long_mode(lv.label.LONG.WRAP)
+brightness_label_time.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+brightness_label_time.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+brightness_time_reduce_img = lv.img(brightness_screen)
+brightness_time_reduce_img.set_pos(90, 145)
+brightness_time_reduce_img.set_size(30, 34)
+brightness_time_reduce_img.set_src("U:/static/time_up2.png")
+brightness_time_reduce_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+brightness_time_reduce_imgbtn= lv.img(brightness_screen)
+brightness_time_reduce_imgbtn.set_size(80, 45)
+brightness_time_reduce_imgbtn.set_pos(90, 140)
+brightness_time_reduce_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+brightness_label_time_text = lv.label(brightness_screen)
+brightness_label_time_text.set_pos(130, 152)
+brightness_label_time_text.set_size(60, 30)
+brightness_label_time_text.set_text("5秒")
+brightness_label_time_text.set_long_mode(lv.label.LONG.WRAP)
+brightness_label_time_text.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+brightness_label_time_text.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+brightness_time_add_img = lv.img(brightness_screen)
+brightness_time_add_img.set_pos(190, 145)
+brightness_time_add_img.set_size(30, 34)
+brightness_time_add_img.set_src("U:/static/time_up1.png")
+brightness_time_add_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+brightness_time_add_imgbtn= lv.img(brightness_screen)
+brightness_time_add_imgbtn.set_size(70, 45)
+brightness_time_add_imgbtn.set_pos(170, 140)
+brightness_time_add_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+
+class BrightnessScreen(Screen):
+ NAME = "brightness"
+
+ def __init__(self):
+ super().__init__()
+ self.level = 6
+ self.time = 10
+ self.read_data = {}
+ self.meta = brightness_screen
+ brightness_add_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.add_level(e)),
+ lv.EVENT.CLICKED, None)
+ brightness_reduce_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.reduce_level(e)),
+ lv.EVENT.CLICKED, None)
+
+ brightness_time_reduce_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.reduce_time_level(e)),
+ lv.EVENT.CLICKED, None)
+
+ brightness_time_add_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.add_time_level(e)),
+ lv.EVENT.CLICKED, None)
+ def initialization(self):
+ self.level = EventMesh.publish("get_brightness_level")
+ self.time = EventMesh.publish("get_brightness_time")
+ print("self.time:{}".format(self.time))
+ if self.time == None:
+ self.time = 5
+ brightness_label_time_text.set_text("{}秒".format(self.time))
+ self.show_bar()
+ def add_level(self, e):
+ EventMesh.publish("push_add_brightness_level")
+ self.level = EventMesh.publish("get_brightness_level")
+ print("self.level:{}".format(self.level))
+ self.show_bar()
+
+ def reduce_level(self, e):
+ EventMesh.publish("push_reduce_brightness_level")
+ self.level = EventMesh.publish("get_brightness_level")
+ self.show_bar()
+
+ def reduce_time_level(self, e):
+ if self.time > 5:
+ self.time-=5
+ EventMesh.publish("set_brightness_time",self.time)
+ self.read_data = EventMesh.publish("get_storage_data")
+ self.read_data["brightness_time"] = self.time
+
+ EventMesh.publish("set_storage_data", self.read_data)
+ with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_data,fd)
+ brightness_label_time_text.set_text("{}秒".format(self.time))
+ print("reduce_time_level:{}".format(self.read_data))
+
+ def add_time_level(self, e):
+ self.time+=5
+ if self.time >= 30:
+ self.time = 30
+ EventMesh.publish("set_brightness_time",self.time)
+ self.read_data = EventMesh.publish("get_storage_data")
+ self.read_data["brightness_time"] = self.time
+
+ EventMesh.publish("set_storage_data", self.read_data)
+ with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_data,fd)
+ brightness_label_time_text.set_text("{}秒".format(self.time))
+ print("add_time_level:{}".format(self.read_data))
+
+
+
+ def show_bar(self):
+ if self.level == None:
+ self.level = 6
+ brightness_bar.set_value((100 // 10) * self.level, lv.ANIM.OFF)
+
+
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+class VolumeScreen(Screen):
+ NAME = "volume"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = volume_screen
+ volume_phone_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "phonering"})), lv.EVENT.CLICKED, None)
+ volume_message_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "msgvolume"})), lv.EVENT.CLICKED, None)
+ volume_alarm_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "alarmvolume"})), lv.EVENT.CLICKED, None)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+
+
+class PhoneringScreen(Screen):
+ NAME = "phonering"
+
+ def __init__(self):
+ super().__init__()
+ self.level = 0
+ self.meta = phonering_screen
+ phonering_add_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.add_level(e)),
+ lv.EVENT.CLICKED, None)
+ phonering_reduce_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.reduce_level(e)),
+ lv.EVENT.CLICKED, None)
+ phonering_add_imgbtn.set_ext_click_area(20)
+ phonering_reduce_imgbtn.set_ext_click_area(20)
+
+ def add_level(self, e):
+ EventMesh.publish("push_add_phonering_level")
+ self.level = EventMesh.publish("get_phonering_level")
+ self.show_bar()
+
+ def reduce_level(self, e):
+ EventMesh.publish("push_reduce_phonering_level")
+ self.level = EventMesh.publish("get_phonering_level")
+ self.show_bar()
+
+ def show_bar(self):
+ phonering_bar.set_value((100 // 7) * self.level, lv.ANIM.OFF)
+
+ def initialization(self):
+ self.level = EventMesh.publish("get_phonering_level")
+ self.show_bar()
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "volume"})
+
+ def done_left_to_right(self):
+ pass
+
+ def done_right_to_left(self):
+ pass
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "volume"})
+
+
+
+class AlarmvolumeScreen(Screen):
+ NAME = "alarmvolume"
+
+ def __init__(self):
+ super().__init__()
+ self.level = 0
+ self.meta = alarmvolume_screen
+ alarmvolume_add_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.add_level(e)),
+ lv.EVENT.CLICKED, None)
+ alarmvolume_reduce_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.reduce_level(e)),
+ lv.EVENT.CLICKED, None)
+
+ def add_level(self, e):
+ EventMesh.publish("push_add_alarmvolume_level")
+ self.level = EventMesh.publish("get_alarmvolume_level")
+ self.show_bar()
+
+ def reduce_level(self, e):
+ EventMesh.publish("push_reduce_alarmvolume_level")
+ self.level = EventMesh.publish("get_alarmvolume_level")
+ self.show_bar()
+
+ def show_bar(self):
+ alarmvolume_bar.set_value((100 // 7) * self.level, lv.ANIM.OFF)
+
+ def initialization(self):
+ self.level = EventMesh.publish("get_alarmvolume_level")
+ self.show_bar()
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "volume"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "volume"})
+
+
+
+class MsgvolumeScreen(Screen):
+ NAME = "msgvolume"
+
+ def __init__(self):
+ super().__init__()
+ self.level = 0
+ self.meta = msgvolume_screen
+ msgvolume_add_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.add_level(e)),
+ lv.EVENT.CLICKED, None)
+ msgvolume_reduce_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.reduce_level(e)),
+ lv.EVENT.CLICKED, None)
+
+ def add_level(self, e):
+ EventMesh.publish("push_add_msgvolume_level")
+ self.level = EventMesh.publish("get_msgvolume_level")
+ self.show_bar()
+
+ def reduce_level(self, e):
+ EventMesh.publish("push_reduce_msgvolume_level")
+ self.level = EventMesh.publish("get_msgvolume_level")
+ self.show_bar()
+
+ def show_bar(self):
+ msgvolume_bar.set_value((100 // 7) * self.level, lv.ANIM.OFF)
+
+ def initialization(self):
+ self.level = EventMesh.publish("get_msgvolume_level")
+ self.show_bar()
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "volume"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "volume"})
+
+
+
+#-----------------------------------------Total--volum-------------------------------
+
+volume_adjust_screen = lv.obj()
+print("volume_adjust_screen")
+volume_adjust_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+totalvolume_title = lv.label(volume_adjust_screen)
+totalvolume_title.set_pos(0, 10)
+totalvolume_title.set_size(240, 40)
+totalvolume_title.set_text("铃声调节")
+totalvolume_title.set_long_mode(lv.label.LONG.WRAP)
+totalvolume_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+totalvolume_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+totalvolume_label1 = lv.label(volume_adjust_screen)
+totalvolume_label1.set_pos(10, 70)
+totalvolume_label1.set_size(230, 40)
+totalvolume_label1.set_text("铃声:")
+totalvolume_label1.set_long_mode(lv.label.LONG.WRAP)
+totalvolume_label1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+totalvolume_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+totalvolume_bar = lv.bar(volume_adjust_screen)
+totalvolume_bar.set_pos(20, 100)
+totalvolume_bar.set_size(200, 25)
+totalvolume_bar.set_style_anim_time(1000, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+totalvolume_bar.set_mode(lv.bar.MODE.NORMAL)
+totalvolume_bar.set_value(50, lv.ANIM.OFF)
+totalvolume_bar.add_style(style_bar, lv.PART.MAIN | lv.STATE.DEFAULT)
+totalvolume_bar.add_style(style_bar_indic, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+
+totalvolume_reduce_imgbtn = lv.img(volume_adjust_screen)
+totalvolume_reduce_imgbtn.set_pos(5, 145)
+totalvolume_reduce_imgbtn.set_size(110, 46)
+totalvolume_reduce_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+totalvolume_reduce_imgbtn.set_src("U:/static/reduce_btn.png")
+totalvolume_reduce_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+totalvolume_add_imgbtn = lv.img(volume_adjust_screen)
+totalvolume_add_imgbtn.set_pos(125, 145)
+totalvolume_add_imgbtn.set_size(110, 46)
+totalvolume_add_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+totalvolume_add_imgbtn.set_src("U:/static/add_btn.png")
+totalvolume_add_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+class totalvolumeScreen(Screen):
+ NAME = "totalvolume"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = volume_adjust_screen
+ totalvolume_add_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.add_volum_size(e)),
+ lv.EVENT.CLICKED, None)
+ totalvolume_reduce_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.reduce_volum_size(e)),
+ lv.EVENT.CLICKED, None)
+ self.read_data = {}
+ self.volum_size = 8
+ self.aud = audio.Audio(0)
+ self.aud.set_pa(Pin.GPIO29)
+
+ def initialization(self):
+ self.read_data = EventMesh.publish("get_storage_data")
+ # print("self.read_data:{}".format(self.read_data))
+ num = EventMesh.publish("get_volum_size")
+ if num == None:
+ self.volum_size = 8
+ else:
+ self.volum_size = num
+ self.aud.setVolume(self.volum_size)
+ self.show_bar(0)
+
+ def add_volum_size(self, e):
+ self.volum_size+=2
+ if self.volum_size >= 11:
+ self.volum_size = 11
+ self.show_bar(1)
+
+ def reduce_volum_size(self, e):
+
+ self.volum_size -= 2
+ if self.volum_size < 0:
+ self.volum_size = 0
+ self.show_bar(1)
+
+ def show_bar(self,msg):
+ totalvolume_bar.set_value((100 // 11) * self.volum_size, lv.ANIM.OFF)
+ if msg == 1:
+ self.read_data = EventMesh.publish("get_storage_data")
+ self.read_data["volum"] = self.volum_size
+ self.aud.setVolume(self.volum_size)
+ EventMesh.publish("set_storage_data", self.read_data)
+ EventMesh.publish("set_volum_size",self.volum_size)
+ # print("self.read_data:size :{}".format(self.read_data))
+ with open("/usr/static/storage_file/config.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_data,fd)
+ self.aud.play(1, 1, 'U:/static/audio_audio_haixiu.mp3') #播放声音
+
+ def Close(self):
+ self.aud.stop()
+
+ def done_return(self):
+ self.aud.stop()
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn8_press(self):
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
--- /dev/null
+# Copyright (c) Quectel Wireless Solution, Co., Ltd.All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+NAME := EG810MCN_GA_VOLTE
+
+GLOBAL_INCS = include
+
+$(NAME)_ARCHIVES = \
+ libraries/libHeliosAPI.lib \
+ libraries/ql_common_api.lib
+
--- /dev/null
+/*
+ *
+ * Automatically generated file; DO NOT EDIT.
+ * Helios SDK Configuration
+ *
+ */
+#define CONFIG_LVGL_SPAN 1
+#define CONFIG_LVGL_FS_HELIOS 1
+#define CONFIG_LVGL_GIF_DECODE 1
+#define CONFIG_LVGL_SPINNER 1
+#define CONFIG_LCD 1
+#define CONFIG_LVGL_ANIMIMG 1
+#define CONFIG_LVGL_KEYBOARD 1
+#define CONFIG_LVGL_CALENDAR 1
+#define CONFIG_LVGL_LED 1
+#define CONFIG_VIOCE_CALL 1
+#define CONFIG_LVGL_FS_EXTFLASH_HELIOS 1
+#define CONFIG_LVGL_TABVIEW 1
+#define CONFIG_LVGL_LINE 1
+#define CONFIG_LVGL 1
+#define CONFIG_LVGL_CHART 1
+#define CONFIG_LVGL_LIST 1
+#define CONFIG_LVGL_MSGBOX 1
+#define CONFIG_LVGL_ARC 1
+#define CONFIG_LVGL_METER 1
+#define CONFIG_LVGL_JPG_DECODE 1
+#define CONFIG_LVGL_PNG_DECODE 1
+#define CONFIG_LVGL_IMGBTN 1
+#define CONFIG_GH301x 1
+#define CONFIG_MBEDTLS 1
+#define CONFIG_SC7A20 1
+#define CONFIG_LVGL_WIN 1
+#define CONFIG_LVGL_COLORWHEEL 1
+#define CONFIG_LVGL_CANVAS 1
+#define CONFIG_LVGL_SPINBOX 1
+#define CONFIG_LVGL_QRCODE 1
+#define CONFIG_LVGL_TILEVIEW 1
+#define CONFIG_LVGL_HANDLER_TASK_PRIORITY 80
--- /dev/null
+
+mainmenu "Helios SDK Configuration"
+
+menu "System Configuration"
+source "../system/config.in"
+endmenu
+
+menu "EG810MCN_GA_VOLTE"
+source "../services/microPython/config/config.in"
+source "../components/poc/poc_option.in"
+source "../components/GH301x/GH301x_option.in"
+source "../components/SC7A20/SC7A20_option.in"
+
+endmenu
+
--- /dev/null
+#
+# Automatically generated file; DO NOT EDIT.
+# Helios SDK Configuration
+#
+
+#
+# System Configuration
+#
+CONFIG_MBEDTLS=y
+
+#
+# EG810MCN_GA_ALIPAY
+#
+CONFIG_LVGL=y
+
+#
+# lvgl option
+#
+CONFIG_LVGL_PNG_DECODE=y
+# CONFIG_LVGL_GIF_DECODE is not set
+CONFIG_LVGL_JPG_DECODE=y
+CONFIG_LVGL_FS_HELIOS=y
+# CONFIG_LVGL_FS_SD_HELIOS is not set
+CONFIG_LVGL_FS_EXTFLASH_HELIOS=y
+# CONFIG_LVGL_CUSTOMER_FONT_SUPPORT is not set
+CONFIG_LVGL_QRCODE=y
+# CONFIG_LVGL_FONT is not set
+# CONFIG_LVGL_ARC is not set
+CONFIG_LVGL_IMGBTN=y
+CONFIG_LVGL_LINE=y
+CONFIG_LVGL_LIST=y
+# CONFIG_LVGL_CHART is not set
+# CONFIG_LVGL_LED is not set
+CONFIG_LVGL_CANVAS=y
+CONFIG_LVGL_WIN=y
+# CONFIG_LVGL_TABVIEW is not set
+CONFIG_LVGL_TILEVIEW=y
+CONFIG_LVGL_MSGBOX=y
+# CONFIG_LVGL_METER is not set
+# CONFIG_LVGL_CALENDAR is not set
+# CONFIG_LVGL_SPINNER is not set
+# CONFIG_LVGL_SPINBOX is not set
+# CONFIG_LVGL_ANIMIMG is not set
+# CONFIG_LVGL_COLORWHEEL is not set
+CONFIG_LVGL_KEYBOARD=y
+CONFIG_LVGL_SPAN=y
+CONFIG_LVGL_HANDLER_TASK_PRIORITY=80
+# CONFIG_QRCODE is not set
+# CONFIG_CAMERA is not set
+# CONFIG_QUECTHING is not set
+# CONFIG_SPINAND is not set
+# CONFIG_RTMP is not set
+# CONFIG_JPEG is not set
+# CONFIG_SPI_SDCARD is not set
+CONFIG_VIOCE_CALL=y
+# CONFIG_TTS is not set
+CONFIG_LCD=y
+# CONFIG_UART_SLIP is not set
+# CONFIG_POC is not set
+CONFIG_GH301x=y
+CONFIG_SC7A20=y
--- /dev/null
+/*
+ * Copyright (c) Quectel Wireless Solution, Co., Ltd.All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __MPCONFIGBOARD_H__
+#define __MPCONFIGBOARD_H__
+
+#define MICROPY_QPY_MODULE_ATCMD (1)
+#define MICROPY_QPY_MODULE_UOS (1)
+#define MICROPY_QPY_MODULE_MACHINE (1)
+#define MICROPY_QPY_MODULE_USOCKET (1)
+#define MICROPY_QPY_MODULE_MISC (1)
+#define MICROPY_QPY_MODULE_OSTIMER (1)
+#define MICROPY_QPY_MODULE_EXAMPLE (1)
+#define MICROPY_QPY_MODULE_DATACALL (1)
+#define MICROPY_QPY_MODULE_MODEM (1)
+#define MICROPY_QPY_MODULE_UTIME (1)
+#define MICROPY_QPY_MODULE_UTILS (1)
+#define MICROPY_QPY_MODULE_HMACSHA1 (1)
+#define MICROPY_QPY_MODULE_SMS (1)
+#define MICROPY_QPY_MODULE_SIM (1)
+#define MICROPY_QPY_MODULE_DUALSIM (1)
+#define MICROPY_QPY_MODULE_LPM (1)
+#define MICROPY_QPY_MODULE_NET (1)
+#define MICROPY_QPY_MODULE_CELLLOCATOR (0)
+#define MICROPY_QPY_MODULE_CELLLOCATOR_QPY (1)
+#define MICROPY_QPY_MODULE_AUDIO (1)
+#define MICROPY_QPY_MODULE_FOTA (1)
+#define MICROPY_QPY_MODULE_WIFISCAN (1)
+#define MICROPY_QPY_MODULE_QUECGNSS (1)
+#define MICROPY_QPY_MODULE_WIFILOCATOR (1)
+#define MICROPY_QPY_MODULE_ETHERNET (0)
+#define MICROPY_QPY_MODULE_SENSOR (1)
+#define MICROPY_QPY_MODULE_SECUREDATA (1)
+#define MICROPY_QPY_MODULE_SLIP (0)
+#define MICROPY_QPY_MODULE_TP (1)
+#define MICROPY_QPY_MODULE_AUDIOCODEC (0)
+#define MICROPY_QPY_MODULE_CSD (0)
+#define MICROPY_QPY_MODULE_LWM2M (0)
+#define MICROPY_QPY_MODULE_NB (0)
+#define MICROPY_QPY_MODULE_UHASHLIB (1)
+#define MICROPY_QPY_MODULE_UCRYPTOLIB (1)
+#define MICROPY_QPY_MODULE_ALIPAY (0)
+#define MICROPY_QPY_MODULE_VFS_THREADSAFE (1)
+
+#if CONFIG_MBEDTLS
+ #define MICROPY_QPY_MODULE_USSL (0)
+ #define MICROPY_QPY_SSL_MBEDTLS (1)
+#endif
+
+#if CONFIG_QUECTHING
+ #define MICROPY_QPY_MODULE_QUECIOT (1)
+#else
+ #define MICROPY_QPY_MODULE_QUECIOT (0)
+#endif
+
+#if CONFIG_LVGL
+ #define MICROPY_QPY_MODULE_LVGL (1)
+#else
+ #define MICROPY_QPY_MODULE_LVGL (0)
+#endif
+
+#if CONFIG_CAMERA
+ #define MICROPY_QPY_MODULE_CAMERA (1)
+#else
+ #define MICROPY_QPY_MODULE_CAMERA (0)
+#endif
+
+#if CONFIG_RTMP
+ #define MICROPY_QPY_MODULE_RTMP (1)
+#else
+ #define MICROPY_QPY_MODULE_RTMP (0)
+#endif
+#if CONFIG_VIOCE_CALL
+ #define MICROPY_QPY_MODULE_VIOCE_CALL (1)
+#else
+ #define MICROPY_QPY_MODULE_VIOCE_CALL (0)
+#endif
+
+#if CONFIG_POC
+ #define MICROPY_QPY_MODULE_POC (1)
+#else
+ #define MICROPY_QPY_MODULE_POC (0)
+#endif
+#if CONFIG_QRCODE
+ #define MICROPY_QPY_MODULE_QRCODE (1)
+#else
+ #define MICROPY_QPY_MODULE_QRCODE (0)
+#endif
+
+#ifdef CONFIG_QUEC_PROJECT_FEATURE_BLE_GATT
+ #define MICROPY_QPY_MODULE_BLE (1)
+#else
+ #define MICROPY_QPY_MODULE_BLE (0)
+#endif
+
+#ifdef CONFIG_QUEC_PROJECT_FEATURE_CLASSIC_BT
+ #define MICROPY_QPY_MODULE_BT (1)
+#else
+ #define MICROPY_QPY_MODULE_BT (0)
+#endif
+
+
+//modmachine
+#if MICROPY_QPY_MODULE_MACHINE
+ #define MICROPY_QPY_MACHINE_TIMER (1)
+ #define MICROPY_QPY_MACHINE_RTC (1)
+ #define MICROPY_QPY_MACHINE_WDT (1)
+ #define MICROPY_QPY_MACHINE_PIN (1)
+ #define MICROPY_QPY_MACHINE_EXTINT (1)
+ #define MICROPY_QPY_MACHINE_UART (1)
+ #define MICROPY_QPY_MACHINE_SPI (1)
+ #define MICROPY_QPY_MACHINE_I2C (1)
+ #define MICROPY_QPY_MACHINE_I2C_SOFT (1)
+ #ifdef CONFIG_LCD
+ #define MICROPY_QPY_MACHINE_LCD (1)
+#else
+ #define MICROPY_QPY_MACHINE_LCD (0)
+#endif
+ #define MICROPY_QPY_MACHINE_KEYPAD (1)
+ #ifdef CONFIG_SPINAND
+ #define MICROPY_QPY_MACHINE_NANDFLASH (1)
+ #else
+ #define MICROPY_QPY_MACHINE_NANDFLASH (0)
+ #endif
+
+#if MICROPY_QPY_MACHINE_UART
+ #define MICROPY_QPY_UART4 (1)
+#endif
+
+#endif
+
+#if MICROPY_QPY_MODULE_MISC
+ #define MICROPY_QPY_MISC_POWER (1)
+ #define MICROPY_QPY_MISC_ADC (1)
+ #define MICROPY_QPY_MISC_POWERKEY (1)
+ #define MICROPY_QPY_MISC_TEMPERATURE (0)
+ #define MICROPY_QPY_MISC_PWM (1)
+ #define MICROPY_QPY_MISC_USB (1)
+ #define MICROPY_QPY_MISC_USBNET (1)
+#endif
+
+#if MICROPY_QPY_MODULE_AUDIO
+ #define MICROPY_QPY_AUDIO_AUDIO (1)
+ #if CONFIG_TTS
+ #define MICROPY_QPY_AUDIO_TTS (1)
+ #else
+ #define MICROPY_QPY_AUDIO_TTS (0)
+ #endif
+ #define MICROPY_QPY_AUDIO_RECORD (1)
+#endif
+
+#if MICROPY_QPY_MODULE_ETHERNET
+ #define MICROPY_QPY_ETHERNET_DM9051 (0)
+ #define MICROPY_QPY_ETHERNET_W5500 (0)
+#endif
+
+#if MICROPY_QPY_MODULE_TP
+ #define MICROPY_QPY_TP_XPT2046 (0)
+ #define MICROPY_QPY_TP_GT9XX (0)
+ #define MICROPY_QPY_TP_CST816 (1)
+#endif
+
+#if MICROPY_QPY_MODULE_AUDIOCODEC
+ #define MICROPY_QPY_AUDIOCODEC_RT5616 (0)
+#endif
+
+#if MICROPY_QPY_MODULE_SENSOR
+ #define MICROPY_QPY_SENSOR_SN95500 (0)
+ #define MICROPY_QPY_SENSOR_ICC_KEY (0)
+ #define MICROPY_QPY_SENSOR_GNSS (1)
+#endif
+
+#if MICROPY_QPY_MODULE_CAMERA
+ #define MICROPY_QPY_CAMERA_CAMPREVIEW (1)
+ #if CONFIG_CAMERA_SAVEPHOTOS
+ #define MICROPY_QPY_CAMERA_CAMCAPTURE (1)
+ #else
+ #define MICROPY_QPY_CAMERA_CAMCAPTURE (0)
+ #endif
+ #ifdef CONFIG_CAMERA_DECODE
+ #define MICROPY_QPY_CAMERA_CAMSCANDECODE (1)
+ #else
+ #define MICROPY_QPY_CAMERA_CAMSCANDECODE (0)
+ #endif
+#endif
+
+#define MICROPY_QPY_DEVICE_REPORT (1)
+
+/***********************micropython opts*******************************/
+#define MICROPY_QPY_DEBUG_PRINTERS (0) //flash 4160 Byte
+#define MICROPY_QPY_PY_MATH (1) //flash 14880 Byte
+#define MICROPY_QPY_PY_CMATH (0) //flash 3136 Byte
+#define MICROPY_QPY_PY_USELECT (0) //flash 1792 Byte
+#define MICROPY_QPY_PY_UCTYPES (0) //flash 2816 Byte
+#define MICROPY_QPY_PY_UZLIB (0) //flash 3072 Byte
+#define MICROPY_QPY_PY_UASYNCIO (0) //flash 2048 Byte
+#define MICROPY_QPY_PY_ENABLE_WEBSERVER (0) //flash 3424 Byte
+#define MICROPY_QPY_PERSISTENT_CODE_LOAD (1) //flash 2048 Byte
+#define MICROPY_QPY_EMIT_XTENSAWIN (0) //flash 19776 Byte
+#define MICROPY_QPY_MODULE_VFS_THREADSAFE (1)
+#define MICROPY_QPY_GC_HEAP_SIZE (1000 * 1024)
+#endif
\ No newline at end of file
--- /dev/null
+
+#ifndef __APP_LINK_START_ADDR_H__
+#define __APP_LINK_START_ADDR_H__
+
+#define APP_LINK_START_ADDR 0x80520000
+#define APP_FLASH_MAX_SIZE 0x190000
+
+#define APP_RAM_START 0x7E3E0000
+#define APP_RAM_MAX_SIZE 0x180000
+
+#endif
--- /dev/null
+import main_init
+main_init.main_init()
\ No newline at end of file