d10:
authordxy15521469561 <1731678236@qq.com>
Wed, 18 Oct 2023 02:51:19 +0000 (10:51 +0800)
committerdxy15521469561 <1731678236@qq.com>
Wed, 18 Oct 2023 02:51:19 +0000 (10:51 +0800)
死机问题
K01:部分界面优化

21 files changed:
2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/btn_device_ec800m.py
2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/led.py
2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/mgr.py
2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/protocol.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/Makefile
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/alarm.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/appWechat.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/main_init.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/mgr.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/protocol.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/ui.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/ui_WatchFaceScreen.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/ui_main_menu.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/ui_setting.py
2.sdk/project/K01/usr/static/menu_calcut.png [new file with mode: 0644]
2.sdk/project/K01/usr/static/menu_restart.png [new file with mode: 0644]
2.sdk/project/K01/usr/static/setting_power_restart.png [new file with mode: 0644]
2.sdk/project/K01/usr/static/setting_poweroff.png [new file with mode: 0644]
2.sdk/project/K01/usr/static/setting_poweroff_bg.png [new file with mode: 0644]
2.sdk/project/K01/usr/static/up_show_step.png [new file with mode: 0644]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/ui_WatchFaceScreen.py

index 246bcd2..d7825f8 100644 (file)
@@ -75,12 +75,16 @@ class intervManager(Abstract):
         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()
@@ -1690,7 +1694,10 @@ class BtnDevice(Abstract):
         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)#来电强制关闭微聊语音
index cdc0a4a..1485da3 100644 (file)
@@ -123,9 +123,12 @@ class ledEventManager(Abstract):#灯事件
         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):
index 0b9a4ae..2e6101a 100644 (file)
@@ -645,7 +645,10 @@ class DeviceInfoManager(Abstract):
     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 = ""
@@ -1071,11 +1074,11 @@ class DeviceInfoManager(Abstract):
                                 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)) 
                                 
@@ -1109,11 +1112,11 @@ class DeviceInfoManager(Abstract):
                                         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)) 
                                         
@@ -1159,11 +1162,11 @@ class DeviceInfoManager(Abstract):
                             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)) 
                             
@@ -1186,11 +1189,12 @@ class DeviceInfoManager(Abstract):
                                     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
@@ -1198,11 +1202,12 @@ class DeviceInfoManager(Abstract):
                                         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
 
@@ -1214,21 +1219,25 @@ class DeviceInfoManager(Abstract):
                                                 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
@@ -1250,11 +1259,12 @@ class DeviceInfoManager(Abstract):
                                     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:")
                                 
@@ -1307,9 +1317,10 @@ class DeviceInfoManager(Abstract):
                                             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代表后台进入血氧测试
@@ -1332,10 +1343,11 @@ class DeviceInfoManager(Abstract):
                                             
                                                 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代表后台进入测试
@@ -1355,11 +1367,13 @@ class DeviceInfoManager(Abstract):
                                             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关闭测试
@@ -1368,10 +1382,11 @@ class DeviceInfoManager(Abstract):
                                             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:#单次测量
@@ -1419,11 +1434,12 @@ class DeviceInfoManager(Abstract):
                                         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开血氧
@@ -1442,11 +1458,12 @@ class DeviceInfoManager(Abstract):
                                             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代表后台进入测试
@@ -1465,22 +1482,25 @@ class DeviceInfoManager(Abstract):
                                         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:#单次测量
@@ -1532,11 +1552,11 @@ class DeviceInfoManager(Abstract):
                         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
@@ -2033,7 +2053,10 @@ class LocationManager(Abstract):
         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)
 
@@ -2044,7 +2067,10 @@ class LocationManager(Abstract):
         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)
index a500f78..a92f716 100644 (file)
@@ -146,12 +146,15 @@ class SockManager(Abstract):
             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)
@@ -207,7 +210,9 @@ class SockManager(Abstract):
             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:
index 32485e2..45b7c0d 100644 (file)
@@ -970,6 +970,7 @@ frozen_mpy_list =   $(BUILD)/_boot.mpy \
                                        $(BUILD)/main_init.mpy \
                                        $(BUILD)/calculator.mpy \
                                        $(BUILD)/versions.mpy \
+                                       $(BUILD)/websocket_test.mpy \
 
 endif
 
index b2746a8..6a0c11a 100644 (file)
@@ -402,9 +402,9 @@ label_ok.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
 #闹钟信息
 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):
index 02f7572..a1ee4d7 100644 (file)
@@ -1,13 +1,12 @@
 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
@@ -15,6 +14,19 @@ import _thread
 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")
@@ -138,7 +150,444 @@ wechat_press_label_countdown.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
 # 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={}&timestamp={}".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={}&timestamp={}".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"
@@ -434,7 +883,7 @@ class WechatScreen(Screen):
             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
@@ -604,7 +1053,7 @@ class WechatScreen(Screen):
         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")
 
@@ -803,8 +1252,8 @@ class TK_ProtoCol(ProtoCol):
                 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
index b61b15a..f8461e7 100644 (file)
@@ -90,8 +90,9 @@ def main_init():
     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
@@ -154,6 +155,8 @@ def main_init():
     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())  
index 292abe3..f499dce 100644 (file)
@@ -601,14 +601,14 @@ def voice_callback(args):
             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')
@@ -891,7 +891,8 @@ class DeviceInfoManager(Abstract):
             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"})
         
         
         """"隔天清步数"""
@@ -958,7 +959,8 @@ class DeviceInfoManager(Abstract):
                 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
         
index 83716e6..4dce1e7 100644 (file)
@@ -632,7 +632,10 @@ class POWEROFF_ProtoCol(ProtoCol):
         """
         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):
     """电话本同步"""
index a6d5882..807e631 100644 (file)
@@ -87,6 +87,16 @@ style_font_youyuan_20_black.set_text_color(lv.color_make(0x00, 0x00, 0x00))
 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()
@@ -255,6 +265,8 @@ class Screen(Abstract):
     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}]
@@ -1052,14 +1064,21 @@ class DialingScreen(Screen):
         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"})  
@@ -1301,7 +1320,7 @@ class NoSimPowerScreen(Screen):#
             # 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)
@@ -1531,7 +1550,9 @@ class DialingNoPlayPopupScreen(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()
@@ -2842,6 +2863,29 @@ class ToolboxScreen(Screen):
             # 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)
@@ -2850,6 +2894,8 @@ class ToolboxScreen(Screen):
             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)
@@ -2864,6 +2910,7 @@ class ToolboxScreen(Screen):
             # 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)
@@ -3126,6 +3173,13 @@ class IncomingCallScreen(Screen):
         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):
@@ -3773,6 +3827,13 @@ class OnCallScreen(Screen):
         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()
@@ -4050,6 +4111,7 @@ class ContactsScreen(Screen):
         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")
@@ -4059,6 +4121,7 @@ class ContactsScreen(Screen):
             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()
@@ -4099,6 +4162,7 @@ class ContactsScreen(Screen):
                 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)
                 
@@ -4195,12 +4259,23 @@ class ContactsScreen(Screen):
 
     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
@@ -6929,7 +7004,7 @@ class NoSimAutoScreen(Screen):#无sim卡是否关机
             # 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)
@@ -7143,6 +7218,340 @@ class classMgrPopupScreen(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
index 1465054..753f19f 100644 (file)
@@ -4,7 +4,7 @@ import lvgl as lv
 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
@@ -22,10 +22,7 @@ watchface_style_default.set_text_color(lv.color_make(0xff, 0xff, 0xff))
 #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")
@@ -96,10 +93,7 @@ watchface1_res_stat_battery_line.add_style(power_line_red,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_70_black.set_text_font(lv.font_70_bold)
 #init3:(2106, 2, 7, 6, 29, 38, 6, 38)
 data = RTC().datetime()
@@ -140,7 +134,7 @@ watchface1_time1_text.add_style(style_font_youyuan_70_black, lv.PART.MAIN|lv.STA
 #日期
 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)
@@ -279,7 +273,7 @@ class WatchFace1():
         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)
index 7c02406..03e7b03 100644 (file)
@@ -463,13 +463,13 @@ class MainMenuScreen(Screen):
     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
index 9d0570b..f55e29e 100644 (file)
@@ -3,7 +3,7 @@ import lvgl as lv
 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
@@ -299,7 +299,7 @@ setting_restart_img = lv.img(setting_cont)
 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)
 
 
@@ -1055,43 +1055,184 @@ restart_screen = lv.obj()
 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()
 
@@ -1170,54 +1311,104 @@ 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(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):
@@ -1226,10 +1417,49 @@ 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):
diff --git a/2.sdk/project/K01/usr/static/menu_calcut.png b/2.sdk/project/K01/usr/static/menu_calcut.png
new file mode 100644 (file)
index 0000000..dc80594
Binary files /dev/null and b/2.sdk/project/K01/usr/static/menu_calcut.png differ
diff --git a/2.sdk/project/K01/usr/static/menu_restart.png b/2.sdk/project/K01/usr/static/menu_restart.png
new file mode 100644 (file)
index 0000000..6476806
Binary files /dev/null and b/2.sdk/project/K01/usr/static/menu_restart.png differ
diff --git a/2.sdk/project/K01/usr/static/setting_power_restart.png b/2.sdk/project/K01/usr/static/setting_power_restart.png
new file mode 100644 (file)
index 0000000..8b63239
Binary files /dev/null and b/2.sdk/project/K01/usr/static/setting_power_restart.png differ
diff --git a/2.sdk/project/K01/usr/static/setting_poweroff.png b/2.sdk/project/K01/usr/static/setting_poweroff.png
new file mode 100644 (file)
index 0000000..c1e6161
Binary files /dev/null and b/2.sdk/project/K01/usr/static/setting_poweroff.png differ
diff --git a/2.sdk/project/K01/usr/static/setting_poweroff_bg.png b/2.sdk/project/K01/usr/static/setting_poweroff_bg.png
new file mode 100644 (file)
index 0000000..6593ff2
Binary files /dev/null and b/2.sdk/project/K01/usr/static/setting_poweroff_bg.png differ
diff --git a/2.sdk/project/K01/usr/static/up_show_step.png b/2.sdk/project/K01/usr/static/up_show_step.png
new file mode 100644 (file)
index 0000000..1f4f6a3
Binary files /dev/null and b/2.sdk/project/K01/usr/static/up_show_step.png differ
index c9418ef..7d7d0dd 100644 (file)
@@ -158,7 +158,7 @@ watchface1_week_span.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFA
 
 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)
@@ -444,7 +444,7 @@ watchface2_step_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE
 
 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)