self.alarm_timer_count = 0
self.old_min = 0
self.interInfo_queue = Queue()
+ _thread.stack_size(10*1024)
_thread.start_new_thread(self.interInfo_queue_thread, ())
+ _thread.stack_size(8*1024)
EventMesh.subscribe("publish_message_event_interInfo",self.publish_message_event_interInfo)
self.audio_event_queue = Queue()
+ _thread.stack_size(10*1024)
_thread.start_new_thread(self.audio_event_queue_thread, ())
+ _thread.stack_size(8*1024)
EventMesh.subscribe("publish_message_event_audio",self.publish_message_event_audio)
self.record_test = audio.Record()
self.led_state = 0
self.btnInfo_queue = Queue()
+ _thread.stack_size(10*1024)
_thread.start_new_thread(self.btnInfo_queue_thread, ())
+ _thread.stack_size(8*1024)
+
EventMesh.subscribe("publish_message_event_btnInfo",self.publish_message_event_btnInfo)
EventMesh.subscribe("close_wechat_btn_timer", self.close_wechat_btn_timer)#来电强制关闭微聊语音
self.led_mode = 0
self.working_led_mode = None
self.ledInfo_queue = Queue()
+ _thread.stack_size(10*1024)
_thread.start_new_thread(self.ledInfo_queue_thread, ())
+ _thread.stack_size(8*1024)
EventMesh.subscribe("publish_message_event_ledInfo",self.publish_message_event_ledInfo)
pass
+
def post_processor_after_instantiation(self):
def __init__(self):
self.DeviceInfo_queue = Queue()
+ _thread.stack_size((9+6)*1024)
_thread.start_new_thread(self.DeviceInfo_queue_thread, ())
+ _thread.stack_size(8*1024)
+
EventMesh.subscribe("publish_message_event_DeviceInfo",self.publish_message_event_DeviceInfo)
self.key = ""
self.imei = ""
if temp != None:
if temp != 0:
EventMesh.publish("set_history_temp_value",temp)
- EventMesh.publish("play_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("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 temp != None:
if temp != 0:
EventMesh.publish("set_history_temp_value",temp)
- EventMesh.publish("play_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("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))
if temp != None:
if temp != 0:
EventMesh.publish("set_history_temp_value",temp)
- EventMesh.publish("play_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("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))
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("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
+ # EventMesh.publish("play_hr_value",0)#测量失败
print("stop debug1")
EventMesh.publish(constants.EVENT.STOP_HEART)
self.HR_state = 0
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("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)
+ pass
+ # EventMesh.publish("play_spo2_value",0)
EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
self.old_time = self.mearsure_timer
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("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
+ # 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("play_spo2_value",0)
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)
+ pass
+ # EventMesh.publish("play_spo2_value",0)
self.HR_state = 0
self.SENSOR_time = time_tmp
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("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
+ # EventMesh.publish("play_hr_value",0)
#获取心率数据上传数据app
print("STOP_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)
+ # EventMesh.publish("play_hr_value",heart_value)
else:
- EventMesh.publish("play_hr_value",0)
+ pass
+ # 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代表后台进入血氧测试
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("play_spo2_value",spo2_value)
EventMesh.publish("set_history_spo2_value",spo2_value)
else:
- EventMesh.publish("play_spo2_value",0)
+ pass
+ # 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.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",0)
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)
+ pass
+ # EventMesh.publish("play_spo2_value",0)
elif self.set_hsenor_crt == 1:
EventMesh.publish("set_hr_state",0)#0代表g关闭测试
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("play_hr_value",heart_value)
EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
else:
- EventMesh.publish("play_hr_value",0)
+ pass
+ # EventMesh.publish("play_hr_value",0)
self.HR_Onestate = 0
else:
if self.get_spo2_state == 2 or self.get_hr_state == 2:#单次测量
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("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
+ # 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开血氧
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("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)
+ pass
+ # 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.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("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)
+ pass
+ # 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("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
+ # EventMesh.publish("play_hr_value",0)
self.HR_Onestate = 0
else:
if self.get_spo2_state == 2 or self.get_hr_state == 2:#单次测量
if temp != None:
if temp != 0:
EventMesh.publish("set_history_temp_value",temp)
- EventMesh.publish("play_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("play_temp_value",0)#播放体温数值
EventMesh.publish(constants.EVENT.STOP_TEMP)
self.SENSOR_time = time_tmp
print("start_location:{}".format(msg))
if( self.location_flag == 1):
return
+ _thread.stack_size((9+5)*1024)
self.location_thread_id = _thread.start_new_thread(self.location_thread, ())
+ _thread.stack_size(8*1024)
+
self.location_flag = 1
#self.gps_open(event, msg)
self.location_type = 1
if( self.location_flag == 1):
return
+ _thread.stack_size((9+4)*1024)
self.location_thread_id = _thread.start_new_thread(self.location_thread, ())
+ _thread.stack_size(8*1024)
+
self.location_timer_count = 0
self.location_flag = 1
#self.gps_open(event, msg)
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.stack_size((9+3)*1024)
_thread.start_new_thread(self.connect, ())
+ _thread.stack_size(8*1024)
+
self.socket_send_queue = Queue()
+ _thread.stack_size((9+2)*1024)
_thread.start_new_thread(self.socket_send_queue_thread, ())
-
+ _thread.stack_size(8*1024)
def post_processor_after_instantiation(self):
EventMesh.subscribe(constants.EVENT.CHANNEL_SOCKET_SEND, self.send)
self.reconnect_time += 30*1000
def reconnect_timer_cb(self, *args):
+ _thread.stack_size((9+1)*1024)
_thread.start_new_thread(self.connect, ())
+ _thread.stack_size(8*1024)
def socket_send_queue_thread(self):
while True:
$(BUILD)/main_init.mpy \
$(BUILD)/calculator.mpy \
$(BUILD)/versions.mpy \
+ $(BUILD)/websocket_test.mpy \
endif
#闹钟信息
alarm_list = [{'hour': 16, 'repeart': 10, 'idx': 0, 'enabled': 0, 'days': [0,1,2,3,4,5,6], 'minute': 39},
{'hour': 16, 'repeart': 10, 'idx': 1, 'enabled': 0, 'days': [0,1,2,3,4,5,6], 'minute': 39},
- {'hour': 16, 'repeart': 1, 'idx': 1, 'enabled': 0, 'days': [0,1,2,3,4,5,6], 'minute': 39},
- {'hour': 16, 'repeart': 1, 'idx': 1, 'enabled': 0, 'days': [], 'minute': 39},
- {'hour': 16, 'repeart': 1, 'idx': 1, 'enabled': 0, 'days': [], 'minute': 39},]
+ {'hour': 16, 'repeart': 10, 'idx': 1, 'enabled': 0, 'days': [0,1,2,3,4,5,6], 'minute': 39},
+ {'hour': 16, 'repeart': 10, 'idx': 1, 'enabled': 0, 'days': [], 'minute': 39},
+ {'hour': 16, 'repeart': 10, 'idx': 1, 'enabled': 0, 'days': [], 'minute': 39},]
#用于显示闹钟列表不包含开关机信息
class ClockManager(Abstract):
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
+from ui import style_font_youyuan_20,style_font_youyuan_20_red,style_screen,Screen,style_font_youyuan_20_black,style_img
import audio
from machine import Pin
import utime
from protocol import ProtoCol,UnicodeHexStr_To_Utf8Str
import usys
import log
+import base64
+import uwebsocket
+import sys
+import time
+import _thread
+#本示例演示将分开到达设备的两条长两条短信合并为一条短信
+#本例演示要求短信索引值0和短信索引值1的短信同一条长短信的内容
+import uhashlib
+import ubinascii
+
+import queue
+import EventMesh
+SHA1 = uhashlib.sha1
LCD_X = 128
LCD_Y = 128
Testlog = log.getLogger("WechatLog")
# wechat_update_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
# wechat_update_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+#*****************AI语音*******************#
+# -------------------------------------------wechat screen----------------------------------------------------------
+aivoice_screen = lv.obj()
+print("aivoice_screen")
+aivoice_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+aivoice_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ai_screen_luyin_screen = lv.obj(aivoice_screen)
+ai_screen_luyin_screen.set_pos(0, 0)
+ai_screen_luyin_screen.set_size(LCD_X, 96)
+ai_screen_luyin_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ai_screen_luyin_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ai_detail_cont_obj = lv.obj(aivoice_screen)
+ai_detail_cont_obj.set_pos(0, 5)
+ai_detail_cont_obj.set_size(128, 90)
+ai_detail_cont_obj.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ai_detail_cont_obj.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aivoice_press_btn = lv.btn(aivoice_screen)
+aivoice_press_btn.set_pos(10, 100)
+aivoice_press_btn.set_size(LCD_X-20, 26)
+aivoice_press_btn.add_style(style_wechat_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+aivoice_press_btn.add_style(style_common_bg_rect_btn_pressed, lv.PART.MAIN | lv.STATE.PRESSED)
+aivoice_press_btn.set_style_radius(30,0)
+
+aivoice_press_label = lv.label(aivoice_screen)
+aivoice_press_label.set_text("AI智能说话")
+aivoice_press_label.set_size(LCD_X, 20)
+aivoice_press_label.set_pos(0,103)
+aivoice_press_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aivoice_press_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aivoice_left_label = lv.label(ai_detail_cont_obj)
+aivoice_left_label.set_pos(0, 10)
+aivoice_left_label.set_size(LCD_X, 40)
+aivoice_left_label.set_text(" ")
+aivoice_left_label.set_long_mode(lv.label.LONG.WRAP)
+aivoice_left_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aivoice_left_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+aivoice_right_label = lv.label(ai_detail_cont_obj)
+aivoice_right_label.set_pos(0, 60)
+aivoice_right_label.set_size(LCD_X, 40)
+aivoice_right_label.set_text(" ")
+aivoice_right_label.set_long_mode(lv.label.LONG.WRAP)
+aivoice_right_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+aivoice_right_label.add_style(style_font_youyuan_20_red, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+aivoice_press_label_countdown = lv.label(ai_screen_luyin_screen)
+aivoice_press_label_countdown.set_pos(0, 30)
+aivoice_press_label_countdown.set_size(LCD_X, 20)
+aivoice_press_label_countdown.set_text(" ")
+aivoice_press_label_countdown.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+aivoice_press_label_countdown.set_long_mode(lv.label.LONG.WRAP)
+aivoice_press_label_countdown.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+
+class AIScreen(Screen):#AI语音
+ NAME = "ai_page"
+
+ def __init__(self):
+ super().__init__()
+ self.MXA_MSG = 5
+ self.wechat_recode_list = {}
+ self.wechat_num = 0
+ self.volum_size = 8
+ self.msg_tmp = ""
+ self.record_test = audio.Record()
+ self.play_timer = osTimer()
+ self.record_test.gain(4,12)
+ self.aud = audio.Audio(0)
+ self.second_timer = osTimer()
+ self.send_data_time = osTimer()
+ self.press_state = 0
+ self.meta = aivoice_screen
+ aivoice_press_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.talking_cb(e)),
+ lv.EVENT.LONG_PRESSED, None)
+ aivoice_press_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.sending_cb(e)),
+ lv.EVENT.RELEASED, None)
+
+ EventMesh.subscribe("send_ai_data", self.send_ai_data)
+ EventMesh.subscribe("show_ai_data", self.show_ai_data)
+ EventMesh.subscribe("websocket_client", self.websocket_client)
+ self.count_img = 0
+ self.play_sec = 0
+ self.ble_send = 0
+
+ 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.ws_url = "ws://ability.raisound.com:10180/qianwen/chinese/recognize"
+ self.secret_id = "Q4NPLBLyidvRc4TAUByUhcVfRFM1kQBi"
+ self.api_key = b'P7vNsYTv'
+ self.file_name = None #"/usr/test.wav"#file_name#"/usr/static/storage_file/1.wav" #"/usr/static/storage_file/3.amr"##file_name#"/usr/test.wav"
+ self.ws_conn = 0
+ self.Client = 0
+ self.session_id=''
+ self.timeSecond = 0
+ self.data_flag = 0
+ self.asr_data = queue.Queue(16)
+
+ def websocket_client(self, event, msg):
+ self.data_flag = 0
+ self.timeSecond = 0
+ self.ws_url = msg[0] #websocket_url
+ self.secret_id = msg[1] #secret_id
+ self.api_key = msg[2] #api_key
+ self.file_name = "/usr/test.wav"#msg[3]# file_name #"/usr/test.wav"#file_name#"/usr/static/storage_file/1.wav" #"/usr/static/storage_file/3.amr"##file_name#"/usr/test.wav"
+ self.ws_conn = uwebsocket.Client()
+ self.tasks = []
+ self.__init_websocket_conn()
+ self.__start_init()
+
+ self.session_id = ""
+ self.__run()
+ # self.asr_result = queue.Queue(16)
+
+ def HMAC(self,k, m):
+ SHA1_BLOCK_SIZE = 64
+ KEY_BLOCK = k + (b'\0' * (SHA1_BLOCK_SIZE - len(k)))
+ KEY_INNER = bytes((x ^ 0x36) for x in KEY_BLOCK)
+ KEY_OUTER = bytes((x ^ 0x5C) for x in KEY_BLOCK)
+ inner_message = KEY_INNER + m
+ outer_message = KEY_OUTER + SHA1(inner_message).digest()
+ return SHA1(outer_message)
+
+
+ def get_hmac_sha1(self,k, m):
+ data = self.HMAC(k, m).digest()
+ print("HMAC(k, m).digest():", data)
+ print("HMAC(k, m).digest():", ubinascii.hexlify(data))
+ hex_data = ubinascii.hexlify(data)
+ hex_data = hex_data.decode('ascii')
+ return hex_data
+ # 连接
+ def __init_websocket_conn(self):
+ uri = self.__get_entire_url()
+ print("__init_websocket_conn",uri)
+ try:
+ self.Client = self.ws_conn.connect(uri)
+
+ except Exception as e:
+ print(e)
+ return
+
+ def __get_entire_url(self):#连接地址
+
+ time = utime.localtime()#本地时间戳
+ t = utime.mktime(time)
+
+ string = "secretID={}×tamp={}".format(self.secret_id,t)
+
+ md5_str = uhashlib.md5(string.format(t))
+ res = md5_str.digest()
+ # 转成十六进制表示
+ MD5_head = ubinascii.hexlify(res)#
+ MD5_head = MD5_head.decode('ascii')
+ print("uri!!",MD5_head)
+ signature = self.get_hmac_sha1(self.api_key, MD5_head)#对api_key进行再加密
+
+ # signature = hmac.new(self.api_key.encode(), md5_str.encode(), uhashlib.sha1).hexdigest()
+ uri = "{}?secretID={}&signature={}×tamp={}".format(self.ws_url,self.secret_id,signature,t)
+ print("uri",uri,MD5_head,signature)
+ return uri
+
+ # 初始化
+ def __start_init(self):
+ json_data = ujson.dumps({"action": "InitStreamingASR"})
+ print(json_data)
+ if self.Client != 0:
+ self.Client.send(json_data)
+ result = self.Client.recv()
+ print(result)
+ self.session_id = ujson.loads(result)["session_id"]
+
+ # # 发送数据
+ def __send_data(self):
+ while True:
+ try:
+ data = self.asr_data.get()
+ print("__send_data1",len(data))
+ if self.Client != 0:
+ self.Client.send(data)
+ print("__send_data2",len(data))
+ except Exception as e:
+ print(e)
+ self.__close()
+ break
+
+ # # 读取音频数据到队列逻辑
+ def __send_queue(self):
+ file = open(self.file_name, "rb+")
+ while True:
+ data = file.read(3200)
+ if data:
+ encode_audio = base64.standard_b64encode(data).decode("utf-8")
+ session_id = ""
+ session_id = self.session_id
+ json_data = ujson.dumps({
+ "action": "StreamingASR",
+ "audio_data": encode_audio,
+ "session_id":str(session_id)
+ })
+ # print(json_data)
+ print("__send_queue:put",len(json_data))
+ self.asr_data.put(json_data)
+ else:
+ print("__close111111111")
+ utime.sleep_ms(1)
+ self.__close()
+ print("__close!!!!!!!!!!")
+ break
+ # print("json_data",json_data)
+ # utime.sleep_ms(1)
+
+
+ # # 读取数据
+ def read_data(self):
+ while True:
+ try:
+ result = self.Client.recv()
+ print("result",result)
+ json_load = ujson.loads(result)
+ print("json_load",json_load)
+ if "type" in json_load.keys():
+
+ if json_load["type"] == "real_asr":
+
+ print("转写结果",json_load)
+ if json_load["type"] == "model_answer":
+ self.data_flag = 1
+ question = str(json_load["question"])
+ answer = str(json_load["answer"])
+ print("\033[0;31;40m模型问答结果\033[0m", json_load,question,answer)
+ EventMesh.publish("show_ai_data",[question,answer])
+ time = utime.localtime()#本地时间戳
+ second_old = utime.mktime(time)
+ if self.timeSecond == 0:
+ self.timeSecond = second_old
+
+ if second_old - self.timeSecond >= 30:
+ self.timeSecond = second_old
+ if self.data_flag == 0:
+ print("data is null")
+ self.__close()
+ break
+
+ except Exception as e:
+ self.__close()
+ break
+
+ # # 释放结束
+ def __close(self):
+ json_data = ujson.dumps({"action":"PausedASR"})#{"action": "PausedASR"}
+ print("__close3333333")
+ if self.Client != 0:
+ self.Client.send(json_data)
+ print(json_data)
+
+
+
+ def __relase(self):#结束不再录音
+ json_data = ujson.dumps({"action":"RelStreamingASR"})#{"action": "RelStreamingASR"}
+ print(self.Client)
+ if self.Client != 0:
+ self.Client.send(json_data)
+ print("__relase")
+
+ # # 运行
+ def __run(self):
+ _thread.stack_size(10*1024)
+ _thread.start_new_thread(self.__send_queue,())
+ _thread.stack_size(8*1024)
+
+ _thread.stack_size(11*1024)
+ _thread.start_new_thread(self.__send_data, ())
+ _thread.stack_size(8*1024)
+
+
+
+ def send_ai_data(self, event, msg):
+ data = ["ws://ability.raisound.com:10180/qianwen/chinese/recognize","Q4NPLBLyidvRc4TAUByUhcVfRFM1kQBi",b'P7vNsYTv',msg]
+ EventMesh.publish("websocket_client",data)
+ # websocket_client_conn("ws://ability.raisound.com:10180/qianwen/chinese/recognize","Q4NPLBLyidvRc4TAUByUhcVfRFM1kQBi",b'P7vNsYTv',msg)
+ self.read_data()
+
+ def show_ai_data(self, event, msg):
+ self.__relase()
+ print("show_ai_data",msg)
+ ai_screen_luyin_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ ai_detail_cont_obj.clear_flag(lv.obj.FLAG.HIDDEN)
+ aivoice_left_label.set_text(str(msg[0]))
+ aivoice_right_label.set_text(str(msg[1]))
+
+ pass
+
+
+ def initialization(self):
+ Wechat_log("ai_page")
+ self.aud.setVolume(11)#设置最大声录音
+ 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")
+ if ai_detail_cont_obj != None:
+ ai_detail_cont_obj.scroll_to(0, 0, lv.ANIM.OFF)
+
+ 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):
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#有卡时触发sos报警 无卡时自动关机
+ print("talking1")
+ self.play_timer.stop()
+ self.aud.stop()
+ ai_screen_luyin_screen.clear_flag(lv.obj.FLAG.HIDDEN)
+ ai_detail_cont_obj.add_flag(lv.obj.FLAG.HIDDEN)
+ self.countdown = 1
+ aivoice_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
+ print("talking1.0")
+ self.record_test.start("/usr/static/ai_file.wav",10)
+ self.second_timer.start(1000, 1, self.reduce_second)
+ self.press_state = 1
+ self.ble_send = 1
+ #松开发送
+ print("talking2")
+ else:
+ EventMesh.publish("load_screen", {"screen": "no_sim_popup_screen"})
+
+
+ def sending_cb(self,e):
+ if self.press_state == 1:
+ 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:
+ self.press_state = 0
+ EventMesh.publish("load_screen", {"screen": "no_sim_popup_screen"})
+ else:
+ pass
+ def reduce_second(self,*args):
+ if self.countdown < 10:
+ self.countdown += 1
+ else:
+ self.countdown = 10
+ self.sending_cb(0)
+
+ if self.countdown >= 10:
+ self.countdown = 10
+
+ aivoice_press_label_countdown.set_text("{}S".format(str(self.countdown)))
+ #松开发送
+ def sending(self,e):
+ Wechat_log("sending1")
+ if self.press_state == 1:
+ # wechat_label.clear_flag(lv.obj.FLAG.HIDDEN)
+ # wechat_label.set_text("发送中")
+ ai_screen_luyin_screen.add_flag(lv.obj.FLAG.HIDDEN)
+ ai_detail_cont_obj.clear_flag(lv.obj.FLAG.HIDDEN)
+
+ if self.countdown >= 10:
+ self.countdown = 10
+
+ #写序号
+ self.record_test.stop() #停止錄音
+ self.second_timer.stop() #停止计时器
+ #修改或添加词典键值
+ self.press_state = 0
+ self.ble_send = 0
+ ##隐藏显示文本 显示列表显示框
+
+ path = "/usr/static/ai_file.wav"
+ aivoice_press_label_countdown.set_text(" ")
+ self.send_data_time.start(2000,0,self.send_file)
+ # EventMesh.publish("send_ai_data", path)
+ # ws_client = websocket_client_conn("ws://ability.raisound.com:10180/qianwen/chinese/recognize","Q4NPLBLyidvRc4TAUByUhcVfRFM1kQBi",b'P7vNsYTv',path)
+ # ws_client.read_data()
+
+
+ Wechat_log("sending2")
+ def send_file(self,*argc):
+ path = "/usr/static/ai_file.wav"
+ check_file = ql_fs.path_exists(path)
+ if check_file == True:
+ self.file_name = path
+ # self.__send_queue()
+ EventMesh.publish("send_ai_data", path)
+
+ 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"})
+
+ def Close(self):
+ Wechat_log("Close1")
+ 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")
+ self.__close()
class WechatScreen(Screen):
NAME = "wechat"
self.wechat_show = self.wechat_num
self.wechat_recode_list["num"] = self.wechat_num
print("talking1.0")
- self.record_test.start("/usr/static/storage_file/{}.amr".format(self.wechat_num),16)
+ self.record_test.start("/usr/static/storage_file/{}.wav".format(self.wechat_num),16)
self.second_timer.start(1000, 1, self.reduce_second)
self.press_state = 1
self.ble_send = 1
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.aud.play(1, 1, '/usr/static/storage_file/{}.wav'.format(i)) #文件名前面要加上路径
self.paay_btn_old_count = self.paay_btn_count
Wechat_log("play_label2")
EventMesh.publish("load_screen", {"screen": "wechat_popup"})
else:
EventMesh.publish("wechat_updata_list_show")
- # path = "/ext/static/storage_file/audio_amr/amr/{}.amr".format(wechat_num)
- path = "/usr/static/storage_file/{}.amr".format(wechat_num)
+ # path = "/ext/static/storage_file/audio_amr/amr/{}.wav".format(wechat_num)
+ path = "/usr/static/storage_file/{}.wav".format(wechat_num)
with open(path,"w") as fd:
arm = bytearray()
j = 0
ui.add_screen(_ui.Spo2Screen())
ui.add_screen(_ui.TemperatureScreen())
ui.add_screen(_ui.ContactsScreen())
- from appWechat import WechatScreen,TK_ProtoCol,MESSAGE_ProtoCol,NewWechatPopupScreen
+ from appWechat import WechatScreen,TK_ProtoCol,MESSAGE_ProtoCol,NewWechatPopupScreen,AIScreen
ui.add_screen(WechatScreen())
+ ui.add_screen(AIScreen())
from alarm import ClkListScreen,ClockManager,NewEditClk,CLKTimeScreen,ClkPeriod,PopupAlarmScreen
from ui_health import HealthScreen
from calculator import calculatorScreen
ui.add_screen(_ui.albumPreviewScreen())
ui.add_screen(_ui.cameraFullScreen())
ui.add_screen(_ui.restore_confirmScreen())
+ ui.add_screen(_ui.down_Screen())
+ ui.add_screen(_ui.up_Screen())
ui.add_screen(NewWechatPopupScreen())
ui.add_screen(HealthScreen())
# ui.add_screen(_ui.Setting3Screen())
EventMesh.publish("set_interrup_incall",0)
return
- EventMesh.publish("set_interrup_incall",0)
- EventMesh.publish("set_UI_high_priority",0)
+ # EventMesh.publish("set_interrup_incall",0)
+ # 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"})
+ # 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")
print('voicecall disconnect end')
if bat_tmp != None:
bat_value = bat_tmp[1]
if bat_value <= 0:
- EventMesh.publish("load_screen", {"screen": "LOW_ONE_POWER"})
+ if bat_tmp[0] != "1":
+ EventMesh.publish("load_screen", {"screen": "LOW_ONE_POWER"})
""""隔天清步数"""
if self.bat_time > 5*60:
self.bat_time = 0
if battery[1] <= 20 and battery[1] > 0:
- EventMesh.publish("load_screen", {"screen": "LOW_POWER"})
+ if battery[0] != "1":
+ EventMesh.publish("load_screen", {"screen": "LOW_POWER"})
else:
self.bat_time = 0
"""
EventMesh.publish(constants.PROTOCOL.POWEROFF_SEND)
#print("POWEROFF_ProtoCol:recv:%s"%(msg))
- EventMesh.publish("load_screen", {"screen": "poweroff_comfirm"})
+ battery = EventMesh.publish("screen_get_battery")
+ if battery != None:
+ if battery[0] != 1:
+ EventMesh.publish("load_screen", {"screen": "poweroff_comfirm"})
class PHL_ProtoCol(ProtoCol):
"""电话本同步"""
style_font_youyuan_20_black.set_text_font(lv.K01_font_16_ALL)
#style_font_youyuan_20_black.set_text_font_v2("font_28.bin",28,0)
+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(0xFF, 0xFF, 0xFF))
+style_font_youyuan_70_black.set_text_font(lv.K01_font_30_DIAL)
+
+
+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.K01_font_16_ALL)
style_font_youyuan_20_red = lv.style_t()
style_font_youyuan_20_red.init()
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}]
EventMesh.publish("set_UI_high_priority", 0)
EventMesh.publish("set_hangup_mode", 1)
voiceCall.callEnd()
- self.timer.start(5000,0,self.call_end)
+ EventMesh.publish("set_interrup_incall",0)
+ 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"})
def Close(self):
self.timer.stop()
def call_end(self,*argc):
- print("call_end!!!!!!!!")
- call_state = EventMesh.publish("get_call_state")#设置关机时间
+
+ call_state = EventMesh.publish("get_call_state")#
+ print("call_end!!!!!!!!",call_state)
if call_state != None:
if call_state == 0:#未打通
EventMesh.publish("load_screen", {"screen": "main_menu"})
# no_sim_power_screen_img.set_pos(49, 30)
# no_sim_power_screen_img.set_size(30, 30)
# 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_img.set_src("U:/static/setting_poweroff.png")
no_sim_power_screen_label = lv.label(no_sim_power_screen)
EventMesh.publish("set_sos_flag",0)
EventMesh.publish("set_sos_num",0)
EventMesh.publish("set_hangup_mode",0)
- EventMesh.publish("return_prev_screen") #返回上一级
+ EventMesh.publish("set_interrup_incall",0)
+ EventMesh.publish("set_UI_high_priority",0)
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
def Close(self):
self.timer1.stop()
# toolbox_stopwatch_img_label_btn.add_flag(lv.obj.FLAG.CLICKABLE)
toolbox_stopwatch_img_label_btn.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ tool_set_y+=tool_set_y_offset
+ toolbox_calcut_img_btn_1 = lv.btn(toolbox_cont)
+ toolbox_calcut_img_btn_1.set_pos(int(0),int(tool_set_y-5))
+ toolbox_calcut_img_btn_1.set_size(120,35)
+ toolbox_calcut_img_btn_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ toolbox_calcut_img_btn_1.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_calcut_img_btn_1.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+ toolbox_calcut_img = lv.img(toolbox_cont)
+ toolbox_calcut_img.set_pos(5, tool_set_y)
+ toolbox_calcut_img.set_size(25, 25)
+ # toolbox_countdown_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_calcut_img.set_src("U:/static/menu_calcut.png")
+ toolbox_calcut_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ toolbox_calcut_img_label = lv.label(toolbox_cont)
+ toolbox_calcut_img_label.set_pos(35, tool_set_y+5)
+ toolbox_calcut_img_label.set_size(128-35, 35)
+ toolbox_calcut_img_label.set_text("计算器")
+ toolbox_calcut_img_label.set_long_mode(lv.label.LONG.WRAP)
+ # toolbox_countdown_img_label.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_calcut_img_label.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+ toolbox_calcut_img_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
toolbox_step_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "step")), lv.EVENT.CLICKED, None)
toolbox_weather_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "weather")), lv.EVENT.CLICKED, None)
toolbox_countdown_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e,"countdown")), lv.EVENT.CLICKED, None)
toolbox_stopwatch_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "stopwatch")), lv.EVENT.CLICKED, None)
+ toolbox_calcut_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "calculator")), lv.EVENT.CLICKED, None)
+
# toolbox_step_img_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "step")), lv.EVENT.CLICKED, None)
# toolbox_weather_img_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "weather")), lv.EVENT.CLICKED, None)
# toolbox_alarm_img_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "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_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "countdown")), lv.EVENT.PRESSING, None)
toolbox_stopwatch_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "stopwatch")), lv.EVENT.PRESSING, None)
+ toolbox_calcut_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "calculator")), lv.EVENT.PRESSING, None)
# toolbox_step_img_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e,"step")), lv.EVENT.PRESSING, None)
# toolbox_weather_img_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "weather")), lv.EVENT.PRESSING, None)
self.aud.stop()
self.call_timer.stop()
voiceCall.callEnd()
+ EventMesh.publish("set_interrup_incall",0)
+ 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"})
def btn1_release(self):
EventMesh.publish("set_UI_high_priority", 0)
self.timer.stop()
voiceCall.callEnd()
+ EventMesh.publish("set_interrup_incall",0)
+ 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"})
def Close(self):
self.timer.stop()
self.MXA_phone_num = 50 #最大显示号码个数
self.contact_detail_listt_dict = []
self.calling_btn = []
+ self.is_sliding = 0
def post_processor_before_initialization(self):
data = EventMesh.publish("get_phonebook_list")
self.count = 0
def initialization(self):
+ self.is_sliding = 0
global contacts_screen,contacts_cont,contacts_top_title,contact_none_label,contacts_screen_list_screen
if contacts_screen == None:
contacts_screen = lv.obj()
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_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_cb(e)), lv.EVENT.PRESSING, None)
contact_btn.add_flag(lv.obj.FLAG.HIDDEN)
# contact_btn.add_style(style_press_btn, lv.PART.MAIN | lv.STATE.PRESSED)
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"})
+ if code == lv.EVENT.PRESSING:
+ #print("PRESSING")
+ self.is_sliding += 1
+
+ elif code == lv.EVENT.CLICKED:
+ #utime.sleep_ms(10)
+ print("1self.is_sliding",self.is_sliding)
+ if self.is_sliding <= 5 and self.is_sliding != 0:#如果是在滑动中则不需要点击事件
+ self.is_sliding = 0
+ 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"})
+
+ self.is_sliding =0
+
def calling(self,msg_text):
_msg = msg_text
# no_sim_auto_screen_img.set_pos(49, 40)
# no_sim_auto_screen_img.set_size(30, 30)
# no_sim_auto_screen_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
- # no_sim_auto_screen_img.set_src("E:/static/poweroff_icon.png")
+ # no_sim_auto_screen_img.set_src("E:/static/setting_poweroff.png")
no_sim_auto_screen_label = lv.label(no_sim_auto_screen)
else:
EventMesh.publish(constants.EVENT.SYSTEM_UP)
+# -------------------------------------------down screen----------------------------------------------------------
+down_show_screen = lv.obj()
+print("restart_screen")
+down_show_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+down_show_bright_img = lv.img(down_show_screen)#亮度
+down_show_bright_img.set_size(25, 25)
+down_show_bright_img.set_pos(13, 90)
+down_show_bright_img.set_src("U:/static/menu_bright.png")
+down_show_bright_img.add_flag(lv.obj.FLAG.CLICKABLE)
+down_show_bright_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+down_show_volume_img = lv.img(down_show_screen)#音量
+down_show_volume_img.set_size(25, 25)
+down_show_volume_img.set_pos(13+25+13, 90)
+down_show_volume_img.set_src("U:/static/menu_volume.png")
+down_show_volume_img.add_flag(lv.obj.FLAG.CLICKABLE)
+down_show_volume_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+down_show_setting_img = lv.img(down_show_screen)#设置
+down_show_setting_img.set_size(25, 25)
+down_show_setting_img.set_pos(13+25+13+25+13, 90)
+down_show_setting_img.set_src("U:/static/menu_version.png")
+down_show_setting_img.add_flag(lv.obj.FLAG.CLICKABLE)
+down_show_setting_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+down_show_mpsignal_img = lv.img(down_show_screen)
+down_show_mpsignal_img.set_pos(int(10),int(5))
+down_show_mpsignal_img.set_size(22,12)
+down_show_mpsignal_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+down_show_mpsignal_img.set_src("U:/static/mpsignal5.png")
+down_show_mpsignal_img.add_style(style_img, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+down_showt_battery_img = lv.img(down_show_screen)
+down_showt_battery_img.set_pos(int(102),int(5))
+down_showt_battery_img.set_size(24,12)#16 8
+down_showt_battery_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+down_showt_battery_img.set_src("U:/static/vbat_0.png")
+down_showt_battery_img.add_style(style_img, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+power_line_points = [{"x":0,"y":0},{"x":0,"y":10}]
+power_line_red = lv.style_t()
+power_line_red.init()
+power_line_red.set_line_width(0)#23 宽度
+power_line_red.set_line_color(lv.color_make(0xff, 0xff, 0xff))
+
+down_showt_battery_line = lv.line(down_show_screen)
+down_showt_battery_line.set_points(power_line_points,2)
+down_showt_battery_line.set_pos(int(110),int(6))
+down_showt_battery_line.set_size(0,10)#高度12
+down_showt_battery_line.add_style(power_line_red,0)
+
+data = RTC().datetime()
+hour = data[4]
+min = data[5]
+
+week = data[3]
+
+date0 = data[0]
+date1 = data[1]
+date2 = data[2]
+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 '日'
+down_showt_time1_text = lv.label(down_show_screen)
+down_showt_time1_text.set_pos(0, 35)
+down_showt_time1_text.set_size(128, 71)
+down_showt_time1_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+down_showt_time1_text.set_text("{}:{}".format("%02d"%(hour),"%02d"%(min)))
+# watchface1_time1_text.set_text("%02d:%02d"%(hour,min))
+down_showt_time1_text.add_style(style_font_youyuan_70_black, lv.PART.MAIN|lv.STATE.DEFAULT)
+#日期
+down_show_date_span = lv.label(down_show_screen)
+down_show_date_span.set_pos(0, 62)
+down_show_date_span.set_size(128, 20)
+down_show_date_span.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+down_show_date_span.set_text("%02d/%02d 星期%s"%(date1,date2,get_week(week)))
+down_show_date_span.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFAULT)
+class down_Screen(Screen):#下滑界面
+ NAME = "down_screen"
+
+ def __init__(self):
+ super().__init__()
+ self.rtc = RTC()
+ self.timer = osTimer()
+ self.meta = down_show_screen
+ down_show_bright_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,"brightness")), lv.EVENT.CLICKED, None)
+ down_show_volume_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,"totalvolume")), lv.EVENT.CLICKED, None)
+ down_show_setting_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,"setting")), lv.EVENT.CLICKED, None)
+
+ def initialization(self):
+ print("down_screen")
+
+ #获取信号
+ signal = EventMesh.publish("screen_get_sig")
+ if signal:
+ self.__signal(None, signal)
+ # 获取电池电量
+ battery = EventMesh.publish("screen_get_battery")
+ if battery:
+ self.__battery(None, battery)
+
+ self.__time(None, None)
+ self.timer.start(2000,1,self.time_out)
+ def img_cb(self, e, msg):
+ EventMesh.publish("load_screen", {"screen": "{}".format(msg)})
+
+ def time_out(self,*argc):
+ signal = EventMesh.publish("screen_get_sig")
+ if signal:
+ self.__signal(None, signal)
+ # 获取电池电量
+ battery = EventMesh.publish("screen_get_battery")
+ if battery:
+ self.__battery(None, battery)
+
+ self.__time(None, None)
+ pass
+
+ def __time(self, event, msg):
+ #时间
+ rtc_time = self.rtc.datetime()
+ month = rtc_time[1]
+ day = rtc_time[2]
+ year = rtc_time[0]
+ # week = ("星期%s"%(self.get_week(rtc_time[3])))
+ week_data = rtc_time[3]
+ # time = [rtc_time[4], rtc_time[5]]
+
+ down_showt_time1_text.set_text("{}:{}".format("%02d"%(rtc_time[4]),"%02d"%(rtc_time[5])))
+ down_show_date_span.set_text("%02d/%02d 星期%s"%(month,day,get_week(week)))
+
+ 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 :
+ down_show_mpsignal_img.set_src("U:/static/mpsignal{}.png".format(msg//8+1))
+ else :
+ down_show_mpsignal_img.set_src("U:/static/mpsignal5.png")
+
+ def __battery(self, event, msg):
+ #print("__battery_cb:",str(msg))
+ #print(msg)
+ if msg[0] == '1':
+ down_showt_battery_line.set_pos(int(0),int(0))
+ down_showt_battery_line.set_size(0,0)
+ down_showt_battery_line.set_style_line_width(0,lv.PART.MAIN)
+ down_showt_battery_img.set_src("U:/static/charge_ing.png")
+ # watchface1_res_stat_charge_in_img.set_src("U:/static/charge_in.png")
+ else:
+ down_showt_battery_img.set_src("U:/static/vbat_0.png")
+ level = msg[1]
+ if level >= 99:
+ level = 100
+ line_len = int(level*(21/100))
+ # print("__battery_cb:",level,line_len,30/100)
+ if line_len >= 21:
+ line_len = 21
+ if line_len <= 5:
+ line_len = 5
+
+ set_x = int(103+line_len//2)
+ down_showt_battery_line.set_pos(int(set_x),int(6))
+ down_showt_battery_line.set_size(line_len,10)
+ down_showt_battery_line.set_style_line_width(line_len,lv.PART.MAIN)
+ if line_len <= 5:
+ down_showt_battery_line.set_style_line_color(lv.color_make(0xff,0x00,0x00),0)
+ else:
+ down_showt_battery_line.set_style_line_color(lv.color_make(0x00,0xff,0x00),0)
+ pass
+
+ def Close(self):
+ self.timer.stop()
+
+ def done_bottom_to_top(self):
+ # print("done_bottom_to_top")
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def done_top_to_bottom(self):
+ pass
+
+ 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"})
+
+up_show_screen = lv.obj()
+print("up_show_screen")
+up_show_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+up_show_bg_img = lv.img(up_show_screen)#亮度
+up_show_bg_img.set_size(128, 128)
+up_show_bg_img.set_pos(0, 0)
+up_show_bg_img.set_src("U:/static/up_show_step.png")
+up_show_bg_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+up_show_bg_img_label = lv.label(up_show_screen)
+up_show_bg_img_label.set_pos(0, 30)
+up_show_bg_img_label.set_size(128, 20)
+up_show_bg_img_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+up_show_bg_img_label.set_text("今日步数")
+up_show_bg_img_label.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+up_show_bg_img_label1 = lv.label(up_show_screen)
+up_show_bg_img_label1.set_pos(0, 50)
+up_show_bg_img_label1.set_size(128, 20)
+up_show_bg_img_label1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+up_show_bg_img_label1.set_text("0")
+up_show_bg_img_label1.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+class up_Screen(Screen):#上滑界面
+ NAME = "up_screen"
+
+ def __init__(self):
+ super().__init__()
+ self.rtc = RTC()
+ self.timer = osTimer()
+ self.meta = up_show_screen
+
+ def initialization(self):
+ print("up_screen")
+
+ step = EventMesh.publish("get_old_step_value")
+ self.__stepValue(None, step)
+ self.timer.start(1000,1,self.time_out)
+
+ def time_out(self,*argc):
+ step = EventMesh.publish("get_old_step_value")
+ self.__stepValue(None, step)
+ pass
+
+ def __time(self, event, msg):
+ #时间
+ rtc_time = self.rtc.datetime()
+ month = rtc_time[1]
+ day = rtc_time[2]
+ year = rtc_time[0]
+ # week = ("星期%s"%(self.get_week(rtc_time[3])))
+ week_data = rtc_time[3]
+ # time = [rtc_time[4], rtc_time[5]]
+
+ down_showt_time1_text.set_text("{}:{}".format("%02d"%(rtc_time[4]),"%02d"%(rtc_time[5])))
+ down_show_date_span.set_text("%02d/%02d 星期%s"%(month,day,get_week(week)))
+
+ 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 :
+ down_show_mpsignal_img.set_src("U:/static/mpsignal{}.png".format(msg//8+1))
+ else :
+ down_show_mpsignal_img.set_src("U:/static/mpsignal5.png")
+
+ def __battery(self, event, msg):
+ #print("__battery_cb:",str(msg))
+ #print(msg)
+ if msg[0] == '1':
+ down_showt_battery_line.set_pos(int(0),int(0))
+ down_showt_battery_line.set_size(0,0)
+ down_showt_battery_line.set_style_line_width(0,lv.PART.MAIN)
+ down_showt_battery_img.set_src("U:/static/charge_ing.png")
+ # watchface1_res_stat_charge_in_img.set_src("U:/static/charge_in.png")
+ else:
+ down_showt_battery_img.set_src("U:/static/vbat_0.png")
+ level = msg[1]
+ if level >= 99:
+ level = 100
+ line_len = int(level*(21/100))
+ # print("__battery_cb:",level,line_len,30/100)
+ if line_len >= 21:
+ line_len = 21
+ if line_len <= 5:
+ line_len = 5
+
+ set_x = int(103+line_len//2)
+ down_showt_battery_line.set_pos(int(set_x),int(6))
+ down_showt_battery_line.set_size(line_len,10)
+ down_showt_battery_line.set_style_line_width(line_len,lv.PART.MAIN)
+ if line_len <= 5:
+ down_showt_battery_line.set_style_line_color(lv.color_make(0xff,0x00,0x00),0)
+ else:
+ down_showt_battery_line.set_style_line_color(lv.color_make(0x00,0xff,0x00),0)
+ pass
+
+ def __stepValue(self, event, msg):
+ if msg == None:
+ up_show_bg_img_label1.set_text("0")
+ else:
+ up_show_bg_img_label1.set_text(str(msg))
+
+
+ def Close(self):
+ self.timer.stop()
+
+ def done_bottom_to_top(self):
+ # print("done_bottom_to_top")
+ pass
+
+ def done_top_to_bottom(self):
+ EventMesh.publish("watch_top_show")
+ 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("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
camera_popup_screen = None
camera_popup_label = None
import EventMesh
import osTimer
import constants
-from ui import Screen,style_screen
+from ui import Screen,style_screen,style_font_youyuan_70_black,style_font_youyuan_28
import ql_fs
import ujson
from machine import RTC
#watchface_style_default.set_text_font_v2("font_28.bin",28,0)
watchface_style_default.set_text_font(lv.K01_font_16_ALL)
-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.K01_font_16_ALL)
+
Watchface = lv.obj()
print("Watchface")
#时间
-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(0xFF, 0xFF, 0xFF))
-style_font_youyuan_70_black.set_text_font(lv.K01_font_30_DIAL)
+
#style_font_youyuan_70_black.set_text_font(lv.font_70_bold)
#init3:(2106, 2, 7, 6, 29, 38, 6, 38)
data = RTC().datetime()
#日期
watchface1_date_span = lv.label(Watchface1)
watchface1_date_span.set_pos(4, 52)
-watchface1_date_span.set_size(60, 20)
+watchface1_date_span.set_size(124, 20)
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)
else:
watchface1_res_stat_battery_img.set_src("U:/static/vbat_0.png")
level = msg[1]
- if level >= 100:
+ if level >= 99:
level = 100
line_len = int(level*(21/100))
# print("__battery_cb:",level,line_len,30/100)
def done_bottom_to_top(self):
id = MainMenu2_til.get_tile_act().get_child(0).get_text()
if id == "4":
- EventMesh.publish("load_screen", {"screen": "call_log"})
+ EventMesh.publish("load_screen", {"screen": "up_screen"})
self.menu_id = id
def done_top_to_bottom(self):
id = MainMenu2_til.get_tile_act().get_child(0).get_text()
if id == "4":
- EventMesh.publish("load_screen", {"screen": "popup"})
+ EventMesh.publish("load_screen", {"screen": "down_screen"})
self.menu_id = id
def done_left_to_right(self):
self.menu_id = id
import ql_fs
import EventMesh
from misc import Power
-from ui import style_screen,style_font_youyuan_20_gray,style_screen_btn_1_main_main_default,style_font_youyuan_20,style_btn,style_img,Screen,style_contact_btn,style_bar,style_bar_indic
+from ui import style_screen,style_font_youyuan_20_black,style_font_youyuan_20_gray,style_screen_btn_1_main_main_default,style_font_youyuan_20,style_btn,style_img,Screen,style_contact_btn,style_bar,style_bar_indic
import constants
import osTimer
import audio
setting_restart_img.set_pos(4, setting_cont_y)
setting_restart_img.set_size(set_icon_x, set_icon_y)
# setting_poweroff_img.add_flag(lv.obj.FLAG.CLICKABLE)
-setting_restart_img.set_src("U:/static/menu_poweroff.png")
+setting_restart_img.set_src("U:/static/menu_restart.png")
setting_restart_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
print("restart_screen")
restart_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-restart_confirm_label = lv.label(restart_screen)
-restart_confirm_label.set_text("确认")
-restart_confirm_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-restart_confirm_label.set_size(64, 20)
-restart_confirm_label.set_pos(0,60)
-restart_confirm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-restart_confirm = lv.label(restart_screen)
-restart_confirm.set_text(" ")
-restart_confirm.set_size(64, 40)
-restart_confirm.set_pos(0,60)
-restart_confirm.add_flag(lv.obj.FLAG.CLICKABLE)
-
-restart_cancel_label = lv.label(restart_screen)
-restart_cancel_label.set_text("返回")
-restart_cancel_label.set_size(64, 20)
-restart_cancel_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-restart_cancel_label.set_pos(64,60)
-restart_cancel_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-restart_cancel = lv.label(restart_screen)
-restart_cancel.set_text(" ")
-restart_cancel.set_size(64, 40)
-restart_cancel.set_pos(64,60)
-restart_cancel.add_flag(lv.obj.FLAG.CLICKABLE)
-
+# restart_confirm_label = lv.label(restart_screen)
+# restart_confirm_label.set_text("确认")
+# restart_confirm_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# restart_confirm_label.set_size(64, 20)
+# restart_confirm_label.set_pos(0,80)
+# restart_confirm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+# restart_confirm = lv.label(restart_screen)
+# restart_confirm.set_text(" ")
+# restart_confirm.set_size(64, 40)
+# restart_confirm.set_pos(0,80)
+# restart_confirm.add_flag(lv.obj.FLAG.CLICKABLE)
+
+# restart_cancel_label = lv.label(restart_screen)
+# restart_cancel_label.set_text("返回")
+# restart_cancel_label.set_size(64, 20)
+# restart_cancel_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# restart_cancel_label.set_pos(64,80)
+# restart_cancel_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# restart_cancel = lv.label(restart_screen)
+# restart_cancel.set_text(" ")
+# restart_cancel.set_size(64, 40)
+# restart_cancel.set_pos(64,80)
+# restart_cancel.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+screen_slider_1 = lv.slider(restart_screen)
+screen_slider_1.set_pos(int(4),int(55))
+screen_slider_1.set_size(120,40)
+screen_slider_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.ON)
+screen_slider_1.set_range(0, 100)
+screen_slider_1.set_value(0, False)
+screen_slider_1.add_flag(lv.obj.FLAG.ADV_HITTEST)
+
+# screen_slider_1.set_mode(lv.BAR_MODE.RANGE)#LV_BAR_MODE_RANGE
+
+# create style style_screen_slider_1_main_main_default
+style_screen_slider_1_main_main_default = lv.style_t()
+style_screen_slider_1_main_main_default.init()
+style_screen_slider_1_main_main_default.set_radius(40)
+style_screen_slider_1_main_main_default.set_bg_color(lv.color_make(0x00,0x00,0x00))
+style_screen_slider_1_main_main_default.set_bg_grad_color(lv.color_make(0x00,0x00,0x00))
+style_screen_slider_1_main_main_default.set_bg_grad_dir(lv.GRAD_DIR.NONE)
+style_screen_slider_1_main_main_default.set_bg_opa(0)
+style_screen_slider_1_main_main_default.set_outline_color(lv.color_make(0xff,0xff,0xff))
+style_screen_slider_1_main_main_default.set_outline_width(5)
+style_screen_slider_1_main_main_default.set_outline_opa(0)
+
+# add style for screen_slider_1
+screen_slider_1.add_style(style_screen_slider_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+# create style style_screen_slider_1_main_main_focused
+style_screen_slider_1_main_main_focused = lv.style_t()
+style_screen_slider_1_main_main_focused.init()
+style_screen_slider_1_main_main_focused.set_outline_color(lv.color_make(0x00,0x00,0x00))
+style_screen_slider_1_main_main_focused.set_outline_opa(255)
+
+# add style for screen_slider_1
+screen_slider_1.add_style(style_screen_slider_1_main_main_focused, lv.PART.MAIN|lv.STATE.FOCUSED)
+
+# create style style_screen_slider_1_main_indicator_default
+style_screen_slider_1_main_indicator_default = lv.style_t()
+style_screen_slider_1_main_indicator_default.init()
+style_screen_slider_1_main_indicator_default.set_radius(40)
+style_screen_slider_1_main_indicator_default.set_bg_color(lv.color_make(0x80,0x80,0x80))
+style_screen_slider_1_main_indicator_default.set_bg_grad_color(lv.color_make(0x00,0x00,0x00))
+style_screen_slider_1_main_indicator_default.set_bg_grad_dir(lv.GRAD_DIR.NONE)
+style_screen_slider_1_main_indicator_default.set_bg_opa(100)
+
+# add style for screen_slider_1
+screen_slider_1.add_style(style_screen_slider_1_main_indicator_default, lv.PART.INDICATOR|lv.STATE.DEFAULT)
+
+# # create style style_screen_slider_1_main_indicator_focused
+style_screen_slider_1_main_indicator_focused = lv.style_t()
+style_screen_slider_1_main_indicator_focused.init()
+style_screen_slider_1_main_indicator_focused.set_radius(40)
+style_screen_slider_1_main_indicator_focused.set_bg_color(lv.color_make(0x00,0x00,0x00))
+style_screen_slider_1_main_indicator_focused.set_bg_grad_color(lv.color_make(0x00,0x00,0x00))
+style_screen_slider_1_main_indicator_focused.set_bg_grad_dir(lv.GRAD_DIR.NONE)
+style_screen_slider_1_main_indicator_focused.set_bg_opa(0)
+
+# # add style for screen_slider_1
+# screen_slider_1.add_style(style_screen_slider_1_main_indicator_focused, lv.PART.INDICATOR|lv.STATE.FOCUSED)
+
+# create style style_screen_slider_1_main_knob_default
+style_screen_slider_1_main_knob_default = lv.style_t()
+style_screen_slider_1_main_knob_default.init()
+style_screen_slider_1_main_knob_default.set_radius(40)
+style_screen_slider_1_main_knob_default.set_bg_color(lv.color_make(0x00,0x00,0x00))
+style_screen_slider_1_main_knob_default.set_bg_grad_color(lv.color_make(0x00,0x00,0x00))
+style_screen_slider_1_main_knob_default.set_bg_grad_dir(lv.GRAD_DIR.NONE)
+style_screen_slider_1_main_knob_default.set_bg_opa(0)
+style_screen_slider_1_main_knob_default.set_border_width(0)
+style_screen_slider_1_main_knob_default.set_pad_all(0)
+
+# add style for screen_slider_1
+screen_slider_1.add_style(style_screen_slider_1_main_knob_default, lv.PART.KNOB|lv.STATE.DEFAULT)
+
+
+
+screen_slider_img_bg = lv.img(restart_screen)
+screen_slider_img_bg.set_size(120,40)
+screen_slider_img_bg.set_pos(4,55)
+screen_slider_img_bg.set_src("U:/static/setting_poweroff_bg.png")
+screen_slider_img_bg.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+screen_slider_img = lv.img(restart_screen)
+screen_slider_img.set_size(30,30)
+screen_slider_img.set_pos(10,65)
+screen_slider_img.set_src("U:/static/setting_power_restart.png")
+# screen_slider_img.add_flag(lv.obj.FLAG.CLICKABLE)
+screen_slider_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+restart_power_label = lv.label(restart_screen)
+restart_power_label.set_text("滑动重启")
+restart_power_label.set_size(128, 20)
+restart_power_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+restart_power_label.set_pos(0,20)
+restart_power_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
class RestartScreen(Screen):
NAME = "restart"
def __init__(self):
super().__init__()
self.meta = restart_screen
- restore_confirm.add_event_cb(lambda e: EventMesh.callback_wrapper(self.confirm(e)),lv.EVENT.CLICKED, None)
- restart_cancel.add_event_cb(lambda e: EventMesh.callback_wrapper(self.concel(e)),lv.EVENT.CLICKED, None)
-
+ self.old_x = 0
+ # restart_confirm.add_event_cb(lambda e: EventMesh.callback_wrapper(self.confirm(e)),lv.EVENT.CLICKED, None)
+ # restart_cancel.add_event_cb(lambda e: EventMesh.callback_wrapper(self.concel(e)),lv.EVENT.CLICKED, None)
+ screen_slider_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.save_choice(e)), lv.EVENT.VALUE_CHANGED, None)
+ screen_slider_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.save_choice(e)), lv.EVENT.RELEASED, None)
+ def initialization(self):
+ screen_slider_1.set_value(10, False)
+ screen_slider_img.set_pos(10,60)
+ screen_slider_1.set_style_bg_color(lv.color_make(0x00,0x00,0x00), lv.PART.INDICATOR|lv.STATE.DEFAULT)
+
+ def save_choice(self,e):
+ state_on = 0
+ state_offset = 0
+ code = e.get_code()
+ value_slider = screen_slider_1.get_value()
+ total_len = 0+value_slider
+ if total_len >= 100-7:
+ total_len = 100-7
+ if total_len <= 10:
+ total_len = 10
+
+ if total_len >= 100-7:
+ screen_slider_1.set_value(100, False)
+
+ if total_len >= 20:
+ if total_len > 80:
+ screen_slider_img.set_pos(total_len,60)
+ else:
+ screen_slider_img.set_pos(total_len-5,60)
+ else:
+ screen_slider_img.set_pos(total_len,60)
+ screen_slider_1.set_style_bg_color(lv.color_make(0x80,0x80,0x80), lv.PART.INDICATOR|lv.STATE.DEFAULT)
+
+ # print("RELEASED save_choice!!!!!!",code,total_len,value_slider,state_offset)
+ if code == lv.EVENT.RELEASED:
+ value_slider = screen_slider_1.get_value()
+ # print("RELEASED save_choice1111111!!!!!!",total_len,value_slider,state_on)
+ if total_len < 100-7:
+ screen_slider_1.set_value(10, False)
+ screen_slider_img.set_pos(10,60)
+ screen_slider_1.set_style_bg_color(lv.color_make(0x00,0x00,0x00), lv.PART.INDICATOR|lv.STATE.DEFAULT)
+ else:
+ screen_slider_1.set_value(100, False)
+ self.confirm(0)
+ pass
+
+ # print("save_choice!!!!!!",value_slider)
+ pass
+
def confirm(self, e):
Power.powerRestart()
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(49, 5)
-poweroff_img.set_size(30, 30)
-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(128, 20)
-poweroff_label.set_pos(0,40)
-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(88, 23)
-poweroff_confirm_img.set_pos(24, 65)
-poweroff_confirm_img.set_src("U:/static/off_icon.png")
-poweroff_confirm_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-poweroff_confirm_imgbtn = lv.img(poweroff_screen)
-poweroff_confirm_imgbtn.set_size(128, 35)
-poweroff_confirm_imgbtn.set_pos(0, 60)
-poweroff_confirm_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
-poweroff_confirm_imgbtn.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, 0)
-poweroff_confirm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# poweroff_img = lv.img(poweroff_screen)
+# poweroff_img.set_pos(49, 5)
+# poweroff_img.set_size(30, 30)
+# poweroff_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+# poweroff_img.set_src("U:/static/setting_poweroff.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(128, 20)
+# poweroff_label.set_pos(0,40)
+# 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(88, 23)
+# poweroff_confirm_img.set_pos(24, 65)
+# poweroff_confirm_img.set_src("U:/static/off_icon.png")
+# poweroff_confirm_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# poweroff_confirm_imgbtn = lv.img(poweroff_screen)
+# poweroff_confirm_imgbtn.set_size(128, 35)
+# poweroff_confirm_imgbtn.set_pos(0, 60)
+# poweroff_confirm_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+# poweroff_confirm_imgbtn.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, 0)
+# 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(88, 23)
+# poweroff_return.set_pos(24, 100)
+# poweroff_return.set_src("U:/static/cancel_icon.png")
+# poweroff_return.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# poweroff_return_btn = lv.img(poweroff_screen)
+# poweroff_return_btn.set_size(128, 33)
+# poweroff_return_btn.set_pos(0, 95)
+# poweroff_return_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+# poweroff_return_btn.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, 0)
+# poweroff_return_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# poweroff_return.set_ext_click_area(20)
+
-poweroff_return = lv.img(poweroff_screen)
-poweroff_return.set_size(88, 23)
-poweroff_return.set_pos(24, 100)
-poweroff_return.set_src("U:/static/cancel_icon.png")
-poweroff_return.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+poweroff_screen_slider_1 = lv.slider(poweroff_screen)
+poweroff_screen_slider_1.set_pos(int(4),int(55))
+poweroff_screen_slider_1.set_size(120,40)
+poweroff_screen_slider_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.ON)
+poweroff_screen_slider_1.set_range(0, 100)
+poweroff_screen_slider_1.set_value(10, False)
+poweroff_screen_slider_1.add_flag(lv.obj.FLAG.ADV_HITTEST)
-poweroff_return_btn = lv.img(poweroff_screen)
-poweroff_return_btn.set_size(128, 33)
-poweroff_return_btn.set_pos(0, 95)
-poweroff_return_btn.add_flag(lv.obj.FLAG.CLICKABLE)
-poweroff_return_btn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+# screen_slider_1.set_mode(lv.BAR_MODE.RANGE)#LV_BAR_MODE_RANGE
+# add style for screen_slider_1
+poweroff_screen_slider_1.add_style(style_screen_slider_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+
+# add style for screen_slider_1
+poweroff_screen_slider_1.add_style(style_screen_slider_1_main_main_focused, lv.PART.MAIN|lv.STATE.FOCUSED)
+
+
+
+# add style for screen_slider_1
+poweroff_screen_slider_1.add_style(style_screen_slider_1_main_indicator_default, lv.PART.INDICATOR|lv.STATE.DEFAULT)
+
+#
+poweroff_screen_slider_1.add_style(style_screen_slider_1_main_knob_default, lv.PART.KNOB|lv.STATE.DEFAULT)
+
+
+
+poweroff_screen_slider_img_bg = lv.img(poweroff_screen)
+poweroff_screen_slider_img_bg.set_size(120,40)
+poweroff_screen_slider_img_bg.set_pos(4,55)
+poweroff_screen_slider_img_bg.set_src("U:/static/setting_poweroff_bg.png")
+poweroff_screen_slider_img_bg.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+poweroff_screen_slider_img = lv.img(poweroff_screen)
+poweroff_screen_slider_img.set_size(30,30)
+poweroff_screen_slider_img.set_pos(10,65)
+poweroff_screen_slider_img.set_src("U:/static/setting_poweroff.png")
+# screen_slider_img.add_flag(lv.obj.FLAG.CLICKABLE)
+poweroff_screen_slider_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+poweroff_power_label = lv.label(poweroff_screen)
+poweroff_power_label.set_text("滑动关机")
+poweroff_power_label.set_size(128, 20)
+poweroff_power_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+poweroff_power_label.set_pos(0,20)
+poweroff_power_label.add_style(style_font_youyuan_20, 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, 0)
-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):
def __init__(self):
super().__init__()
self.meta = poweroff_screen
- poweroff_confirm_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.confirm(e)),lv.EVENT.CLICKED, None)
- poweroff_return_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.concel(e)),lv.EVENT.CLICKED, None)
+
+ poweroff_screen_slider_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.save_choice(e)), lv.EVENT.VALUE_CHANGED, None)
+ poweroff_screen_slider_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.save_choice(e)), lv.EVENT.RELEASED, None)
+
def initialization(self):
+ poweroff_screen_slider_1.set_value(10, False)
+ poweroff_screen_slider_img.set_pos(10,60)
+ poweroff_screen_slider_1.set_style_bg_color(lv.color_make(0x00,0x00,0x00), lv.PART.INDICATOR|lv.STATE.DEFAULT)
+
+ def save_choice(self,e):
+ code = e.get_code()
+ value_slider = poweroff_screen_slider_1.get_value()
+ total_len = 0+value_slider
+ if total_len >= 100-7:
+ total_len = 100-7
+ if total_len <= 10:
+ total_len = 10
+
+ if total_len >= 100-7:
+ poweroff_screen_slider_1.set_value(100, False)
+
+ if total_len >= 20:
+ if total_len > 80:
+ poweroff_screen_slider_img.set_pos(total_len,60)
+ else:
+ poweroff_screen_slider_img.set_pos(total_len-5,60)
+ else:
+ poweroff_screen_slider_img.set_pos(total_len,60)
+ poweroff_screen_slider_1.set_style_bg_color(lv.color_make(0x80,0x80,0x80), lv.PART.INDICATOR|lv.STATE.DEFAULT)
+
+ if code == lv.EVENT.RELEASED:
+ value_slider = poweroff_screen_slider_1.get_value()
+ if total_len < 100-7:
+ poweroff_screen_slider_1.set_value(10, False)
+ poweroff_screen_slider_img.set_pos(10,60)
+ poweroff_screen_slider_1.set_style_bg_color(lv.color_make(0x00,0x00,0x00), lv.PART.INDICATOR|lv.STATE.DEFAULT)
+ else:
+ poweroff_screen_slider_1.set_value(100, False)
+ self.confirm(0)
+ pass
+
+ # print("save_choice!!!!!!",value_slider)
pass
def done_return(self):
watchface1_step_span = lv.label(Watchface1)
watchface1_step_span.set_pos(142, 159)
-watchface1_step_span.set_size(78, 30)
+watchface1_step_span.set_size(240-142, 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)
watchface2_step_txt = lv.label(Watchface2)
watchface2_step_txt.set_pos(125, 260)
-watchface2_step_txt.set_size(80, 35)
+watchface2_step_txt.set_size(240-125, 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)