C06S:
authordxy15521469561 <1731678236@qq.com>
Sat, 23 Dec 2023 10:09:25 +0000 (18:09 +0800)
committerdxy15521469561 <1731678236@qq.com>
Sat, 23 Dec 2023 10:09:25 +0000 (18:09 +0800)
bug优化
D10:
优化
K5:
bug优化

21 files changed:
2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/appWechat.py
2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/main_init.py
2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/mgr.py
2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/protocol.py
2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui.py
2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_setting.py
2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/btn_device_ec800m.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/protocol.py
2.sdk/project/K5/font/ext_font.bin
2.sdk/project/K5/new.bat
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/alarm.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/appFactoryMode.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/appWechat.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/constants.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/main_init.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/mgr.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/protocol.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/ui.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/ui_setting.py

index a81ca62..3d4c3d0 100644 (file)
@@ -656,324 +656,3 @@ class NewWechatPopupScreen(Screen):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
 
 
-class TKS_ProtoCol(ProtoCol):
-    """微聊"""
-    TYPE = "TKS"
-    
-
-    def send(self, event, msg):
-        if len(str(msg)) == 1:
-            len_size = len(str(msg))+len("TKS,")
-            #  实例:[XT*334588000000156*0009*TK,1]
-            send_data = self.PID+"*%s*%04X*TKS"%(self.imei,len_size)
-            MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,len_size,"TKS")
-            MD5_SIGN = self.pack_MD5_head(MD5_head_data)
-            data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
-            print("TKS:data:%s"%(data))
-            # 通过socket发送到服务器端
-            EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
-
-        else:
-            # [SZKW*YYYYYYYYYYYYYYY*LEN*TK,AMR 格式音频数据]
-            #[XT*YYYYYYYYYYYYYYY*LEN*TKS,秒数(十进制),AMR 格式音频数据]
-            arm_data = msg[1]
-            arm_sec = msg[0]
-            # print("TK_ProtoCol:msgtype:{} arm_sec:{}".format(len(msg[1]),arm_sec))
-
-            arm = bytearray()
-            for i in range(len(arm_data)):
-                if arm_data[i] == 0x7d:
-                    arm.extend(b'\x7d\x01')
-                elif arm_data[i] == 0x5b :
-                    arm.extend(b'\x7d\x02')
-                elif arm_data[i] == 0x5d :
-                    arm.extend(b'\x7d\x03')
-                elif arm_data[i] == 0x2c :
-                    arm.extend(b'\x7d\x04')
-                elif arm_data[i] == 0x2a :
-                    arm.extend(b'\x7d\x05')
-                else :
-                    arm.append(arm_data[i])
-                
-            datalen = len(arm) + len(str("TKS,"))+len(str(arm_sec))+1
-            #Wechat_log("len(str(arm_sec)):{}".format(len(str(arm_sec))+1))
-            send_data = bytearray("SZKW*%s*%04X*TKS,%d,"%(self.imei,datalen,arm_sec))
-            send_data.extend(arm)
-            MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,datalen,"TKS")
-            MD5_SIGN = self.pack_MD5_head(MD5_head_data)
-            data = bytearray('[')
-            data.extend(MD5_SIGN)
-            data.extend(send_data)
-            data.extend(']')
-            # print("TK:send data:%s MD5_head_data:%s"%(data,MD5_head_data))
-            EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
-
-
-    def recv(self, event, msg):
-        """
-
-        ("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
-        @param event: 微聊
-        @param msg: 接收到的下行数据
-        [SZKW*860132060004322*20BD*TK,#!AMR...]
-        """
-        #Wechat_log("K_ProtoCol:recv:data:{}".format(msg))
-        # print("TK recv:{}".format(msg))
-        msg_tmp = msg.decode('ascii')
-        str = msg_tmp.split('TKS,')
-        # Wechat_log("TK_ProtoCol:recv:len:{} {} {}".format(len(msg),len(str),msg_tmp.find("#!AMR")))
-        if  msg_tmp.find("#!AMR") != -1: #是否是服务器下发音频数据
-            # Wechat_log("TK_ProtoCol:recv:datalen{}".format(len(msg)))
-            arm_data = bytearray(str[1])#获取amr输出
-            get_wechat_data = EventMesh.publish("get_wechat_data")
-            
-            MXA_MSG = get_wechat_data[0]
-            wechat_recode_list = get_wechat_data[1]
-            wechat_num = wechat_recode_list["num"]
-            # Wechat_log("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
-            
-            if wechat_num >= MXA_MSG:
-                wechat_num = 0 
-            if wechat_num == 0:
-                wechat_num += 1 
-            elif wechat_num > 0:
-                wechat_num += 1 
-          
-
-            Wechat_log("num_total:datalen:{} {}".format(MXA_MSG,wechat_recode_list))
-            wechat_recode_list["%02d"%(wechat_num)] = "R:{}".format(3)
-            wechat_recode_list['num'] = wechat_num
-            EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
-            #写语音文件数据
-            screen_NAME = EventMesh.publish("get_screen_NAME")
-            get_lcd_state = EventMesh.publish("get_lcd_state")
-            if screen_NAME != "wechat" or get_lcd_state == 0:
-                EventMesh.publish("load_screen", {"screen": "wechat_popup"})
-            else:
-                EventMesh.publish("wechat_updata_list_show")
-            # path = "/ext/static/storage_file/audio_amr/amr/{}.amr".format(wechat_num)
-            path = "/ext/static/storage_file/{}.amr".format(wechat_num)
-            with open(path,"w") as fd:
-                arm = bytearray()
-                j = 0
-                for i in range(len(arm_data)):
-                    if arm_data[j] == 0x7d and arm_data[j+1] == 0x01:
-                        arm.extend(b'\x7d')
-                        j+=1
-                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x02:
-                        arm.extend(b'\x5b')
-                        j+=1
-                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x03:
-                        arm.extend(b'\x5d')
-                        j+=1
-                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x04:
-                        arm.extend(b'\x2c')
-                        j+=1
-                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x05:
-                        arm.extend(b'\x2a')
-                        j+=1
-                    else :
-                        arm.append(arm_data[j])
-                    j+=1
-                    if j >= len(arm_data):
-                        break
-                fd.write(arm)
-            EventMesh.publish(constants.PROTOCOL.TKS_SEND,1)
-
-            
-            
-
-
-class TK_ProtoCol(ProtoCol):
-    """微聊"""
-    TYPE = "TK"
-    
-
-    def send(self, event, msg):
-        # print("TK send:{}".format(msg))
-        if len(str(msg)) == 1:
-
-            len_size = len(str(msg))+len("TK,")
-            #  实例:[XT*334588000000156*0009*TK,1]
-            send_data = self.PID+"*%s*%04X*TK"%(self.imei,len_size)
-            MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,len_size,"TK")
-            MD5_SIGN = self.pack_MD5_head(MD5_head_data)
-            data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
-            print("TK:data:%s"%(data))
-            # 通过socket发送到服务器端
-            EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
-
-        else:
-            # [SZKW*YYYYYYYYYYYYYYY*LEN*TK,AMR 格式音频数据]
-            #[XT*YYYYYYYYYYYYYYY*LEN*TKS,秒数(十进制),AMR 格式音频数据]
-            arm_data = msg[1]
-            arm_sec = msg[0]
-            # print("TK_ProtoCol:msgtype:{} arm_sec:{}".format(len(msg[1]),arm_sec))
-
-            arm = bytearray()
-            for i in range(len(arm_data)):
-                if arm_data[i] == 0x7d:
-                    arm.extend(b'\x7d\x01')
-                elif arm_data[i] == 0x5b :
-                    arm.extend(b'\x7d\x02')
-                elif arm_data[i] == 0x5d :
-                    arm.extend(b'\x7d\x03')
-                elif arm_data[i] == 0x2c :
-                    arm.extend(b'\x7d\x04')
-                elif arm_data[i] == 0x2a :
-                    arm.extend(b'\x7d\x05')
-                else :
-                    arm.append(arm_data[i])
-                
-            datalen = len(arm) +len(str("TK,"))+len(str(arm_sec))+1
-            #Wechat_log("len(str(arm_sec)):{}".format(len(str(arm_sec))+1))
-            send_data = bytearray("SZKW*%s*%04X*TK,%d,"%(self.imei,datalen,arm_sec))
-            send_data.extend(arm)
-            MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,datalen,"TK")
-            MD5_SIGN = self.pack_MD5_head(MD5_head_data)
-            data = bytearray('[')
-            data.extend(MD5_SIGN)
-            data.extend(send_data)
-            data.extend(']')
-            # print("TK:send data:%s MD5_head_data:%s"%(data,MD5_head_data))
-            EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
-
-
-    def recv(self, event, msg):
-        """
-
-        ("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
-        @param event: 微聊
-        @param msg: 接收到的下行数据
-        [SZKW*860132060004322*20BD*TK,#!AMR...]
-        """
-        #Wechat_log("K_ProtoCol:recv:data:{}".format(msg))
-        # print("TK recv:{}".format(msg))
-        msg_tmp = msg.decode('ascii')
-        str = msg_tmp.split('TK,')
-        # Wechat_log("TK_ProtoCol:recv:len:{} {} {}".format(len(msg),len(str),msg_tmp.find("#!AMR")))
-        if  msg_tmp.find("#!AMR") != -1: #是否是服务器下发音频数据
-            # Wechat_log("TK_ProtoCol:recv:datalen{}".format(len(msg)))
-            arm_data = bytearray(str[1])#获取amr输出
-            get_wechat_data = EventMesh.publish("get_wechat_data")
-            
-            MXA_MSG = get_wechat_data[0]
-            wechat_recode_list = get_wechat_data[1]
-            wechat_num = wechat_recode_list["num"]
-            # Wechat_log("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
-            
-            if wechat_num >= MXA_MSG:
-                wechat_num = 0 
-            if wechat_num == 0:
-                wechat_num += 1 
-            elif wechat_num > 0:
-                wechat_num += 1 
-          
-
-            Wechat_log("num_total:datalen:{} {}".format(MXA_MSG,wechat_recode_list))
-            wechat_recode_list["%02d"%(wechat_num)] = "R:{}".format(3)
-            wechat_recode_list['num'] = wechat_num
-            EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
-            #写语音文件数据
-            screen_NAME = EventMesh.publish("get_screen_NAME")
-            get_lcd_state = EventMesh.publish("get_lcd_state")
-            if screen_NAME != "wechat" or get_lcd_state == 0:
-                EventMesh.publish("load_screen", {"screen": "wechat_popup"})
-            else:
-                EventMesh.publish("wechat_updata_list_show")
-            # path = "/ext/static/storage_file/audio_amr/amr/{}.amr".format(wechat_num)
-            path = "/ext/static/storage_file/{}.amr".format(wechat_num)
-            with open(path,"w") as fd:
-                arm = bytearray()
-                j = 0
-                for i in range(len(arm_data)):
-                    if arm_data[j] == 0x7d and arm_data[j+1] == 0x01:
-                        arm.extend(b'\x7d')
-                        j+=1
-                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x02:
-                        arm.extend(b'\x5b')
-                        j+=1
-                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x03:
-                        arm.extend(b'\x5d')
-                        j+=1
-                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x04:
-                        arm.extend(b'\x2c')
-                        j+=1
-                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x05:
-                        arm.extend(b'\x2a')
-                        j+=1
-                    else :
-                        arm.append(arm_data[j])
-                    j+=1
-                    if j >= len(arm_data):
-                        break
-                fd.write(arm)
-            EventMesh.publish(constants.PROTOCOL.TK_SEND,1)
-
-            
-            
-            
-
-class MESSAGE_ProtoCol(ProtoCol):
-    """微聊"""
-    TYPE = "MESSAGE"
-    
-
-    def send(self, event, msg):
-       
-        #[XT*334588000000156*0007*MESSAGE]
-        send_data = "SZKW*%s*0007*MESSAGE"%(self.imei)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        #Wechat_log("POWEROFF_ProtoCol:send:%s"%(data))
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
-
-    def recv(self, event, msg):
-        """
-
-        @param event: 微聊文字
-        @param msg: 接收到的下行数据
-        """
-        msg = msg[1:-1]
-
-        msg_s = msg.decode('ascii')
-        msg_s = msg_s.split(',')
-        msg_s = msg_s[1]
-        # Wechat_log("msg_tmp:len:{}\r\n data:{}".format(len(msg_s),msg_s))
-        
-
-        get_wechat_data = EventMesh.publish("get_wechat_data")
-        
-        MXA_MSG = get_wechat_data[0]
-        wechat_recode_list = get_wechat_data[1]
-        wechat_num = wechat_recode_list["num"]
-        # Wechat_log("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
-        
-        if wechat_num >= MXA_MSG:
-            wechat_num = 0 
-        if wechat_num == 0:
-            wechat_num += 1 
-        elif wechat_num > 0:
-            wechat_num += 1 
-        msg_txt = {}
-        # 0 1 2 3
-        Wechat_log("wechat_num:init {}".format(wechat_num))
-        msg_txt = UnicodeHexStr_To_Utf8Str(msg_s)
-        # Wechat_log("msg_txt:{}".format(msg_txt))
-        wechat_recode_list["%02d"%(wechat_num)] = "T:{}".format(msg_txt)
-        wechat_recode_list['num'] = wechat_num
-        EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
-        # Wechat_log("wechat_recode_list:len data:{}".format(wechat_recode_list))
-        EventMesh.publish(constants.PROTOCOL.MESSAGE_SEND)
-        screen_NAME = EventMesh.publish("get_screen_NAME")
-        get_lcd_state = EventMesh.publish("get_lcd_state")
-        if screen_NAME != "wechat" or get_lcd_state == 0:
-            EventMesh.publish("load_screen", {"screen": "wechat_popup"})
-        else:
-            EventMesh.publish("wechat_updata_list_show")
-            
-
-
-
-    
index d4eda3e..ce3b261 100644 (file)
@@ -70,7 +70,7 @@ def main_init():
     from mgr import schoolclassManager,setCallStateManager,setclassTimeManager,setSmsIndexManager,ConfigStoreManager,testSmsSetIPManager,playPowerAudioManager,sosInfoCallManager,getBootOffManager,getSosFlagManager,CountdownManager, LocationManager, getVolumSizeManager,gethistoryDataManager,getUpLoadDataManager, getplayAudiodStateManager,\
     AddrBookManager,MsgdetailManager,PhoneCallingManager,getOldTimeManager,getStorageDataManager,getBrightnessManager,getHrTimeManager,getTempTimeManager,getLowBatManager
     from motor import motorEventManager
-    from appWechat import WechatScreen,TKS_ProtoCol,TK_ProtoCol,MESSAGE_ProtoCol,NewWechatPopupScreen
+    from appWechat import WechatScreen,NewWechatPopupScreen
 
     # from protocol import REMOVE_ProtoCol,HELP_ProtoCol,FALLDOWN_ProtoCol,AL_ProtoCol,bldstart_ProtoCol,blood_ProtoCol,SCREEN_SHOWProtoCol,btemp2_ProtoCol,bodytemp2_ProtoCol,TEMP_Hour_ProtoCol,SILENCETIMEFS_ProtoCol,KEYBRD_ProtoCol,SILENCETIME2_ProtoCol,WLKEY_ProtoCol,LK_ProtoCol,PING_ProtoCol,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,HRSTART_ProtoCol,CENTER_ProtoCol,UPLOAD_ProtoCol,\
     #         TEMP_ProtoCol,DLT_ProtoCol,WT_ProtoCol,UD_ProtoCol,REMIND_ProtoCol, CR_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,Time_ProtoCol,\
@@ -319,9 +319,9 @@ def main_init():
         pcr.add_support(protocol.bodytemp2_ProtoCol())
         pcr.add_support(protocol.btemp2_ProtoCol())
         pcr.add_support(protocol.SCREEN_SHOWProtoCol())
-        pcr.add_support(TKS_ProtoCol())
-        pcr.add_support(TK_ProtoCol())
-        pcr.add_support(MESSAGE_ProtoCol())
+        pcr.add_support(protocol.TKS_ProtoCol())
+        pcr.add_support(protocol.TK_ProtoCol())
+        pcr.add_support(protocol.MESSAGE_ProtoCol())
 
         pcr.add_support(protocol.blood_ProtoCol())
         pcr.add_support(protocol.bldstart_ProtoCol())
index 7456f41..5a53e10 100644 (file)
@@ -492,9 +492,11 @@ class sosInfoCallManager(Abstract):
     def set_sos_info_call(self, event, msg):
         hangup_mode = EventMesh.publish("get_hangup_mode")
         if hangup_mode == 1:
+
             EventMesh.publish("set_sos_flag",0)
             EventMesh.publish("set_sos_num",0)
             EventMesh.publish("set_hangup_mode",0)
+
         print('hangup_mode disconnect',hangup_mode)
         sos_flag = EventMesh.publish("get_sos_flag")
         print('voicecall sos_flag',sos_flag)
@@ -540,25 +542,31 @@ class sosInfoCallManager(Abstract):
                     # print("number:{} number_len :{}".format(number,len(number)))
                         EventMesh.publish("set_sos_num",num)
                         if len(number) == 1:
-                            EventMesh.publish("set_callnumer_cb",number[0])
-                            print("phone 1")
+                            if len(number[0]) != 0:
+                                EventMesh.publish("set_callnumer_cb",number[0])
+                                print("phone 1")
                         elif len(number) == 2:
                             if num == 1 or num == 3:
                                 print("phone 2")
-                                EventMesh.publish("set_callnumer_cb",number[1])
+                                if len(number[1]) != 0:
+                                    EventMesh.publish("set_callnumer_cb",number[1])
                             elif num == 2:
                                 print("phone 3")
-                                EventMesh.publish("set_callnumer_cb",number[0])
+                                if len(number[0]) != 0:
+                                    EventMesh.publish("set_callnumer_cb",number[0])
                         elif len(number) == 3:
                             if num == 1 or num == 4:
-                                EventMesh.publish("set_callnumer_cb",number[1])
+                                if len(number[1]) != 0:
+                                    EventMesh.publish("set_callnumer_cb",number[1])
                                 print("phone 4")
                             elif num == 2 or num == 5:
                                 print("phone 5")
-                                EventMesh.publish("set_callnumer_cb",number[2])
+                                if len(number[2]) != 0:
+                                    EventMesh.publish("set_callnumer_cb",number[2])
                             elif num == 3:
-                                print("phone 6")
-                                EventMesh.publish("set_callnumer_cb",number[0])   
+                                if len(number[0]) != 0:
+                                    print("phone 6")
+                                    EventMesh.publish("set_callnumer_cb",number[0])   
 
 WL_timer = osTimer()   
 def WL_timer_cb(*args):   
@@ -612,7 +620,9 @@ def voice_callback(args):
         sos_flag = EventMesh.publish("get_sos_flag")
         if sos_flag == 1:
             sos_flag = 0
+            EventMesh.publish("close_sos_timer")
             EventMesh.publish("set_sos_flag",0)
+            EventMesh.publish("set_sos_num",0)
 
         print('voicecall connected, PhoneNO.: ', args[6])
         size_len = len(str(args[6]))
@@ -3281,6 +3291,10 @@ class getSosFlagManager(Abstract):#设置sos
         EventMesh.subscribe("set_hangup_mode", self.set_hangup_mode)
         EventMesh.subscribe("get_hangup_mode", self.get_hangup_mode)#获取挂断方式 是对方挂断 还是手表按键主动挂断
 
+        EventMesh.subscribe("send_sos_to_app",self.send_sos_to_app)
+
+        EventMesh.subscribe("close_sos_timer",self.close_sos_timer)
+
     def get_hangup_mode(self, event, msg): # 1是设备端手表主动挂断 0是手机端
         return self.hangup_mode
     
@@ -3308,22 +3322,31 @@ class getSosFlagManager(Abstract):#设置sos
                     #voiceCall.callStart(str(number[0]))
 
     def set_callnumer_cb(self, event, msg):
-
-        self.callnumer = msg
-        self.call_timer.start(8000, 0, self.call_timer_cb)#延迟8S 继续拨打
+        if self.sos_flag == 1:
+            print("sos set_callnumer_cb!!!")
+            self.callnumer = msg
+            self.call_timer.start(8000, 0, self.call_timer_cb)#延迟8S 继续拨打
+
+    def send_sos_to_app(self,event,msg):
+        sos_state =  EventMesh.publish("get_dev_state")
+        tmp = 1 << 16
+        sos_state = sos_state|tmp #第16位=1
+        EventMesh.publish("set_dev_state",sos_state)
+        EventMesh.publish(constants.EVENT.START_LOCATION,[constants.PROTOCOL.AL_SEND,sos_state]) #开始AL定位
+        pass
 
     def call_timer_cb(self, *args, **kwargs):
-        if self.sos_flag == 1:
-            sos_state =  EventMesh.publish("get_dev_state")
-            tmp = 1 << 16
-            sos_state = sos_state|tmp #第16位=1
-            EventMesh.publish("set_dev_state",sos_state)
-
-            EventMesh.publish(constants.EVENT.START_LOCATION,[constants.PROTOCOL.AL_SEND,sos_state]) #开始AL定位
-            # print("call_timer_cb:{}".format(self.callnumer))
-            EventMesh.publish("save_phonename",str(self.callnumer))
-            EventMesh.publish("save_phonenum",str(self.callnumer))
-            EventMesh.publish("load_screen", {"screen": "dialing_noplay_popup"})  
+        print("sos call_timer_cb!!!",self.sos_flag)
+        EventMesh.publish("save_phonename",str(self.callnumer))
+        EventMesh.publish("save_phonenum",str(self.callnumer))
+        EventMesh.publish("send_sos_to_app")
+        print("sos call_timer_cb!!!")
+        EventMesh.publish("load_screen", {"screen": "dialing_noplay_popup"})  
+    
+    def close_sos_timer(self,event,msg):
+        self.call_timer.stop()
+        pass
+
 
     def get_sos_flag(self, event, msg): 
         return self.sos_flag
index 259ddf5..266a629 100644 (file)
@@ -344,7 +344,8 @@ class ProtoCol(Abstract):
     END = ";" + chr(0x01)
     #PID = "SZKW"
     #PID = "qAELPTKmFanR4RHe"
-
+    PID = ''
+    md5_key = ''
     def __init__(self):
         self.content = None
         self.check_sum = None
@@ -1415,18 +1416,22 @@ class sosHome_dial_ProtoCol(ProtoCol):
         # print("sosHome_dial_ProtoCol:send data :{} {}".format(len(msg_tmp),msg_tmp))
         #b'[SZKW*860132060006970*0015*sosHome_dial_ProtoCol,15521469561,10086,15521469561]'
         i = 0
-        for i in range(len(msg_tmp)-1):
-            # print("sos:send data :{}".format(msg_tmp[i+1]))
+        num = 0
+        count = 0
+        print("sos msg_tmp",msg_tmp)
+        if len(msg_tmp) > 4:
+            num = 3
+        else:
+            num = len(msg_tmp)-1
+        data = []
+        for i in range(num):
+            print("sos:send data :{}".format(msg_tmp[i+1]))
             if len(msg_tmp[i+1]) != 0:
                 EventMesh.publish("set_storage_config",["SOS_NUMBER{}".format(i+1),msg_tmp[i+1]])
-                # print("read_data:{} msg_tmp:{}".format(read_data,msg_tmp[i+1]))
-       
-        if (len(msg_tmp)-1) == 3:
-            EventMesh.publish("set_dial_sos_number",[msg_tmp[1],msg_tmp[2],msg_tmp[3]])
-        elif (len(msg_tmp)-1) == 2:
-            EventMesh.publish("set_dial_sos_number",[msg_tmp[1],msg_tmp[2]])
-        elif (len(msg_tmp)-1) == 1:
-            EventMesh.publish("set_dial_sos_number",[msg_tmp[1]])
+                data.append(str(msg_tmp[i+1]))
+                count+=1
+        print("data:{}".format(data))
+        EventMesh.publish("set_dial_sos_number",data)
              
         EventMesh.publish(constants.PROTOCOL.SOS_SEND)  
 
@@ -2022,6 +2027,327 @@ class FACTORY_ProtoCol(ProtoCol):#睡眠时间
 
 
 
+class TKS_ProtoCol(ProtoCol):
+    """微聊"""
+    TYPE = "TKS"
+    
+
+    def send(self, event, msg):
+        if len(str(msg)) == 1:
+            len_size = len(str(msg))+len("TKS,")
+            #  实例:[XT*334588000000156*0009*TK,1]
+            send_data = self.PID+"*%s*%04X*TKS"%(self.imei,len_size)
+            MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,len_size,"TKS")
+            MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+            data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
+            print("TKS:data:%s"%(data))
+            # 通过socket发送到服务器端
+            EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+        else:
+            # [SZKW*YYYYYYYYYYYYYYY*LEN*TK,AMR 格式音频数据]
+            #[XT*YYYYYYYYYYYYYYY*LEN*TKS,秒数(十进制),AMR 格式音频数据]
+            arm_data = msg[1]
+            arm_sec = msg[0]
+            # print("TK_ProtoCol:msgtype:{} arm_sec:{}".format(len(msg[1]),arm_sec))
+
+            arm = bytearray()
+            for i in range(len(arm_data)):
+                if arm_data[i] == 0x7d:
+                    arm.extend(b'\x7d\x01')
+                elif arm_data[i] == 0x5b :
+                    arm.extend(b'\x7d\x02')
+                elif arm_data[i] == 0x5d :
+                    arm.extend(b'\x7d\x03')
+                elif arm_data[i] == 0x2c :
+                    arm.extend(b'\x7d\x04')
+                elif arm_data[i] == 0x2a :
+                    arm.extend(b'\x7d\x05')
+                else :
+                    arm.append(arm_data[i])
+                
+            datalen = len(arm) + len(str("TKS,"))+len(str(arm_sec))+1
+            #Wechat_log("len(str(arm_sec)):{}".format(len(str(arm_sec))+1))
+            send_data = bytearray(self.PID+"*%s*%04X*TKS,%d,"%(self.imei,datalen,arm_sec))
+            send_data.extend(arm)
+            MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,datalen,"TKS")
+            MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+            data = bytearray('[')
+            data.extend(MD5_SIGN)
+            data.extend(send_data)
+            data.extend(']')
+            # print("TK:send data:%s MD5_head_data:%s"%(data,MD5_head_data))
+            EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+
+    def recv(self, event, msg):
+        """
+
+        ("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
+        @param event: 微聊
+        @param msg: 接收到的下行数据
+        [SZKW*860132060004322*20BD*TK,#!AMR...]
+        """
+        #Wechat_log("K_ProtoCol:recv:data:{}".format(msg))
+        # print("TK recv:{}".format(msg))
+        msg_tmp = msg.decode('ascii')
+        str = msg_tmp.split('TKS,')
+        # Wechat_log("TK_ProtoCol:recv:len:{} {} {}".format(len(msg),len(str),msg_tmp.find("#!AMR")))
+        if  msg_tmp.find("#!AMR") != -1: #是否是服务器下发音频数据
+            # Wechat_log("TK_ProtoCol:recv:datalen{}".format(len(msg)))
+            arm_data = bytearray(str[1])#获取amr输出
+            get_wechat_data = EventMesh.publish("get_wechat_data")
+            
+            MXA_MSG = get_wechat_data[0]
+            wechat_recode_list = get_wechat_data[1]
+            wechat_num = wechat_recode_list["num"]
+            # Wechat_log("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
+            
+            if wechat_num >= MXA_MSG:
+                wechat_num = 0 
+            if wechat_num == 0:
+                wechat_num += 1 
+            elif wechat_num > 0:
+                wechat_num += 1 
+          
+
+            print("num_total:datalen:{} {}".format(MXA_MSG,wechat_recode_list))
+            wechat_recode_list["%02d"%(wechat_num)] = "R:{}".format(3)
+            wechat_recode_list['num'] = wechat_num
+            EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
+            #写语音文件数据
+            screen_NAME = EventMesh.publish("get_screen_NAME")
+            get_lcd_state = EventMesh.publish("get_lcd_state")
+            if screen_NAME != "wechat" or get_lcd_state == 0:
+                EventMesh.publish("load_screen", {"screen": "wechat_popup"})
+            else:
+                EventMesh.publish("wechat_updata_list_show")
+            # path = "/ext/static/storage_file/audio_amr/amr/{}.amr".format(wechat_num)
+            path = "/ext/static/storage_file/{}.amr".format(wechat_num)
+            with open(path,"w") as fd:
+                arm = bytearray()
+                j = 0
+                for i in range(len(arm_data)):
+                    if arm_data[j] == 0x7d and arm_data[j+1] == 0x01:
+                        arm.extend(b'\x7d')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x02:
+                        arm.extend(b'\x5b')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x03:
+                        arm.extend(b'\x5d')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x04:
+                        arm.extend(b'\x2c')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x05:
+                        arm.extend(b'\x2a')
+                        j+=1
+                    else :
+                        arm.append(arm_data[j])
+                    j+=1
+                    if j >= len(arm_data):
+                        break
+                fd.write(arm)
+            EventMesh.publish(constants.PROTOCOL.TKS_SEND,1)
+
+            
+            
+
+
+class TK_ProtoCol(ProtoCol):
+    """微聊"""
+    TYPE = "TK"
+    
+
+    def send(self, event, msg):
+        # print("TK send:{}".format(msg))
+        if len(str(msg)) == 1:
+
+            len_size = len(str(msg))+len("TK,")
+            #  实例:[XT*334588000000156*0009*TK,1]
+            send_data = self.PID+"*%s*%04X*TK"%(self.imei,len_size)
+            MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,len_size,"TK")
+            MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+            data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
+            print("TK:data:%s"%(data))
+            # 通过socket发送到服务器端
+            EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+        else:
+            # [SZKW*YYYYYYYYYYYYYYY*LEN*TK,AMR 格式音频数据]
+            #[XT*YYYYYYYYYYYYYYY*LEN*TKS,秒数(十进制),AMR 格式音频数据]
+            arm_data = msg[1]
+            arm_sec = msg[0]
+            # print("TK_ProtoCol:msgtype:{} arm_sec:{}".format(len(msg[1]),arm_sec))
+
+            arm = bytearray()
+            for i in range(len(arm_data)):
+                if arm_data[i] == 0x7d:
+                    arm.extend(b'\x7d\x01')
+                elif arm_data[i] == 0x5b :
+                    arm.extend(b'\x7d\x02')
+                elif arm_data[i] == 0x5d :
+                    arm.extend(b'\x7d\x03')
+                elif arm_data[i] == 0x2c :
+                    arm.extend(b'\x7d\x04')
+                elif arm_data[i] == 0x2a :
+                    arm.extend(b'\x7d\x05')
+                else :
+                    arm.append(arm_data[i])
+                
+            datalen = len(arm) +len(str("TK,"))+len(str(arm_sec))+1
+            #Wechat_log("len(str(arm_sec)):{}".format(len(str(arm_sec))+1))
+            send_data = bytearray(self.PID+"*%s*%04X*TK,"%(self.imei,datalen))
+            send_data.extend(arm)
+            MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,datalen,"TK")
+            MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+            data = bytearray('[')
+            data.extend(MD5_SIGN)
+            data.extend(send_data)
+            data.extend(']')
+            # print("TK:send data:%s MD5_head_data:%s"%(data,MD5_head_data))
+            EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+
+    def recv(self, event, msg):
+        """
+
+        ("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
+        @param event: 微聊
+        @param msg: 接收到的下行数据
+        [SZKW*860132060004322*20BD*TK,#!AMR...]
+        """
+        #Wechat_log("K_ProtoCol:recv:data:{}".format(msg))
+        # print("TK recv:{}".format(msg))
+        msg_tmp = msg.decode('ascii')
+        str = msg_tmp.split('TK,')
+        # Wechat_log("TK_ProtoCol:recv:len:{} {} {}".format(len(msg),len(str),msg_tmp.find("#!AMR")))
+        if  msg_tmp.find("#!AMR") != -1: #是否是服务器下发音频数据
+            # Wechat_log("TK_ProtoCol:recv:datalen{}".format(len(msg)))
+            arm_data = bytearray(str[1])#获取amr输出
+            get_wechat_data = EventMesh.publish("get_wechat_data")
+            
+            MXA_MSG = get_wechat_data[0]
+            wechat_recode_list = get_wechat_data[1]
+            wechat_num = wechat_recode_list["num"]
+            # Wechat_log("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
+            
+            if wechat_num >= MXA_MSG:
+                wechat_num = 0 
+            if wechat_num == 0:
+                wechat_num += 1 
+            elif wechat_num > 0:
+                wechat_num += 1 
+          
+
+            print("num_total:datalen:{} {}".format(MXA_MSG,wechat_recode_list))
+            wechat_recode_list["%02d"%(wechat_num)] = "R:{}".format(3)
+            wechat_recode_list['num'] = wechat_num
+            EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
+            #写语音文件数据
+            screen_NAME = EventMesh.publish("get_screen_NAME")
+            get_lcd_state = EventMesh.publish("get_lcd_state")
+            if screen_NAME != "wechat" or get_lcd_state == 0:
+                EventMesh.publish("load_screen", {"screen": "wechat_popup"})
+            else:
+                EventMesh.publish("wechat_updata_list_show")
+            # path = "/ext/static/storage_file/audio_amr/amr/{}.amr".format(wechat_num)
+            path = "/ext/static/storage_file/{}.amr".format(wechat_num)
+            with open(path,"w") as fd:
+                arm = bytearray()
+                j = 0
+                for i in range(len(arm_data)):
+                    if arm_data[j] == 0x7d and arm_data[j+1] == 0x01:
+                        arm.extend(b'\x7d')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x02:
+                        arm.extend(b'\x5b')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x03:
+                        arm.extend(b'\x5d')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x04:
+                        arm.extend(b'\x2c')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x05:
+                        arm.extend(b'\x2a')
+                        j+=1
+                    else :
+                        arm.append(arm_data[j])
+                    j+=1
+                    if j >= len(arm_data):
+                        break
+                fd.write(arm)
+            EventMesh.publish(constants.PROTOCOL.TK_SEND,1)
+
+            
+            
+            
+
+class MESSAGE_ProtoCol(ProtoCol):
+    """微聊"""
+    TYPE = "MESSAGE"
+    
+
+    def send(self, event, msg):
+       
+        #[XT*334588000000156*0007*MESSAGE]
+        send_data = self.PID+"*%s*0007*MESSAGE"%(self.imei)
+        MD5_SIGN = self.pack_MD5_head(send_data)
+        data = "[%s%s]"%(str(MD5_SIGN),send_data)
+        #Wechat_log("POWEROFF_ProtoCol:send:%s"%(data))
+        # 通过socket发送到服务器端
+        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+    def recv(self, event, msg):
+        """
+
+        @param event: 微聊文字
+        @param msg: 接收到的下行数据
+        """
+        msg = msg[1:-1]
+
+        msg_s = msg.decode('ascii')
+        msg_s = msg_s.split(',')
+        msg_s = msg_s[1]
+        # Wechat_log("msg_tmp:len:{}\r\n data:{}".format(len(msg_s),msg_s))
+        
+
+        get_wechat_data = EventMesh.publish("get_wechat_data")
+        
+        MXA_MSG = get_wechat_data[0]
+        wechat_recode_list = get_wechat_data[1]
+        wechat_num = wechat_recode_list["num"]
+        # Wechat_log("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
+        
+        if wechat_num >= MXA_MSG:
+            wechat_num = 0 
+        if wechat_num == 0:
+            wechat_num += 1 
+        elif wechat_num > 0:
+            wechat_num += 1 
+        msg_txt = {}
+        # 0 1 2 3
+        print("wechat_num:init {}".format(wechat_num))
+        msg_txt = UnicodeHexStr_To_Utf8Str(msg_s)
+        # Wechat_log("msg_txt:{}".format(msg_txt))
+        wechat_recode_list["%02d"%(wechat_num)] = "T:{}".format(msg_txt)
+        wechat_recode_list['num'] = wechat_num
+        EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
+        # Wechat_log("wechat_recode_list:len data:{}".format(wechat_recode_list))
+        EventMesh.publish(constants.PROTOCOL.MESSAGE_SEND)
+        screen_NAME = EventMesh.publish("get_screen_NAME")
+        get_lcd_state = EventMesh.publish("get_lcd_state")
+        if screen_NAME != "wechat" or get_lcd_state == 0:
+            EventMesh.publish("load_screen", {"screen": "wechat_popup"})
+        else:
+            EventMesh.publish("wechat_updata_list_show")
+            
+
+
+
+    
 
 class ProtoColResolver(object):
     def __init__(self):
index 4fc9ad7..0407f36 100644 (file)
@@ -1209,6 +1209,7 @@ class DialingScreen(Screen):
         code = e.get_code()
         if  code == lv.EVENT.SHORT_CLICKED:
             EventMesh.publish("set_UI_high_priority", 0)
+            EventMesh.publish("close_sos_timer")
             EventMesh.publish("set_hangup_mode", 1)
             voiceCall.callEnd()
             EventMesh.publish("set_interrup_incall",0)
@@ -1768,8 +1769,9 @@ class DialingNoPlayPopupScreen(Screen):#正在拨号中...未打出
     def timeout_hangup(self,e):
         EventMesh.publish("system_sleep_rest")#防止黑屏
         self.time_count+=1
-        if self.time_count >= 5:#5s内没有打通则不在继续拨打关闭
+        if self.time_count >= 5 :#设置:#5s内没有打通则不在继续拨打关闭
             self.time_count = 0
+            voiceCall.callEnd()
             EventMesh.publish("set_UI_high_priority", 0)
             EventMesh.publish("set_sos_info_call") 
             # EventMesh.publish("load_screen", {"screen": "dialing"})
@@ -1786,6 +1788,7 @@ class DialingNoPlayPopupScreen(Screen):#正在拨号中...未打出
             voiceCall.callEnd()
             sos_flag = EventMesh.publish("get_sos_flag")
             if sos_flag == 1:
+                EventMesh.publish("close_sos_timer")
                 EventMesh.publish("set_sos_flag",0)
                 EventMesh.publish("set_sos_num",0)
                 EventMesh.publish("set_hangup_mode",0)
@@ -1854,7 +1857,7 @@ class DialNoconnectPopupScreen(Screen):#你所拨打的电话暂时无法接通
             EventMesh.publish("return_prev_screen")
 
     def Close(self):
-        EventMesh.publish("set_sos_info_call") 
+        # EventMesh.publish("set_sos_info_call") 
         self.timer.stop()
 
     
@@ -4212,9 +4215,6 @@ class ContactsScreen(Screen):
         phone_num = self.phonebook[_msg]
         EventMesh.publish("save_phonenum", phone_num)  
 
-        # phone_num_tmp = int(phone_num)
-        
-        "dialing_noplay_popup"
         EventMesh.publish("load_screen", {"screen": "dialing_noplay_popup"})
 
     def done_DOWN(self):#下滑
@@ -6007,6 +6007,7 @@ class classMgrPopupScreen(Screen):#上课禁用时间界面
         if sos_flag == 1:
             EventMesh.publish("set_sos_flag",0)
             EventMesh.publish("set_sos_num",0)
+            EventMesh.publish("close_sos_timer")
             EventMesh.publish("set_hangup_mode",0)
         data = RTC().datetime()
         hour = data[4]
index ec35a68..6ea395e 100644 (file)
@@ -1147,7 +1147,8 @@ class PoweroffScreen(Screen):
     
 
     def concel(self, e):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
+        # EventMesh.publish("load_screen", {"screen": "setting"})
 
     def btn1_release(self):
         EventMesh.publish("load_screen", {"screen": "setting"})
index 75efd4b..ef2e5d1 100644 (file)
@@ -2347,7 +2347,7 @@ class BtnDevice(Abstract):
         try :
             if boot_count < 50 :#开机50秒内按键次数大于10就校准
                 #EventMesh.debug_log("boot_count:{}".format(boot_count))
-                if self.pwKey_press_count >= 10:
+                if self.pwKey_press_count >= 6:
                     self.Hsensor =  EventMesh.publish("get_Hsensor")
                     self.hsensorTest_timer.start(1000,1,self.hsensorTest_timer_cb) 
                     EventMesh.debug_log("打开校准模式")
index e2356d7..e541df3 100644 (file)
@@ -339,16 +339,16 @@ class CountdownManager(Abstract):
 BATTERY_OCV_TABLE = {
     "nix_coy_mnzo2": {
         55: {
-            4270: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,
-            3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3355: 0,
+            4290: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,
+            3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3400: 0,
         },
         20: {
-            4270: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,
-            3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3355: 0,
+            4290: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,
+            3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3400: 0,
         },
         0: {
-            4270: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,
-            3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3355: 0,
+            4290: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,
+            3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3400: 0,
         },
     },
 }
@@ -1199,21 +1199,12 @@ class DeviceInfoManager(Abstract):
         else:
             self.clear_step = 0
         
-        """电量小于20% 5分钟提醒一次"""
+        """电量小于0% 关机"""
         get_low_btn = EventMesh.publish("get_low_bat_btn")#
         battery = EventMesh.publish("screen_get_battery")
-        # EventMesh.debug_log("get_low_btn:{} self.bat_time:{}".format(get_low_btn,self.bat_time))
-        if get_low_btn != None:#低电使能开关
-            if get_low_btn == 1:
-                self.bat_time+=10
-                # EventMesh.debug_log("date_tmp:{} self.bat_time:{}".format(date_tmp,self.bat_time))
-                if self.bat_time > 5*60:
-                    self.bat_time = 0
-                    if battery[1] <= 20 and battery[1] > 0:
-                        pass
-                        # EventMesh.publish("load_screen", {"screen": "LOW_POWER"})
-            else:
-                self.bat_time = 0
+        if battery[0] != '1':
+            if battery[1] == 0:
+                EventMesh.publish("open_power_on",2)#  #未检测到sim卡15分钟后关机
         
         """未联网提示关机"""
         ble=EventMesh.publish(constants.EVENT.GET_CONNECT)
@@ -2025,7 +2016,7 @@ class DeviceInfoManager(Abstract):
             else:
                 if battery[1] >= 100:
                     if self.charge_full_count == 0:#充电已满
-                        EventMesh.publish("set_usb",3)#
+                        # EventMesh.publish("set_usb",3)#
                         EventMesh.debug_log("charge R_CHARGE_full")
                         self.charge_full_count = 1
                 
index 42d9fac..9b0dadf 100644 (file)
@@ -1638,10 +1638,10 @@ class sosHome_dial_ProtoCol(ProtoCol):
     TYPE = "SOS"
     def send(self, event, msg):
         # [XT*334588000000156*0004*MONITOR]
-        send_data = EventMesh.publish("get_new_pid")+"*%s*0003*SOS"%(self.imei)
+        send_data = self.PID+"*%s*0003*SOS"%(self.imei)
         MD5_SIGN = self.pack_MD5_head(send_data)
         data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        EventMesh.debug_log("sosHome_dial_ProtoCol:data:%s"%(data))
+        print("sosHome_dial_ProtoCol:data:%s"%(data))
         # 通过socket发送到服务器端
         EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
 
@@ -1656,23 +1656,28 @@ class sosHome_dial_ProtoCol(ProtoCol):
         msg_tmp = msg.decode('ascii')
         msg_tmp = msg_tmp.split(',')
 
-        # EventMesh.debug_log("sosHome_dial_ProtoCol:send data :{} {}".format(len(msg_tmp),msg_tmp))
+        # print("sosHome_dial_ProtoCol:send data :{} {}".format(len(msg_tmp),msg_tmp))
         #b'[SZKW*860132060006970*0015*sosHome_dial_ProtoCol,15521469561,10086,15521469561]'
-        # print("sosnumber msg_tmp",msg_tmp)
         i = 0
-        for i in range(len(msg_tmp)-1):
-            # EventMesh.debug_log("sos:send data :{}".format(msg_tmp[i+1]))
+        num = 0
+        count = 0
+        print("sos msg_tmp",msg_tmp)
+        if len(msg_tmp) > 4:
+            num = 3
+        else:
+            num = len(msg_tmp)-1
+        data = []
+        for i in range(num):
+            # print("sos:send data :{}".format(msg_tmp[i+1]))
             if len(msg_tmp[i+1]) != 0:
                 EventMesh.publish("set_storage_config",["SOS_NUMBER{}".format(i+1),msg_tmp[i+1]])
-       
-        if (len(msg_tmp)-1) == 3:
-            EventMesh.publish("set_dial_sos_number",[msg_tmp[1],msg_tmp[2],msg_tmp[3]])
-        elif (len(msg_tmp)-1) == 2:
-            EventMesh.publish("set_dial_sos_number",[msg_tmp[1],msg_tmp[2]])
-        elif (len(msg_tmp)-1) == 1:
-            EventMesh.publish("set_dial_sos_number",[msg_tmp[1]])
+                data.append(str(msg_tmp[i+1]))
+                count+=1
+        print("data:{}".format(data))
+        EventMesh.publish("set_dial_sos_number",data)
              
         EventMesh.publish(constants.PROTOCOL.SOS_SEND)  
+
   
 # 低电提醒
 #[XT*334588000000156*0008*LOWBAT,1]
@@ -1811,8 +1816,8 @@ class TK_ProtoCol(ProtoCol):
         else:
             # [SZKW*YYYYYYYYYYYYYYY*LEN*TK,AMR 格式音频数据]
             #[XT*YYYYYYYYYYYYYYY*LEN*TKS,秒数(十进制),AMR 格式音频数据]
-            arm_data = msg[1]
-            arm_sec = msg[0]
+            arm_data = msg
+            # arm_sec = msg[0]
             # EventMesh.debug_log("TK_ProtoCol:msgtype:{} arm_sec:{}".format(len(msg[1]),arm_sec))
 
             arm = bytearray()
@@ -1830,9 +1835,9 @@ class TK_ProtoCol(ProtoCol):
                 else :
                     arm.append(arm_data[i])
                 
-            datalen = len(arm) + 4+len(str(arm_sec))+1
+            datalen = len(arm) + len("TK,")+1
             #Wechat_log("len(str(arm_sec)):{}".format(len(str(arm_sec))+1))
-            send_data = bytearray(EventMesh.publish("get_new_pid")+"*%s*%04X*TK,%d,"%(self.imei,datalen,arm_sec))
+            send_data = bytearray(EventMesh.publish("get_new_pid")+"*%s*%04X*TK,"%(self.imei,datalen))
             send_data.extend(arm)
             MD5_head_data = EventMesh.publish("get_new_pid")+"*%s*%04X*%s"%(self.imei,datalen,"TK")
             MD5_SIGN = self.pack_MD5_head(MD5_head_data)
@@ -1957,7 +1962,7 @@ class TKS_ProtoCol(ProtoCol):
                 else :
                     arm.append(arm_data[i])
                 
-            datalen = len(arm) + 4+len(str(arm_sec))+1
+            datalen = len(arm) + len("TKS,")+len(str(arm_sec))+1
             #Wechat_log("len(str(arm_sec)):{}".format(len(str(arm_sec))+1))
             send_data = bytearray(EventMesh.publish("get_new_pid")+"*%s*%04X*TKS,%d,"%(self.imei,datalen,arm_sec))
             send_data.extend(arm)
index 7878235..0ddc32a 100644 (file)
@@ -1320,7 +1320,6 @@ class sosHome_dial_ProtoCol(ProtoCol):
     """sos家庭号码"""
     TYPE = "SOS"
     def send(self, event, msg):
-        
         # [XT*334588000000156*0004*MONITOR]
         send_data = EventMesh.publish("get_new_pid")+"*%s*0003*SOS"%(self.imei)
         MD5_SIGN = self.pack_MD5_head(send_data)
@@ -1343,18 +1342,22 @@ class sosHome_dial_ProtoCol(ProtoCol):
         # print("sosHome_dial_ProtoCol:send data :{} {}".format(len(msg_tmp),msg_tmp))
         #b'[SZKW*860132060006970*0015*sosHome_dial_ProtoCol,15521469561,10086,15521469561]'
         i = 0
-        for i in range(len(msg_tmp)-1):
+        num = 0
+        count = 0
+        print("sos msg_tmp",msg_tmp)
+        if len(msg_tmp) > 4:
+            num = 3
+        else:
+            num = len(msg_tmp)-1
+        data = []
+        for i in range(num):
             # print("sos:send data :{}".format(msg_tmp[i+1]))
             if len(msg_tmp[i+1]) != 0:
                 EventMesh.publish("set_storage_config",["SOS_NUMBER{}".format(i+1),msg_tmp[i+1]])
-                # print("read_data:{} msg_tmp:{}".format(read_data,msg_tmp[i+1]))
-       
-        if (len(msg_tmp)-1) == 3:
-            EventMesh.publish("set_dial_sos_number",[msg_tmp[1],msg_tmp[2],msg_tmp[3]])
-        elif (len(msg_tmp)-1) == 2:
-            EventMesh.publish("set_dial_sos_number",[msg_tmp[1],msg_tmp[2]])
-        elif (len(msg_tmp)-1) == 1:
-            EventMesh.publish("set_dial_sos_number",[msg_tmp[1]])
+                data.append(str(msg_tmp[i+1]))
+                count+=1
+        print("data:{}".format(data))
+        EventMesh.publish("set_dial_sos_number",data)
              
         EventMesh.publish(constants.PROTOCOL.SOS_SEND)  
   
index 0864f18..fe95234 100644 (file)
Binary files a/2.sdk/project/K5/font/ext_font.bin and b/2.sdk/project/K5/font/ext_font.bin differ
index f44ad87..ed4f5ca 100644 (file)
@@ -2,7 +2,7 @@
 
 md images
 del images /q
-..\..\Helios_SDK\tools\ASR_1606\win32\mklfs.exe -c ext -b 4096 -r 4096 -p 4096 -s 1468000 -i .\images\ext_fs.bin
+..\..\Helios_SDK\tools\ASR_1606\win32\mklfs.exe -c ext -b 4096 -r 4096 -p 4096 -s 1363148 -i .\images\ext_fs.bin
 if errorlevel 1 (
     echo "ext_fs.binÉú³Éʧ°Ü !!!!!!!!!!!!!!! "
     goto exit
index afdbf34..8755cf8 100644 (file)
@@ -827,7 +827,7 @@ class PopupAlarmScreen(Screen):
             self.alarm_count = 0
             self.aud.stop()
             self.timer.stop()
-            EventMesh.publish("load_screen", {"screen": "main_menu"})
+            EventMesh.publish("return_prev_screen")
             return
         play_state = EventMesh.publish("get_audio_state")#音频播放状态
         if play_state != None:
@@ -842,35 +842,35 @@ class PopupAlarmScreen(Screen):
 
     def done_left_to_right(self):
         self.close_timer()
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def done_right_to_left(self):
         self.close_timer()
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def done_bottom_to_top(self):
         self.close_timer()
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def done_top_to_bottom(self):
         self.close_timer()
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def done_return(self):
         self.close_timer()
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
                
     def done_click(self):
         self.close_timer()
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
         self.close_timer()
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def btn8_press(self):
         self.close_timer()
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
 #闹钟列表
 class ClkListScreen(Screen):
@@ -923,11 +923,11 @@ class ClkListScreen(Screen):
 
 
     def alarm_draw_btn(self):
-        global alarm_list 
-        self.clock_list = alarm_list  
-        IFEXIST = ql_fs.path_exists("/ext/static/storage_file/alarm_msg.json")    
-        if IFEXIST == True:
-            if self.clock_list:
+        get_alarm_data = EventMesh.publish("get_storage_config","normal_alarm")
+        print("get_alarm_data",get_alarm_data)
+        if get_alarm_data != None and get_alarm_data != []:
+        
+            if len(get_alarm_data) != 0:
                 # print("nalarm_list:{}".format(alarm_list))
                 no_add_alarm_img.add_flag(lv.obj.FLAG.HIDDEN)
                 no_add_alarm.add_flag(lv.obj.FLAG.HIDDEN)
@@ -940,20 +940,17 @@ class ClkListScreen(Screen):
                 #print("菜单的孩子个数:",clk_list_screen1.get_child_cnt())
                 num = 0
                 count = 0
-                clock_nums = len(self.clock_list)-2#3-2 = 1 0 
+                clock_nums = len(get_alarm_data)#3-2 = 1 0 
                 # for i ,each in enumerate(self.clock_list):
                 for i in range(0,self.MXA_clk_num):
                     if i >= clock_nums:
                         self.contact_detail_listt_dict[i]["_btn"].add_flag(lv.obj.FLAG.HIDDEN)
                         continue
-                    each = self.clock_list[2+i]
-                    num = each["idx"]
+                    hour = get_alarm_data[i]["hour"]
+                    min = get_alarm_data[i]["min"]
+
+                    day = get_alarm_data[i]["day"]
 
-                    if count >= 3:
-                        break
-                    repeart = each["repeart"]#
-                    if repeart >= 10:
-                        continue
                     print("count1:{}".format(count))
                     #_btn = lv.btn(self.alarm_show_list)
                     self.contact_detail_listt_dict[count]["_btn"].set_size(230,75)
@@ -967,28 +964,27 @@ class ClkListScreen(Screen):
                     #_btn_label1 = lv.label(_btn)
                     self.contact_detail_listt_dict[count]["_btn_label1"].set_pos(50, 0)
                     self.contact_detail_listt_dict[count]["_btn_label1"].set_size(0, 0)
-                    self.contact_detail_listt_dict[count]["_btn_label1"].set_text(str(num))
+                    self.contact_detail_listt_dict[count]["_btn_label1"].set_text(" ")
 
                     #_btn_label2 = lv.label(_btn)
                     self.contact_detail_listt_dict[count]["_btn_label2"].set_pos(8, 10)
                     self.contact_detail_listt_dict[count]["_btn_label2"].set_size(97, 40)
-                    self.contact_detail_listt_dict[count]["_btn_label2"].set_text("%02d" % each["hour"] + ":"+"%02d" % each["minute"])
+                    self.contact_detail_listt_dict[count]["_btn_label2"].set_text("%02d" %(hour) + ":"+"%02d" %(min))
                     # _btn_label2.set_text(str(each["days"]))
 
                     # _btn_label2.set_long_mode(lv.label.LONG.DOT)
                     # _btn_label2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
                     self.contact_detail_listt_dict[count]["_btn_label2"].set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
 
-                    _new_list = sorted(each["days"])
-                    repeart = each["repeart"]
+                    _new_list = sorted(day)
                     _output = [self.weekdays_list[x] for x in _new_list]
                     #_btn_label3 = lv.label(_btn)
                     self.contact_detail_listt_dict[count]["_btn_label3"].set_pos(5, 44)
                     self.contact_detail_listt_dict[count]["_btn_label3"].set_size(200, 40)
-                    print("_new_list:{} repeart:{}".format(_new_list,repeart))
-                    if repeart == 1:
+                    print("_new_list:{} ".format(_new_list))
+                    if day == []:
                         self.contact_detail_listt_dict[count]["_btn_label3"].set_text("一次")
-                    elif repeart == 2:
+                    elif len(day) > 6:
                         self.contact_detail_listt_dict[count]["_btn_label3"].set_text("每天")
                     else:
                         self.contact_detail_listt_dict[count]["_btn_label3"].set_text(",".join(_output))
@@ -1067,10 +1063,10 @@ class ClkListScreen(Screen):
     #     print("sw_event_cb ~~~")
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "toolbox"})
+        EventMesh.publish("return_prev_screen")
                
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "toolbox"})
+        EventMesh.publish("return_prev_screen")
 
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
index 070c07c..f09ce37 100644 (file)
@@ -148,10 +148,10 @@ class FactoryModeScreen(Screen):
 
         factorymode_step.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "FactoryModestep"})), lv.EVENT.CLICKED, None)
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
@@ -252,10 +252,10 @@ class FactoryModeLogScreen(Screen):
         pass
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "factorymode"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "factorymode"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
@@ -318,10 +318,10 @@ class FactoryModestepScreen(Screen):
         pass
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "factorymode"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "factorymode"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
@@ -429,10 +429,10 @@ class FactoryModeHsensorTestScreen(Screen):
         pass
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "factorymode"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "factorymode"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
@@ -476,10 +476,10 @@ class FactoryModeBatTestScreen(Screen):
         pass
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "factorymode"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "factorymode"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
@@ -655,10 +655,10 @@ class FactoryModeLocationScreen(Screen):
         self.timer_FactoryModeLocation.stop()
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "factorymode"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "factorymode"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
\ No newline at end of file
index 404efff..9e9e3c4 100644 (file)
@@ -461,7 +461,7 @@ class WechatScreen(Screen):
                 buf = bytearray(ql_fs.path_getsize(path))
                 fd.readinto(buf)
                 senddata = [self.countdown_old,buf]
-                EventMesh.publish(constants.PROTOCOL.TK_SEND,senddata)
+                EventMesh.publish(constants.PROTOCOL.TKS_SEND,senddata)
             
             
         Wechat_log("sending2") 
@@ -596,10 +596,10 @@ class WechatScreen(Screen):
         wechat_press_label_countdown.set_text("{}S".format(str(self.countdown)))
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
@@ -648,7 +648,7 @@ class NewWechatPopupScreen(Screen):
         EventMesh.publish("load_screen", {"screen": "wechat"})
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def btn8_press(self):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
@@ -656,10 +656,9 @@ class NewWechatPopupScreen(Screen):
 
 
 
-
-class TK_ProtoCol(ProtoCol):
+class TKS_ProtoCol(ProtoCol):
     """微聊"""
-    TYPE = "TK"
+    TYPE = "TKS"
     
 
     def send(self, event, msg):
@@ -672,7 +671,7 @@ class TK_ProtoCol(ProtoCol):
             MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,len_size,"TKS")
             MD5_SIGN = self.pack_MD5_head(MD5_head_data)
             data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
-            print("TK:data:%s"%(data))
+            print("TKS:data:%s"%(data))
             # 通过socket发送到服务器端
             EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
 
@@ -698,9 +697,9 @@ class TK_ProtoCol(ProtoCol):
                 else :
                     arm.append(arm_data[i])
                 
-            datalen = len(arm) + 4+len(str(arm_sec))+1
+            datalen = len(arm) +len("TKS")+len(str(arm_sec))+1
             #Wechat_log("len(str(arm_sec)):{}".format(len(str(arm_sec))+1))
-            send_data = bytearray("SZKW*%s*%04X*TKS,%d,"%(self.imei,datalen,arm_sec))
+            send_data = bytearray(self.PID+"*%s*%04X*TKS,%d,"%(self.imei,datalen,arm_sec))
             send_data.extend(arm)
             MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,datalen,"TKS")
             MD5_SIGN = self.pack_MD5_head(MD5_head_data)
@@ -712,6 +711,135 @@ class TK_ProtoCol(ProtoCol):
             EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
 
 
+    def recv(self, event, msg):
+        """
+
+        ("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
+        @param event: 微聊
+        @param msg: 接收到的下行数据
+        [SZKW*860132060004322*20BD*TK,#!AMR...]
+        """
+        #Wechat_log("K_ProtoCol:recv:data:{}".format(msg))
+        # print("TK recv:{}".format(msg))
+        msg_tmp = msg.decode('ascii')
+        str = msg_tmp.split('TKS,')
+        # Wechat_log("TK_ProtoCol:recv:len:{} {} {}".format(len(msg),len(str),msg_tmp.find("#!AMR")))
+        if  msg_tmp.find("#!AMR") != -1: #是否是服务器下发音频数据
+            # Wechat_log("TK_ProtoCol:recv:datalen{}".format(len(msg)))
+            arm_data = bytearray(str[1])#获取amr输出
+            get_wechat_data = EventMesh.publish("get_wechat_data")
+            
+            MXA_MSG = get_wechat_data[0]
+            wechat_recode_list = get_wechat_data[1]
+            wechat_num = wechat_recode_list["num"]
+            # Wechat_log("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
+            
+            if wechat_num >= MXA_MSG:
+                wechat_num = 0 
+            if wechat_num == 0:
+                wechat_num += 1 
+            elif wechat_num > 0:
+                wechat_num += 1 
+          
+
+            Wechat_log("num_total:datalen:{} {}".format(MXA_MSG,wechat_recode_list))
+            wechat_recode_list["%02d"%(wechat_num)] = "R:{}".format(3)
+            wechat_recode_list['num'] = wechat_num
+            EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
+            #写语音文件数据
+            screen_NAME = EventMesh.publish("get_screen_NAME")
+            get_lcd_state = EventMesh.publish("get_lcd_state")
+            if screen_NAME != "wechat" or get_lcd_state == 0:
+                EventMesh.publish("load_screen", {"screen": "wechat_popup"})
+            else:
+                EventMesh.publish("wechat_updata_list_show")
+            # path = "/ext/static/storage_file/audio_amr/amr/{}.amr".format(wechat_num)
+            path = "/ext/static/storage_file/{}.amr".format(wechat_num)
+            with open(path,"w") as fd:
+                arm = bytearray()
+                j = 0
+                for i in range(len(arm_data)):
+                    if arm_data[j] == 0x7d and arm_data[j+1] == 0x01:
+                        arm.extend(b'\x7d')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x02:
+                        arm.extend(b'\x5b')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x03:
+                        arm.extend(b'\x5d')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x04:
+                        arm.extend(b'\x2c')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x05:
+                        arm.extend(b'\x2a')
+                        j+=1
+                    else :
+                        arm.append(arm_data[j])
+                    j+=1
+                    if j >= len(arm_data):
+                        break
+                fd.write(arm)
+            EventMesh.publish(constants.PROTOCOL.TKS_SEND,1)
+
+            
+            
+
+class TK_ProtoCol(ProtoCol):
+    """微聊"""
+    TYPE = "TK"
+    
+
+    def send(self, event, msg):
+        # print("TK send:{}".format(msg))
+        if len(str(msg)) == 1:
+
+            len_size = len(str(msg))+len("TK,")
+            #  实例:[XT*334588000000156*0009*TK,1]
+            send_data = self.PID+"*%s*%04X*TK"%(self.imei,len_size)
+            MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,len_size,"TK")
+            MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+            data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
+            print("TK:data:%s"%(data))
+            # 通过socket发送到服务器端
+            EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+        else:
+            # [SZKW*YYYYYYYYYYYYYYY*LEN*TK,AMR 格式音频数据]
+            #[XT*YYYYYYYYYYYYYYY*LEN*TKS,秒数(十进制),AMR 格式音频数据]
+            arm_data = msg[1]
+            arm_sec = msg[0]
+            # print("TK_ProtoCol:msgtype:{} arm_sec:{}".format(len(msg[1]),arm_sec))
+
+            arm = bytearray()
+            for i in range(len(arm_data)):
+                if arm_data[i] == 0x7d:
+                    arm.extend(b'\x7d\x01')
+                elif arm_data[i] == 0x5b :
+                    arm.extend(b'\x7d\x02')
+                elif arm_data[i] == 0x5d :
+                    arm.extend(b'\x7d\x03')
+                elif arm_data[i] == 0x2c :
+                    arm.extend(b'\x7d\x04')
+                elif arm_data[i] == 0x2a :
+                    arm.extend(b'\x7d\x05')
+                else :
+                    arm.append(arm_data[i])
+                
+            datalen = len(arm) + len("TK")+len(str(arm_sec))+1
+            #Wechat_log("len(str(arm_sec)):{}".format(len(str(arm_sec))+1))
+            send_data = bytearray(self.PID+"*%s*%04X*TK,"%(self.imei,datalen))
+            send_data.extend(arm)
+            MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,datalen,"TK")
+            MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+            data = bytearray('[')
+            data.extend(MD5_SIGN)
+            data.extend(send_data)
+            data.extend(']')
+            # print("TK:send data:%s MD5_head_data:%s"%(data,MD5_head_data))
+            EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+
     def recv(self, event, msg):
         """
 
index ff4d2d2..8f8e6cb 100644 (file)
@@ -26,6 +26,9 @@ class PROTOCOL:
     TK_SEND = "TK_SEND"
     TK_RECV = "TK_RECV"
 
+    TKS_SEND = "TKS_SEND"
+    TKS_RECV = "TKS_RECV"
+
     MESSAGE_SEND = "MESSAGE_SEND"
     MESSAGE_RECV = "MESSAGE_RECV"
 
@@ -99,6 +102,9 @@ class PROTOCOL:
     BTEMP2_SEND ="btemp2_SEND"
     BTEMP2_RECV ="btemp2_RECV"
 
+    FACTORY_SEND = "FACTORY_SEND"
+    FACTORY_RECV = "FACTORY_RECV"
+
 class EVENT:
     CHANNEL_SOCKET_SEND = "CHANNEL_SOCKET_SEND"
     START_LOCATION = "START_LOCATION" 
index 9e878bc..ac0d49f 100644 (file)
@@ -69,9 +69,7 @@ def main_init():
     from mgr import setCallStateManager,setclassTimeManager,setSmsIndexManager,ConfigStoreManager,testSmsSetIPManager,playPowerAudioManager,sosInfoCallManager,getBootOffManager,getSosFlagManager,CountdownManager, LocationManager, getVolumSizeManager,gethistoryDataManager,getUpLoadDataManager, getplayAudiodStateManager,\
     AddrBookManager,MsgdetailManager,PhoneCallingManager,getOldTimeManager,getStorageDataManager,getBrightnessManager,getHrTimeManager,getTempTimeManager,getLowBatManager
 
-    from protocol import btemp2_ProtoCol,bodytemp2_ProtoCol,TEMP_Hour_ProtoCol,SILENCETIMEFS_ProtoCol,KEYBRD_ProtoCol,SILENCETIME2_ProtoCol,WLKEY_ProtoCol,LK_ProtoCol,PING_ProtoCol,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,HRSTART_ProtoCol,CENTER_ProtoCol,UPLOAD_ProtoCol,\
-            TEMP_ProtoCol,DLT_ProtoCol,WT_ProtoCol,UD_ProtoCol,REMIND_ProtoCol, CR_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,Time_ProtoCol,\
-                ProtoColResolver,PHL_ProtoCol,MONITOR_ProtoCol,bootoff_ProtoCol,WDSTART_ProtoCol,LOWBAT_ProtoCol,sosHome_dial_ProtoCol,SockManager,NetManager
+    import protocol
     import ui as _ui
     # import ui as _ui
     #print("init4:{}".format(utime.localtime()))
@@ -110,7 +108,7 @@ def main_init():
     except Exception as e:
         usys.print_exception(e)
     try:
-        from appWechat import WechatScreen,TK_ProtoCol,MESSAGE_ProtoCol,NewWechatPopupScreen
+        from appWechat import WechatScreen,NewWechatPopupScreen
         ui.add_screen(WechatScreen()) 
         from alarm import ClkListScreen,ClockManager,NewEditClk,CLKTimeScreen,ClkPeriod,PopupAlarmScreen
         from ui_health import HealthScreen
@@ -236,7 +234,7 @@ def main_init():
         app.append_manager(playPowerAudioManager())
         #app.append_manager(Alipay()) 
         app.append_manager(ConfigStoreManager())
-        app.append_manager(NetManager())
+        app.append_manager(protocol.NetManager())
         app.append_manager(LocationManager())
         app.append_manager(AddrBookManager())
         app.append_manager(mgr.MsgManager())
@@ -271,45 +269,49 @@ def main_init():
     
     #print("init11:{}".format(utime.localtime()))  
     try:  
-        pcr = ProtoColResolver()
-        pcr.add_support(LK_ProtoCol())
-        pcr.add_support(PING_ProtoCol())
-        pcr.add_support(KA_ProtoCol())
-        pcr.add_support(UD_ProtoCol())
-        pcr.add_support(CR_ProtoCol())
-        pcr.add_support(FIND_ProtoCol())
-        pcr.add_support(POWEROFF_ProtoCol())
-        pcr.add_support(PHL_ProtoCol())
-        pcr.add_support(TK_ProtoCol())
-        pcr.add_support(MESSAGE_ProtoCol())
-        pcr.add_support(WT_ProtoCol())
-        pcr.add_support(REMIND_ProtoCol())
-        pcr.add_support(HRSTART_ProtoCol())
-        pcr.add_support(HEART_ProtoCol())
-        pcr.add_support(OXYGEN_ProtoCol())
-        pcr.add_support(OXYGEN_One_ProtoCol())
-        pcr.add_support(TEMP_ProtoCol())
-        pcr.add_support(DLT_ProtoCol())
-        pcr.add_support(UPLOAD_ProtoCol())
-        pcr.add_support(MONITOR_ProtoCol())
+        pcr = protocol.ProtoColResolver()
+        pcr.add_support(protocol.LK_ProtoCol())
+        pcr.add_support(protocol.PING_ProtoCol())
+        pcr.add_support(protocol.KA_ProtoCol())
+        pcr.add_support(protocol.UD_ProtoCol())
+        pcr.add_support(protocol.CR_ProtoCol())
+        pcr.add_support(protocol.FIND_ProtoCol())
+        pcr.add_support(protocol.POWEROFF_ProtoCol())
+        pcr.add_support(protocol.PHL_ProtoCol())
+        pcr.add_support(protocol.TK_ProtoCol())
+        pcr.add_support(protocol.MESSAGE_ProtoCol())
+        pcr.add_support(protocol.WT_ProtoCol())
+        pcr.add_support(protocol.REMIND_ProtoCol())
+        pcr.add_support(protocol.HRSTART_ProtoCol())
+        pcr.add_support(protocol.HEART_ProtoCol())
+        pcr.add_support(protocol.OXYGEN_ProtoCol())
+        pcr.add_support(protocol.OXYGEN_One_ProtoCol())
+        pcr.add_support(protocol.TEMP_ProtoCol())
+        pcr.add_support(protocol.DLT_ProtoCol())
+        pcr.add_support(protocol.UPLOAD_ProtoCol())
+        pcr.add_support(protocol.MONITOR_ProtoCol())
         # pcr.add_support(CENTER_ProtoCol())
-        pcr.add_support(CENTER_ProtoCol())
-        pcr.add_support(bootoff_ProtoCol())
-        pcr.add_support(WDSTART_ProtoCol())
-        pcr.add_support(LOWBAT_ProtoCol())
-        pcr.add_support(sosHome_dial_ProtoCol())
-        pcr.add_support(Time_ProtoCol())
-        pcr.add_support(WLKEY_ProtoCol())
-        pcr.add_support(KEYBRD_ProtoCol())
-        pcr.add_support(SILENCETIME2_ProtoCol())
-        pcr.add_support(SILENCETIMEFS_ProtoCol())
-        pcr.add_support(TEMP_Hour_ProtoCol())
-        pcr.add_support(bodytemp2_ProtoCol())
-        pcr.add_support(btemp2_ProtoCol())
+        pcr.add_support(protocol.CENTER_ProtoCol())
+        pcr.add_support(protocol.bootoff_ProtoCol())
+        pcr.add_support(protocol.WDSTART_ProtoCol())
+        pcr.add_support(protocol.LOWBAT_ProtoCol())
+        pcr.add_support(protocol.sosHome_dial_ProtoCol())
+        pcr.add_support(protocol.Time_ProtoCol())
+        pcr.add_support(protocol.WLKEY_ProtoCol())
+        pcr.add_support(protocol.KEYBRD_ProtoCol())
+        pcr.add_support(protocol.SILENCETIME2_ProtoCol())
+        pcr.add_support(protocol.SILENCETIMEFS_ProtoCol())
+        pcr.add_support(protocol.TEMP_Hour_ProtoCol())
+        pcr.add_support(protocol.bodytemp2_ProtoCol())
+        pcr.add_support(protocol.btemp2_ProtoCol())
+        pcr.add_support(protocol.TK_ProtoCol())
+        pcr.add_support(protocol.TKS_ProtoCol())
+        pcr.add_support(protocol.MESSAGE_ProtoCol())
+        pcr.add_support(protocol.FACTORY_ProtoCol())
     except Exception as e:
         usys.print_exception(e)
     try:    
-        sm = SockManager()
+        sm = protocol.SockManager()
         sm.add_support_resolver(pcr)
         app.append_manager(sm)
         #print("init11.0:{}".format(utime.localtime()))   
index d54b18a..1925285 100644 (file)
@@ -605,12 +605,8 @@ def voice_callback(args):
 
         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("return_prev_screen")
+    
+        EventMesh.publish("return_prev_screen")
         
         EventMesh.publish("set_sos_info_call")  
         print('voicecall disconnect end')
@@ -697,6 +693,10 @@ class DeviceInfoManager(Abstract):
         self.no_smi_count = 0
         self.no_smi_state = 0
 
+        self.normal_oldtotalmin = 0 #上次响过的闹钟分钟数不等于当前的分钟数据需要清零否则下一个不会响铃
+        self.normal_flag =0
+        self.normal_count = 0
+
         self.charge_full_count = 0
         self.GPS_step_t = 0#记录步数
         self.usb = USB()
@@ -941,15 +941,15 @@ class DeviceInfoManager(Abstract):
                 data = RTC().datetime()
                 hour = data[4]
                 min = data[5]
-                next_alarm_time = utime.localtime(old_Timesec)
+                next_alarm_time = utime.localtime(int(old_Timesec))
                 # print("data[5]:{} {} next_alarm_time:{} old_Timesec:{}".format(data[1],data[2],next_alarm_time,old_Timesec))
                 month = next_alarm_time[1]
                 day = next_alarm_time[2]
-                if month != data[1] or day != data[2]:
+                year = next_alarm_time[0]
+                if month != data[1] or day != data[2] or year != data[0]:
                     step = EventMesh.publish("get_old_step_value")
-                    if step > 0:
-                        self.gsensor.reset_step()
-                        EventMesh.publish("set_old_step_value",0)
+                    self.gsensor.reset_step()
+                    EventMesh.publish("set_old_step_value",0)
                     
                     hr = EventMesh.publish("get_old_hr_data",)
                     if hr != 0:
@@ -959,22 +959,19 @@ class DeviceInfoManager(Abstract):
                     if spo2 != 0:
                         EventMesh.publish("set_old_spo2_data", 0)
                     EventMesh.publish("set_old_time_data",time_tmp)
-            if hour == 0:#清步数
-                if min <= 1:
-                    if self.clear_step == 0:
-                        step = EventMesh.publish("get_old_step_value")
-                        EventMesh.publish("set_old_time_data",time_tmp)
-                        if step > 0:
-                            EventMesh.publish("set_old_step_value",0)
-                            self.gsensor.reset_step()
-                        hr = EventMesh.publish("get_old_hr_data")
-                        if hr != 0:
-                            EventMesh.publish("set_old_hr_data", 0)
-                        
-                        spo2 = EventMesh.publish("get_old_spo2_data")
-                        if spo2 != 0:
-                            EventMesh.publish("set_old_spo2_data", 0)
-                        self.clear_step = 1
+            if hour == 23:#清步数
+                if min == 59:
+                    step = EventMesh.publish("get_old_step_value")
+                    EventMesh.publish("set_old_time_data",time_tmp)
+                    EventMesh.publish("set_old_step_value",0)
+                    self.gsensor.reset_step()
+                    hr = EventMesh.publish("get_old_hr_data")
+                    if hr != 0:
+                        EventMesh.publish("set_old_hr_data", 0)
+                    
+                    spo2 = EventMesh.publish("get_old_spo2_data")
+                    if spo2 != 0:
+                        EventMesh.publish("set_old_spo2_data", 0)
                 else:
                     if self.clear_step == 1:
                         self.clear_step = 0
@@ -1530,7 +1527,69 @@ class DeviceInfoManager(Abstract):
 
         
         #quecgnss.gnssEnable(0)  
-    
+        self.normal_alarm() 
+
+
+    #普通闹钟
+    def normal_alarm(self):
+        data = RTC().datetime()
+        hour = data[4]
+        min = data[5]
+
+        week = int(data[3])
+
+        date1 = data[1]
+        date2 = data[2]
+        cur_total_min = int(hour)*60+int(min)
+        # EventMesh.debug_log("self.normal_oldtotalmin",self.normal_oldtotalmin,cur_total_min,self.alarm_flag)
+        if self.normal_oldtotalmin == 0:
+            self.normal_oldtotalmin = cur_total_min #549
+        if self.normal_oldtotalmin != cur_total_min: #上次响过的闹钟分钟数不等于当前的分钟数据需要清零否则下一个不会响铃
+            if self.normal_flag == 1:
+                self.normal_flag = 0
+                self.normal_count = 0
+        normal_alarm = []
+        normal_alarm = EventMesh.publish("get_storage_config","normal_alarm")
+        # EventMesh.debug_log("sleep info2",sleep,cur_total_min)
+        if self.normal_flag == 1:#表示闹钟响过清除标志
+            self.normal_count+=1
+            if self.normal_count > 6:
+                self.normal_count = 0
+                self.normal_flag = 0
+        if normal_alarm != None:
+            if len(normal_alarm) != 0 and normal_alarm != []:
+                j = 0
+                for i in range(len(normal_alarm)):
+                    # EventMesh.debug_log("normal_alarm normal_alarm 33",normal_alarm,j)
+                    normalalarm_hour = normal_alarm[j]["hour"]
+                    normalalarm_min = normal_alarm[j]["min"]
+                    normalalarm_day = normal_alarm[j]["day"]
+                    normalalarm_enale = normal_alarm[j]["enable"]
+                    normalalarm_totalmin = int(normalalarm_hour)*60+int(normalalarm_min)
+                    # EventMesh.debug_log("wake alarm",normalalarm_hour,sleep_min,sleep_day,sleep_enale,sleep_totalmin,week)
+                    if normalalarm_day == []:#单次闹钟只响一次
+                        if normalalarm_enale != 0:
+                            if normalalarm_totalmin == cur_total_min:#14:00
+                                self.normal_count = 0
+                                self.normal_flag  = 0    
+                                normal_alarm[j]["enable"] = 0
+                                
+                                # EventMesh.debug_log("wakeup wakeup1",sleep,j)
+                                EventMesh.publish("set_storage_config",["normal_alarm",normal_alarm])#删除之后重新保存
+                                EventMesh.publish("push_update_alarm_show")
+                                # new_data=EventMesh.publish("get_storage_config","normal_alarm")
+                                # print("normal wakeup1",new_data,j)
+                                EventMesh.publish("load_screen", {"screen": "popup_alarm"})                                                                                                                                           
+                                break
+                    else:
+                        if normalalarm_enale != 0 and (week in normalalarm_day):#记录响过的时间分钟数
+                            if normalalarm_totalmin == cur_total_min and self.normal_flag == 0:#14:00
+                                self.normal_flag  = 1
+                                self.normal_count = 0
+                                self.normal_oldtotalmin = normalalarm_totalmin
+                                EventMesh.publish("load_screen", {"screen": "popup_alarm"})                                                                                                                                                 
+                                break
+                    j+=1
       
     def get_sim_Status(self, event, msg):
         return sim.getStatus()
@@ -1610,15 +1669,15 @@ class DeviceInfoManager(Abstract):
         """
         XYZ = self.gsensor.get_x_y_z()
         tmp = 0
-       
+        step = [0,0,0,0]
         tmp =  self.gsensor.get_step() 
         # print("x:%d,y:%d,z:%d tmp %d",XYZ[0],XYZ[1],XYZ[2],tmp)
-        self.step[0]= tmp 
-        self.step[1] = XYZ[0]
-        self.step[2] = XYZ[1]
-        self.step[3] = XYZ[2]
+        step[0]= tmp 
+        step[1] = XYZ[0]
+        step[2] = XYZ[1]
+        step[3] = XYZ[2]
         
-        return self.step
+        return step
 
     def get_ic_cid(self, event, msg):
         """
@@ -2618,6 +2677,7 @@ class gethistoryDataManager(Abstract):
     
     def set_old_step_value(self, event, msg): 
         self.oldstep = msg
+        EventMesh.publish("set_storage_config",["old_step",msg]) 
         
         
     def get_old_step_value(self, event, msg): 
index df381e2..89963a5 100644 (file)
@@ -25,7 +25,7 @@ import usys
 def server_init(server_type = None):
     #服务器选择1,防走丢,2大锤,3三基同创,4童信,5云米,6荣为
     if server_type == None:
-        server_type = 4
+        server_type = 1
     #print("server_init:server_type:{}".format(server_type))
     d_server_addr = "api.xcloudtech.com"
     d_server_port = 9000
@@ -271,7 +271,7 @@ class SockManager(Abstract):
                 data = data + r
                 print("TCP recv: data:len:{}".format(len(data)))
                 
-                print("TCP recv: data:{}".format(data))
+                # print("TCP recv: data:{}".format(data))
                 if data[-1] != 0x5d and len(data)<20*1024: #']':
                     continue
                 self.connect_tmp = 1 #有数据,就认为是连接状态
@@ -754,101 +754,79 @@ class WT_ProtoCol(ProtoCol):
         EventMesh.publish("set_weather_data",[msg_date,msg_time,msg_weather_content,msg_type,msg_temp,msg_min_temp,msg_max_temp,msg_city,1])
         EventMesh.publish("updata_weather_show")
 
-class REMIND_ProtoCol(ProtoCol):
-    """闹钟数据"""
+class REMIND_ProtoCol(ProtoCol):#普通闹钟
+    """
+    
+    平台发送:
+    [XT*YYYYYYYYYYYYYYY*LEN*REMIND,,时间1-开关,时间2-开关,周几]
+    实例:[XT*334588000000156*0008*REMIND,,时间1-开关,时间2-开关,周几]
+    终端回复:
+    [XT*YYYYYYYYYYYYYYY*LEN*REMIND]
+    """
     TYPE = "REMIND"
-
-
+    
     def send(self, event, msg):
-        # [SZKW*867387060319491*0008*REMIND]
         send_data = self.PID+"*%s*0006*REMIND"%(self.imei)
         MD5_SIGN = self.pack_MD5_head(send_data)
         data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        # print("REMIND_ProtoCol:send:%s"%(data))
+        #Wechat_log("POWEROFF_ProtoCol:send:%s"%(data))
         # 通过socket发送到服务器端
         EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
 
     def recv(self, event, msg):
-        """
-        @param event: 闹钟数据下发
-        @param msg: 接收到的下行数据
-        """
-        # b'SZKW*860132060004322*0035*REMIND,23-04-06,14:41:06,b6e0d4c6,1,27,-1,40,6DF157335E02'
-        # print("REMIND_ProtoCol RECV msg:%s"%(msg))
-        alarm_new = []
-
+        # SZKW*860132060346475*0013*REMIND_CH_MEDICINE2,4-1
         msg = msg[1:-1]
         msg_tmp = msg.decode('ascii')
-        msg_tmp = msg_tmp.split('REMIND,')
-        msg_tmp = msg_tmp[1]
-
-        alarm_new  = EventMesh.publish("read_alarminjson")
-        # print("alarm_list:{} msg_tmp:{}",alarm_new,msg_tmp)
-        k=1
+        msg_tmp_new = msg_tmp.split('REMIND,')[1]
+        msg_tmp_data = msg_tmp.split('REMIND')[1]
         count = 0
+        for i in str(msg_tmp_data):
+            # print("i",i)
+            if i == ",":
+                count+=1
         
-        for i in range(len(str(msg_tmp))):#寻找有多少个,号
-            if msg_tmp[i] == ',':#, , ,
-                k+=1
-        if len(alarm_new) > 2:
-            for i in range(0,len(alarm_new)-2):
-                del alarm_new[2]
-        # print("alarm_new:{}",alarm_new)
-        for j in range(2,2+k):#0 1是开关机,234是闹钟
+        normal_alarm_save = []
+        alarm_day = []
+        alarm_switch = 0
+
+        print("count",count,msg_tmp_new)
+        if count >= 3:
+            count = 3
+        for i in range(0,count):#默认是三个时间多了也不保存
             alarm_day = []
-            alarm_week = []
-            alarm_total_data = []
-            if k == 1:
-                if len(msg_tmp) != 0:
-                    alarm_data = msg_tmp.split('-')#-作为分隔符
-                    alarm_switch = int(alarm_data[1])#开关
-                    alarm_day_num = int(alarm_data[2])#天
-                    alarm_time = alarm_data[0]#时间
-                    alarm_time_tmp = alarm_time.split(':')#冒号分隔时间 时 分
-                    alarm_time_hour = int(alarm_time_tmp[0])
-                    alarm_time_min = int(alarm_time_tmp[1])
-                    if alarm_day_num == 3:
-                        alarm_week = alarm_data[3]#星期
-
-                    if alarm_day_num == 2:#每一天
-                        alarm_day = [1,2,3,4,5,6,0]
-                    elif alarm_day_num == 3:#自定义
-                        for i in range(0,7):
-                            if alarm_week[i] != '0':
-                                alarm_day.append(i)
-                    alarm_new.append({"idx": j, "hour": alarm_time_hour, "minute": alarm_time_min, "days":alarm_day, "enabled": alarm_switch,"repeart":alarm_day_num})
-            else:
-                if len(msg_tmp) != 0:
-                    alarm_total_data = msg_tmp.split(',')[count]
-                    count+=1
-                    b = alarm_total_data.find('-')
-                    if b != -1:
-                        alarm_data = alarm_total_data.split('-')#-作为分隔符
-                        alarm_switch = int(alarm_data[1])#开关
-                        alarm_day_num = int(alarm_data[2])#天
-                        alarm_time = alarm_data[0]#时间
-                        alarm_time_tmp = alarm_time.split(':')#冒号分隔时间 时 分
-                        alarm_time_hour = int(alarm_time_tmp[0])
-                        alarm_time_min = int(alarm_time_tmp[1])
-                        if alarm_day_num == 3:
-                            alarm_week = alarm_data[3]#星期
-
-                        if alarm_day_num == 2:#每一天
-                            alarm_day = [1,2,3,4,5,6,0]
-                        elif alarm_day_num == 3:#自定义
+            alarm_data = str(msg_tmp_new.split(',')[i])
+            # print("i",i,sleep_data)
+            if len(alarm_data) != 0:
+                b = alarm_data.find('-')
+                if b != -1:
+                    alarm_time = alarm_data.split('-')[0]#-作为分隔符
+                    alarm_switch = int(alarm_data.split('-')[1])#开关
+                    alarm_repeat = int(alarm_data.split('-')[2])#是单次还是每天 还是自定义
+
+                    alarm_hour = int(alarm_time.split(":")[0])#时间
+                    alarm_min = int(alarm_time.split(":")[1])#冒号分隔时间 时 分
+                    
+                    
+                    if alarm_repeat == 2:#每一天
+                        alarm_day = [0,1,2,3,4,5,6]
+                    elif alarm_repeat == 3:#自定义
+                        alarm_day_tmp = alarm_data.split('-')[3]#-作为分隔符
+                        if len(str(alarm_day_tmp)) != 0:
                             for i in range(0,7):
-                                if alarm_week[i] != '0':
+                                if alarm_day_tmp[i] != '0':
                                     alarm_day.append(i)
-                        alarm_new.append({"idx": j, "hour": alarm_time_hour, "minute": alarm_time_min, "days":alarm_day, "enabled": alarm_switch,"repeart":alarm_day_num})
-                        
-        # print("alarm_new end:{}",alarm_new)
+                    else:#单次 1
+                       alarm_day=[] 
+                    # if alarm_switch = 0:
+                    normal_alarm_save.append({"hour":alarm_hour,"min":alarm_min,"day":alarm_day,"enable":alarm_switch})
         
-        with open("/ext/static/storage_file/alarm_msg.json", 'w',encoding='utf-8') as fd:
-            ujson.dump(alarm_new,fd)
+        EventMesh.publish("set_storage_config",["normal_alarm",normal_alarm_save])
+        # normal_alarm = EventMesh.publish("get_storage_config","normal_alarm")
+
+        # print("recv REMIND_SEND:{} normal_alarm ;{}".format(msg,normal_alarm))
+       
+        EventMesh.publish(constants.PROTOCOL.REMIND_SEND)   
         EventMesh.publish("push_update_alarm_show")
-        
-        # EventMesh.publish("add_alarm",[0,msg_tmp])
-        EventMesh.publish(constants.PROTOCOL.REMIND_SEND)
 
 
 class HRSTART_ProtoCol(ProtoCol):
@@ -1093,7 +1071,7 @@ class btemp2_ProtoCol(ProtoCol):#上传体温数据
         send_data = self.PID+"*%s*%04X*btemp2"%(self.imei,len_size)
         MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,len_size,"btemp2")
         MD5_SIGN = self.pack_MD5_head(MD5_head_data)
-        data = "[%s%s,%d,%f]"%(str(MD5_SIGN),send_data,1,msg[1])
+        data = "[%s%s,%d,%s]"%(str(MD5_SIGN),send_data,1,str(msg[1]))
         # print("btemp2:data:%s"%(data))
         # 通过socket发送到服务器端
         EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
@@ -1300,7 +1278,6 @@ class bootoff_ProtoCol(ProtoCol):
         EventMesh.publish(constants.PROTOCOL.BOOTOFF_SEND)  
 
 
-#sos家庭号码
 class sosHome_dial_ProtoCol(ProtoCol):
     """sos家庭号码"""
     TYPE = "SOS"
@@ -1327,18 +1304,22 @@ class sosHome_dial_ProtoCol(ProtoCol):
         # print("sosHome_dial_ProtoCol:send data :{} {}".format(len(msg_tmp),msg_tmp))
         #b'[SZKW*860132060006970*0015*sosHome_dial_ProtoCol,15521469561,10086,15521469561]'
         i = 0
-        for i in range(len(msg_tmp)-1):
-            # print("sos:send data :{}".format(msg_tmp[i+1]))
+        num = 0
+        count = 0
+        print("sos msg_tmp",msg_tmp)
+        if len(msg_tmp) > 4:
+            num = 3
+        else:
+            num = len(msg_tmp)-1
+        data = []
+        for i in range(num):
+            print("sos:send data :{}".format(msg_tmp[i+1]))
             if len(msg_tmp[i+1]) != 0:
                 EventMesh.publish("set_storage_config",["SOS_NUMBER{}".format(i+1),msg_tmp[i+1]])
-                # print("read_data:{} msg_tmp:{}".format(read_data,msg_tmp[i+1]))
-       
-        if (len(msg_tmp)-1) == 3:
-            EventMesh.publish("set_dial_sos_number",[msg_tmp[1],msg_tmp[2],msg_tmp[3]])
-        elif (len(msg_tmp)-1) == 2:
-            EventMesh.publish("set_dial_sos_number",[msg_tmp[1],msg_tmp[2]])
-        elif (len(msg_tmp)-1) == 1:
-            EventMesh.publish("set_dial_sos_number",[msg_tmp[1]])
+                data.append(str(msg_tmp[i+1]))
+                count+=1
+        print("data:{}".format(data))
+        EventMesh.publish("set_dial_sos_number",data)
              
         EventMesh.publish(constants.PROTOCOL.SOS_SEND)  
   
@@ -1632,6 +1613,362 @@ class KEYBRD_ProtoCol(ProtoCol):
         # print("KEYBRD!!!!!!!!!!!!!",msg)
         EventMesh.publish(constants.PROTOCOL.KEYBRD_SEND)  
 
+
+class TKS_ProtoCol(ProtoCol):
+    """微聊"""
+    TYPE = "TKS"
+    
+
+    def send(self, event, msg):
+        # print("TK send:{}".format(msg))
+        if len(str(msg)) == 1:
+
+            len_size = len(str(msg))+len("TKS,")
+            #  实例:[XT*334588000000156*0009*TK,1]
+            send_data = self.PID+"*%s*%04X*TKS"%(self.imei,len_size)
+            MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,len_size,"TKS")
+            MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+            data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
+            print("TKS:data:%s"%(data))
+            # 通过socket发送到服务器端
+            EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+        else:
+            # [SZKW*YYYYYYYYYYYYYYY*LEN*TK,AMR 格式音频数据]
+            #[XT*YYYYYYYYYYYYYYY*LEN*TKS,秒数(十进制),AMR 格式音频数据]
+            arm_data = msg[1]
+            arm_sec = msg[0]
+            # print("TK_ProtoCol:msgtype:{} arm_sec:{}".format(len(msg[1]),arm_sec))
+
+            arm = bytearray()
+            for i in range(len(arm_data)):
+                if arm_data[i] == 0x7d:
+                    arm.extend(b'\x7d\x01')
+                elif arm_data[i] == 0x5b :
+                    arm.extend(b'\x7d\x02')
+                elif arm_data[i] == 0x5d :
+                    arm.extend(b'\x7d\x03')
+                elif arm_data[i] == 0x2c :
+                    arm.extend(b'\x7d\x04')
+                elif arm_data[i] == 0x2a :
+                    arm.extend(b'\x7d\x05')
+                else :
+                    arm.append(arm_data[i])
+                
+            datalen = len(arm) +len("TKS")+len(str(arm_sec))+1
+            #Wechat_log("len(str(arm_sec)):{}".format(len(str(arm_sec))+1))
+            send_data = bytearray(self.PID+"*%s*%04X*TKS,%d,"%(self.imei,datalen,arm_sec))
+            send_data.extend(arm)
+            MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,datalen,"TKS")
+            MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+            data = bytearray('[')
+            data.extend(MD5_SIGN)
+            data.extend(send_data)
+            data.extend(']')
+            # print("TK:send data:%s MD5_head_data:%s"%(data,MD5_head_data))
+            EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+
+    def recv(self, event, msg):
+        """
+
+        ("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
+        @param event: 微聊
+        @param msg: 接收到的下行数据
+        [SZKW*860132060004322*20BD*TK,#!AMR...]
+        """
+        #Wechat_log("K_ProtoCol:recv:data:{}".format(msg))
+        # print("TK recv:{}".format(msg))
+        msg_tmp = msg.decode('ascii')
+        str = msg_tmp.split('TKS,')
+        # Wechat_log("TK_ProtoCol:recv:len:{} {} {}".format(len(msg),len(str),msg_tmp.find("#!AMR")))
+        if  msg_tmp.find("#!AMR") != -1: #是否是服务器下发音频数据
+            # Wechat_log("TK_ProtoCol:recv:datalen{}".format(len(msg)))
+            arm_data = bytearray(str[1])#获取amr输出
+            get_wechat_data = EventMesh.publish("get_wechat_data")
+            
+            MXA_MSG = get_wechat_data[0]
+            wechat_recode_list = get_wechat_data[1]
+            wechat_num = wechat_recode_list["num"]
+            # Wechat_log("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
+            
+            if wechat_num >= MXA_MSG:
+                wechat_num = 0 
+            if wechat_num == 0:
+                wechat_num += 1 
+            elif wechat_num > 0:
+                wechat_num += 1 
+          
+
+            print("num_total:datalen:{} {}".format(MXA_MSG,wechat_recode_list))
+            wechat_recode_list["%02d"%(wechat_num)] = "R:{}".format(3)
+            wechat_recode_list['num'] = wechat_num
+            EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
+            #写语音文件数据
+            screen_NAME = EventMesh.publish("get_screen_NAME")
+            get_lcd_state = EventMesh.publish("get_lcd_state")
+            if screen_NAME != "wechat" or get_lcd_state == 0:
+                EventMesh.publish("load_screen", {"screen": "wechat_popup"})
+            else:
+                EventMesh.publish("wechat_updata_list_show")
+            # path = "/ext/static/storage_file/audio_amr/amr/{}.amr".format(wechat_num)
+            path = "/ext/static/storage_file/{}.amr".format(wechat_num)
+            with open(path,"w") as fd:
+                arm = bytearray()
+                j = 0
+                for i in range(len(arm_data)):
+                    if arm_data[j] == 0x7d and arm_data[j+1] == 0x01:
+                        arm.extend(b'\x7d')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x02:
+                        arm.extend(b'\x5b')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x03:
+                        arm.extend(b'\x5d')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x04:
+                        arm.extend(b'\x2c')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x05:
+                        arm.extend(b'\x2a')
+                        j+=1
+                    else :
+                        arm.append(arm_data[j])
+                    j+=1
+                    if j >= len(arm_data):
+                        break
+                fd.write(arm)
+            EventMesh.publish(constants.PROTOCOL.TKS_SEND,1)
+
+            
+            
+
+class TK_ProtoCol(ProtoCol):
+    """微聊"""
+    TYPE = "TK"
+    
+
+    def send(self, event, msg):
+        # print("TK send:{}".format(msg))
+        if len(str(msg)) == 1:
+
+            len_size = len(str(msg))+len("TK,")
+            #  实例:[XT*334588000000156*0009*TK,1]
+            send_data = self.PID+"*%s*%04X*TK"%(self.imei,len_size)
+            MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,len_size,"TK")
+            MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+            data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
+            print("TK:data:%s"%(data))
+            # 通过socket发送到服务器端
+            EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+        else:
+            # [SZKW*YYYYYYYYYYYYYYY*LEN*TK,AMR 格式音频数据]
+            #[XT*YYYYYYYYYYYYYYY*LEN*TKS,秒数(十进制),AMR 格式音频数据]
+            arm_data = msg[1]
+            arm_sec = msg[0]
+            # print("TK_ProtoCol:msgtype:{} arm_sec:{}".format(len(msg[1]),arm_sec))
+
+            arm = bytearray()
+            for i in range(len(arm_data)):
+                if arm_data[i] == 0x7d:
+                    arm.extend(b'\x7d\x01')
+                elif arm_data[i] == 0x5b :
+                    arm.extend(b'\x7d\x02')
+                elif arm_data[i] == 0x5d :
+                    arm.extend(b'\x7d\x03')
+                elif arm_data[i] == 0x2c :
+                    arm.extend(b'\x7d\x04')
+                elif arm_data[i] == 0x2a :
+                    arm.extend(b'\x7d\x05')
+                else :
+                    arm.append(arm_data[i])
+                
+            datalen = len(arm) + len("TK")+len(str(arm_sec))+1
+            #Wechat_log("len(str(arm_sec)):{}".format(len(str(arm_sec))+1))
+            send_data = bytearray(self.PID+"*%s*%04X*TK,"%(self.imei,datalen))
+            send_data.extend(arm)
+            MD5_head_data = self.PID+"*%s*%04X*%s"%(self.imei,datalen,"TK")
+            MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+            data = bytearray('[')
+            data.extend(MD5_SIGN)
+            data.extend(send_data)
+            data.extend(']')
+            # print("TK:send data:%s MD5_head_data:%s"%(data,MD5_head_data))
+            EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+
+    def recv(self, event, msg):
+        """
+
+        ("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
+        @param event: 微聊
+        @param msg: 接收到的下行数据
+        [SZKW*860132060004322*20BD*TK,#!AMR...]
+        """
+        #print("K_ProtoCol:recv:data:{}".format(msg))
+        # print("TK recv:{}".format(msg))
+        msg_tmp = msg.decode('ascii')
+        str = msg_tmp.split('TK,')
+        # Wechat_log("TK_ProtoCol:recv:len:{} {} {}".format(len(msg),len(str),msg_tmp.find("#!AMR")))
+        if  msg_tmp.find("#!AMR") != -1: #是否是服务器下发音频数据
+            # Wechat_log("TK_ProtoCol:recv:datalen{}".format(len(msg)))
+            arm_data = bytearray(str[1])#获取amr输出
+            get_wechat_data = EventMesh.publish("get_wechat_data")
+            
+            MXA_MSG = get_wechat_data[0]
+            wechat_recode_list = get_wechat_data[1]
+            wechat_num = wechat_recode_list["num"]
+            # print("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
+            
+            if wechat_num >= MXA_MSG:
+                wechat_num = 0 
+            if wechat_num == 0:
+                wechat_num += 1 
+            elif wechat_num > 0:
+                wechat_num += 1 
+          
+
+            print("num_total:datalen:{} {}".format(MXA_MSG,wechat_recode_list))
+            wechat_recode_list["%02d"%(wechat_num)] = "R:{}".format(3)
+            wechat_recode_list['num'] = wechat_num
+            EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
+            #写语音文件数据
+            screen_NAME = EventMesh.publish("get_screen_NAME")
+            get_lcd_state = EventMesh.publish("get_lcd_state")
+            if screen_NAME != "wechat" or get_lcd_state == 0:
+                EventMesh.publish("load_screen", {"screen": "wechat_popup"})
+            else:
+                EventMesh.publish("wechat_updata_list_show")
+            # path = "/ext/static/storage_file/audio_amr/amr/{}.amr".format(wechat_num)
+            path = "/ext/static/storage_file/{}.amr".format(wechat_num)
+            with open(path,"w") as fd:
+                arm = bytearray()
+                j = 0
+                for i in range(len(arm_data)):
+                    if arm_data[j] == 0x7d and arm_data[j+1] == 0x01:
+                        arm.extend(b'\x7d')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x02:
+                        arm.extend(b'\x5b')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x03:
+                        arm.extend(b'\x5d')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x04:
+                        arm.extend(b'\x2c')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x05:
+                        arm.extend(b'\x2a')
+                        j+=1
+                    else :
+                        arm.append(arm_data[j])
+                    j+=1
+                    if j >= len(arm_data):
+                        break
+                fd.write(arm)
+            EventMesh.publish(constants.PROTOCOL.TK_SEND,1)
+
+            
+            
+            
+
+class MESSAGE_ProtoCol(ProtoCol):
+    """微聊"""
+    TYPE = "MESSAGE"
+    
+
+    def send(self, event, msg):
+       
+        #[XT*334588000000156*0007*MESSAGE]
+        send_data = self.PID+"*%s*0007*MESSAGE"%(self.imei)
+        MD5_SIGN = self.pack_MD5_head(send_data)
+        data = "[%s%s]"%(str(MD5_SIGN),send_data)
+        #Wechat_log("POWEROFF_ProtoCol:send:%s"%(data))
+        # 通过socket发送到服务器端
+        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+    def recv(self, event, msg):
+        """
+
+        @param event: 微聊文字
+        @param msg: 接收到的下行数据
+        """
+        msg = msg[1:-1]
+
+        msg_s = msg.decode('ascii')
+        msg_s = msg_s.split(',')
+        msg_s = msg_s[1]
+        # Wechat_log("msg_tmp:len:{}\r\n data:{}".format(len(msg_s),msg_s))
+        
+
+        get_wechat_data = EventMesh.publish("get_wechat_data")
+        
+        MXA_MSG = get_wechat_data[0]
+        wechat_recode_list = get_wechat_data[1]
+        wechat_num = wechat_recode_list["num"]
+        # Wechat_log("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
+        
+        if wechat_num >= MXA_MSG:
+            wechat_num = 0 
+        if wechat_num == 0:
+            wechat_num += 1 
+        elif wechat_num > 0:
+            wechat_num += 1 
+        msg_txt = {}
+        # 0 1 2 3
+        print("wechat_num:init {}".format(wechat_num))
+        msg_txt = UnicodeHexStr_To_Utf8Str(msg_s)
+        # Wechat_log("msg_txt:{}".format(msg_txt))
+        wechat_recode_list["%02d"%(wechat_num)] = "T:{}".format(msg_txt)
+        wechat_recode_list['num'] = wechat_num
+        EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
+        # Wechat_log("wechat_recode_list:len data:{}".format(wechat_recode_list))
+        EventMesh.publish(constants.PROTOCOL.MESSAGE_SEND)
+        screen_NAME = EventMesh.publish("get_screen_NAME")
+        get_lcd_state = EventMesh.publish("get_lcd_state")
+        if screen_NAME != "wechat" or get_lcd_state == 0:
+            EventMesh.publish("load_screen", {"screen": "wechat_popup"})
+        else:
+            EventMesh.publish("wechat_updata_list_show")
+            
+# 平台发送:
+# [XT*YYYYYYYYYYYYYYY*LEN*FACTORY]
+# 实例:[XT*334588000000156*0007*FACTORY]
+# 终端回复:
+# [XT*YYYYYYYYYYYYYYY*LEN*FACTORY]
+# 实例:[XT*334588000000156*0007*FACTORY]
+# 说明:终端恢复出厂设置,里面设置的号码都将清空
+class FACTORY_ProtoCol(ProtoCol):#睡眠时间
+    """
+    实例:[XT*334588000000156*0008*FACTORY]
+    终端回复
+    [XT*YYYYYYYYYYYYYYY*LEN*WLKEY]
+    实例:[XT*334588000000156*0006*FACTORY]
+    """
+    TYPE = "FACTORY"
+    
+    def send(self, event, msg):
+        send_data = self.PID+"*%s*0007*FACTORY"%(self.imei)
+        MD5_SIGN = self.pack_MD5_head(send_data)
+        data = "[%s%s]"%(str(MD5_SIGN),send_data)
+        # EventMesh.debug_log("FACTORY:send:%s"%(data))
+        # 通过socket发送到服务器端
+        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+    def recv(self, event, msg):
+
+        # EventMesh.debug_log("FACTORY!!!!!!!!!")
+        # msg = msg[1:-1]
+        # msg_tmp = msg.decode('ascii')
+        # msg_data = msg_tmp.split(',')
+        # EventMesh.debug_log("WLKEY_ProtoCol".format(msg_data[1]))
+        # EventMesh.publish("set_storage_config",["WLKEY",msg_data[1]])
+        EventMesh.publish("app_factory_cb")
+        EventMesh.publish(constants.PROTOCOL.FACTORY_SEND) 
+        # EventMesh.publish("app_factory",None)#app恢复出厂
+
+
 class ProtoColResolver(object):
     def __init__(self):
         self.protocol_list = []
index ec2750e..22cb6bd 100644 (file)
@@ -1050,12 +1050,7 @@ class DialingScreen(Screen):
         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("return_prev_screen") 
+        EventMesh.publish("return_prev_screen") 
 
     def Close(self):
         self.timer.stop()
@@ -1905,7 +1900,7 @@ class MessageFullScreen(Screen):
         EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def btn8_press(self):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
@@ -2386,10 +2381,9 @@ class MsgDetailScreen(Screen):
     def done_return(self):
         EventMesh.publish("load_screen", {"screen": "popup"})
 
-    def hangup(self,e):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
+
     def btn8_press(self):
         EventMesh.publish("load_screen", {"screen": "popup"})
 
@@ -2687,11 +2681,11 @@ class HeartrateScreen(Screen):
             EventMesh.publish(constants.EVENT.STOP_HEART)
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "health"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "health"})
-        
+        EventMesh.publish("return_prev_screen")
+
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
         EventMesh.publish("load_screen", {"screen": "main_menu"})
@@ -2831,10 +2825,10 @@ class ToolboxScreen(Screen):
             self.is_sliding =0
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
@@ -3044,12 +3038,7 @@ class IncomingCallScreen(Screen):
         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("return_prev_screen") 
+        EventMesh.publish("return_prev_screen") 
 
     def btn1_release(self):
         pass
@@ -3616,12 +3605,7 @@ class OnCallScreen(Screen):
         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("return_prev_screen")
+        EventMesh.publish("return_prev_screen")
         
     def Close(self):
         self.timer.stop()
@@ -3694,11 +3678,11 @@ class StepScreen(Screen):
         self.timer.stop()
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "toolbox"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "toolbox"})
-        
+        EventMesh.publish("return_prev_screen")
+
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
         EventMesh.publish("load_screen", {"screen": "main_menu"})
@@ -3738,24 +3722,24 @@ class WeatherScreen(Screen):
             weather_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
 
             no_weather_img = lv.img(weather_screen)
-            no_weather_img.set_pos(10, 10)
+            no_weather_img.set_pos(5, 10)
             no_weather_img.set_size(135, 120)
             no_weather_img.set_src("E:/static/update.png")
             no_weather_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
 
             weather_tem_label = lv.label(weather_screen)
-            weather_tem_label.set_pos(155, 44)
-            weather_tem_label.set_size(60, 50)
-            weather_tem_label.set_text("_ _")
+            weather_tem_label.set_pos(145, 44)
+            weather_tem_label.set_size(240-145, 50)
+            weather_tem_label.set_text("_ _ ℃")
             weather_tem_label.set_long_mode(lv.label.LONG.WRAP)
             weather_tem_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
             weather_tem_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
-            no_weather_degree = lv.img(weather_screen)
-            no_weather_degree.set_pos(200, 40)
-            no_weather_degree.set_size(22, 22)
-            no_weather_degree.set_src("U:/static/degree.png")
-            no_weather_degree.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+            # no_weather_degree = lv.img(weather_screen)
+            # no_weather_degree.set_pos(200, 40)
+            # no_weather_degree.set_size(22, 22)
+            # # no_weather_degree.set_src("U:/static/degree.png")
+            # no_weather_degree.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
 
             weather_detail_label = lv.label(weather_screen)
             weather_detail_label.set_pos(155, 80)
@@ -3797,7 +3781,7 @@ class WeatherScreen(Screen):
 
 
     def update_weather_data(self, event, msg):
-        global weather_screen,weather_img,no_weather_img,weather_tem_label,no_weather_degree,\
+        global weather_screen,weather_img,no_weather_img,weather_tem_label,\
             weather_detail_label,weather_location_label,no_connect_label ,no_connect_label1 
         connect = EventMesh.publish(constants.EVENT.GET_CONNECT) #获取网络状态
         self.weather_data = EventMesh.publish("get_weather_data")
@@ -3818,14 +3802,9 @@ class WeatherScreen(Screen):
 
                     temp = self.weather_data[4]
                     if temp == None:
-                        no_weather_degree.set_pos(200, 40)
-                        weather_tem_label.set_text("_ _")
+                        weather_tem_label.set_text("_ _℃")
                     else:
-                        if len(temp) > 2:
-                            no_weather_degree.set_pos(218, 40)
-                        else:
-                            no_weather_degree.set_pos(200, 40)
-                        weather_tem_label.set_text("{}".format(temp))
+                        weather_tem_label.set_text("{} ℃".format(temp))
 
                     date = self.weather_data[0]
                     if date != '{}':
@@ -3841,19 +3820,19 @@ class WeatherScreen(Screen):
                     else:
                         weather_location_label.set_text("--")
                 else:#已联网未获取到天气数据
-                    no_weather_degree.set_pos(200, 40)
+
                     weather_location_label.set_text(" ")
                     weather_detail_label.set_text("-/-")
-                    weather_tem_label.set_text("_ _")
+                    weather_tem_label.set_text("_ _℃")
 
                     no_connect_label.set_text("未获取网络数据")
                     no_connect_label1.set_text("请稍候重试")
 
             else:
-                no_weather_degree.set_pos(200, 40)
+
                 weather_location_label.set_text(" ")
                 weather_detail_label.set_text("-/-")
-                weather_tem_label.set_text("_ _")
+                weather_tem_label.set_text("_ _℃")
                 
                 no_weather_img.clear_flag(lv.obj.FLAG.HIDDEN)
                 weather_img.add_flag(lv.obj.FLAG.HIDDEN)
@@ -3861,10 +3840,10 @@ class WeatherScreen(Screen):
                 no_connect_label1.set_text("请联网后重试")
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "toolbox"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "toolbox"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
@@ -4092,7 +4071,7 @@ class ContactsScreen(Screen):
         # EventMesh.publish("load_screen", {"screen": "main_menu"})
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
@@ -4232,32 +4211,32 @@ class TemperatureScreen(Screen):
             temp_line7.add_style(style_line_blue,0)
 
             temperature_bpm_label = lv.label(temperature_screen)
-            temperature_bpm_label.set_size(120, 40)
-            temperature_bpm_label.set_pos(100, 244)
-            temperature_bpm_label.set_text("- -")
+            temperature_bpm_label.set_size(240-100, 40)
+            temperature_bpm_label.set_pos(100, 249)
+            temperature_bpm_label.set_text("- -℃")
             temperature_bpm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
             temperature_bpm_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
 
             temperature_keep_label = lv.label(temperature_screen)
-            temperature_keep_label.set_size(140, 40)
-            temperature_keep_label.set_pos(100, 280)
+            temperature_keep_label.set_size(140, 35)
+            temperature_keep_label.set_pos(100, 285)
             temperature_keep_label.set_text("未出值")
             temperature_keep_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
             temperature_keep_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
 
 
-            temperature_degree_img = lv.img(temperature_screen)
-            temperature_degree_img.set_pos(156, 242)
-            temperature_degree_img.set_size(22, 22)
-            temperature_degree_img.set_src("U:/static/degree.png")
-            temperature_degree_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+            # temperature_degree_img = lv.img(temperature_screen)
+            # temperature_degree_img.set_pos(156, 242)
+            # temperature_degree_img.set_size(22, 22)
+            # temperature_degree_img.set_src("U:/static/degree.png")
+            # temperature_degree_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 
             self.meta = temperature_screen
             temp_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)),
                 lv.EVENT.CLICKED, None)
             
-        temperature_bpm_label.set_text("- -")
+        temperature_bpm_label.set_text("- -℃")
         temperature_start_label.set_text("正在测量中.")
         
 
@@ -4266,11 +4245,11 @@ class TemperatureScreen(Screen):
 
     def restart_up(self,e):
         global temperature_done_label,temperature_keep_label,temperature_bpm_label,temperature_start_label,temp_reset_btn_img
-        temperature_bpm_label.set_text("- -")
+        temperature_bpm_label.set_text("- -℃")
         temperature_keep_label.set_text("未出值")
         temp_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN)
         self.point = 0
-        temperature_bpm_label.set_text("- -")
+        temperature_bpm_label.set_text("- -℃")
         temperature_start_label.set_text("正在测量中.")
         EventMesh.publish("set_temp_state",1)
         EventMesh.publish(constants.EVENT.START_TEMP)
@@ -4385,9 +4364,9 @@ class TemperatureScreen(Screen):
         # print("self.temp:{}".format(temp))
         if self.point >= 2:
             if temp != 0:
-                temperature_bpm_label.set_text("{}".format(tmp))
+                temperature_bpm_label.set_text("{} ℃".format(tmp))
             else:
-                temperature_bpm_label.set_text("- -")
+                temperature_bpm_label.set_text("- -℃")
         
         if self.point%4 == 0 :
             temperature_start_label.set_text("正在测量中..")
@@ -4431,7 +4410,7 @@ class TemperatureScreen(Screen):
             if WEAR == 0:
                 temp = 0
                 temperature_start_label.set_text("佩戴异常,点击重测")
-                temperature_bpm_label.set_text("- -")
+                temperature_bpm_label.set_text("- -℃")
                 temperature_keep_label.set_text(" ")
                 temperature_keep_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
             else :
@@ -4462,10 +4441,10 @@ class TemperatureScreen(Screen):
         EventMesh.publish(constants.EVENT.STOP_TEMP)
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "health"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "health"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
@@ -4779,10 +4758,10 @@ class Spo2Screen(Screen):
             EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "health"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "health"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
@@ -5319,12 +5298,12 @@ class CountdownScreen(Screen):
         if self.g_end == 1:
             EventMesh.publish("load_screen", {"screen": "countdown"})
         else:
-            EventMesh.publish("load_screen", {"screen": "toolbox"})
+            EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
         if self.g_state == 0:
             self.timer.stop()
-        EventMesh.publish("load_screen", {"screen": "toolbox"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         if self.g_state == 0:
@@ -5377,7 +5356,7 @@ class CountdownEndScreen(Screen):
         self.FIND_timer_count += 1
         if self.FIND_timer_count >= 4: #120秒
             self.stop_FIND()
-            EventMesh.publish("load_screen", {"screen": "countdown"})
+            EventMesh.publish("return_prev_screen")
             return
         self.aud.play(1, 1, 'E:/static/audio_audio_haixiu.mp3') 
     
@@ -5391,33 +5370,32 @@ class CountdownEndScreen(Screen):
 
     def done_left_to_right(self):
         self.stop_FIND()
-        EventMesh.publish("load_screen", {"screen": "countdown"})
+        EventMesh.publish("return_prev_screen")
 
     def done_right_to_left(self):
         self.stop_FIND()
-        EventMesh.publish("load_screen", {"screen": "countdown"})
+        EventMesh.publish("return_prev_screen")
 
     def done_bottom_to_top(self):
         self.stop_FIND()
-        EventMesh.publish("load_screen", {"screen": "countdown"})
+        EventMesh.publish("return_prev_screen")
 
     def done_top_to_bottom(self):
         self.stop_FIND()
-        EventMesh.publish("load_screen", {"screen": "countdown"})
+        EventMesh.publish("return_prev_screen")
 
     def done_return(self):
         self.stop_FIND()
-        EventMesh.publish("load_screen", {"screen": "countdown"})
+        EventMesh.publish("return_prev_screen")
 
     def done_click(self):
         print("count down !!!!!!!!!!")
         self.stop_FIND()
-        EventMesh.publish("load_screen", {"screen": "countdown"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
         self.stop_FIND()
-        EventMesh.publish("load_screen", {"screen": "countdown"})
-
+        EventMesh.publish("return_prev_screen")
     def btn8_press(self):
         self.stop_FIND()
         EventMesh.publish("load_screen", {"screen": "main_menu"})
@@ -5695,12 +5673,12 @@ class StopwatchScreen(Screen):
     def done_return(self):
         if self.s_state == 0:
             self.timer.stop()
-        EventMesh.publish("load_screen", {"screen": "toolbox"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
         if self.s_state == 0:
             self.timer.stop()
-        EventMesh.publish("load_screen", {"screen": "toolbox"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         if self.s_state == 0:
@@ -5758,7 +5736,7 @@ class UIFINDScreen(Screen):
     def stop_FIND(self) :
         self.FIND_timer.stop()
         self.aud.stop()  #播放声音
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def Close(self):
         print("self.FIND_timer_Close")
@@ -5818,20 +5796,20 @@ class LowPowerScreen(Screen):
             self.meta = Lowpower_screen
 
     def done_left_to_right(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
     def done_right_to_left(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
     def done_bottom_to_top(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
     def done_top_to_bottom(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
     def done_click(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def btn8_press(self):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
@@ -5890,25 +5868,25 @@ class LowOnePowerScreen(Screen): #0%的电池电量
         EventMesh.publish("load_screen", {"screen": "poweroff_comfirm"})
 
     def done_left_to_right(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def done_right_to_left(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def done_bottom_to_top(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def done_top_to_bottom(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def done_click(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
 
     def btn8_press(self):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
@@ -6342,7 +6320,7 @@ class chargeOutScreen(Screen):
 rrestor_confirm_n_screen = None
 rrestor_confirm_n_screen_label = None
 
-#正在充电
+#
 class restore_confirmScreen(Screen):
     NAME = "restore_confirm"
     def __init__(self):
@@ -6352,6 +6330,9 @@ class restore_confirmScreen(Screen):
         self.count = 0
         self.timer1 = osTimer()
         self.timer2 = osTimer()
+        self.timer3 = osTimer()
+
+        EventMesh.subscribe("app_factory_cb",self.app_factory_cb)
 
     def initialization(self):
         global rrestor_confirm_n_screen ,rrestor_confirm_n_screen_label  
@@ -6390,6 +6371,17 @@ class restore_confirmScreen(Screen):
         self.timer1.stop()
         self.timer2.stop()
 
+    def app_factory_cb(self,event,msg):
+        ret = 0
+        ret = ql_fs.path_exists("/ext/static/storage_file")#电话本
+        if ret == True:
+            ql_fs.rmdirs("/ext/static/storage_file")
+            ql_fs.mkdirs("/ext/static/storage_file")
+        EventMesh.publish("alipay_unbind")
+        if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#已连接服务器发指令恢复出厂
+            EventMesh.publish(constants.PROTOCOL.DLT_SEND)
+        self.timer3.start(4000,0,self.timer_cb_threescond)
+        pass
     def timer_cb_threescond(self,e):
 
         Power.powerRestart()
@@ -6521,6 +6513,8 @@ class UI(object):
         self.screen = None
         self.screen_old = None
         self.screen_prev = None
+        self.screen_prev_new = None
+        self.screen_last = None
         self.screen_list = []
         self.lv = lv
         self.system_sleep_timer = osTimer()
@@ -6533,6 +6527,9 @@ class UI(object):
         self.main_id = 0
         self.set_interrup_flag = 0
         self.UI_high_priority_flag = 0 #如果=1,则当前ui不被打断
+        self.page_id = ["main_menu"]
+        self.page_count = 0
+
         self.level = EventMesh.publish("get_storage_config","brightness_level")
 
 
@@ -6580,6 +6577,10 @@ class UI(object):
         EventMesh.subscribe("publish_message_event_ui",self.publish_message_event_ui)
         EventMesh.subscribe("return_prev_screen",self.return_prev_screen)
 
+        EventMesh.subscribe("del_prev_screen",self.del_prev_screen)#退出当前界面就删除当前界面 进去需要保存当前界面
+        EventMesh.subscribe("add_new_screen",self.add_new_screen)#保存新的界面用作返回上一级
+
+
         self.system_sleep_timer.start(1000, 1, self.system_sleep_timer_cb)
 
     def publish_message_event_ui(self,event,msg):
@@ -6599,9 +6600,59 @@ class UI(object):
             # for scr in self.screen_list:
             #     if scr.handle_message_event(data) == 1 :
             #         break
+    def add_new_screen(self, event, msg):
+        if msg == "main_menu":
+            if self.page_count > 0:
+                self.page_id.clear()#清空所有
+            self.page_count = 0
+            self.page_id = ["main_menu"]
+            print("add_new_screen ",self.page_id,self.page_count)
+        else:
+            if self.page_count == None:
+                self.page_count = 0
+                self.page_id.clear()#清空所有
+                self.page_id = ["main_menu"]
+            last_screen = self.page_id[int(self.page_count)]
+            print("self.page_id",last_screen,msg,self.page_id,self.page_count)
+            if last_screen != msg and (msg in last_screen) == False:
+                self.page_count+=1
+                page_pre = "{}".format(msg)
+                self.page_id.append(page_pre) 
+
+    def del_prev_screen(self, event, msg):
+        if self.page_count > 0:
+            # print("del_prev_screen self.page_id",self.page_id,self.page_count)
+            if self.screen.meta_type != "popup":
+                del self.page_id[int(self.page_count)]
+                self.page_count-=1
+
+            if self.page_count == 0:
+                self.page_id.clear()#清空所有
+                self.page_id = ["main_menu"]
+
+        if self.page_count == None:
+            self.page_count = 0
+            self.page_id.clear()#清空所有
+            self.page_id = ["main_menu"]
     def return_prev_screen(self, event, msg):
-        if self.screen_prev != None:
-            EventMesh.publish("load_screen", {"screen": self.screen_prev.NAME})
+        EventMesh.publish("del_prev_screen")#退出当前界面就删除当前界面 进去需要保存当前界面
+
+        pre_page = self.page_id[int(self.page_count)]
+        # print("pre_page:data = {} self.page_count:{}".format(pre_page,self.page_count))
+        if len(pre_page) == 0:#预防是空的界面
+           self.page_count = 0
+           pre_page = "main_menu"
+
+        if self.page_count == None:
+            self.page_count = 0
+
+        if self.page_count == 0:
+            pre_page = "main_menu"
+        if pre_page != None:
+            EventMesh.publish("load_screen", {"screen": pre_page})
+        # if self.screen_prev != None:
+        #     print("self.screen_prev.NAME",self.screen_prev.NAME)
+        #     EventMesh.publish("load_screen", {"screen": self.screen_prev.NAME})
 
     def set_interrup_incall(self, event, msg):
         self.set_interrup_flag = msg
@@ -6857,9 +6908,14 @@ class UI(object):
                     self.screen_old.Close() #先关闭上一次界面
                     self.lv.img.cache_invalidate_src(None) #清img cache
                     self.lv.img.cache_set_size(16) #开img cache
-                    if self.screen_old.meta_type != "popup": #不是弹窗,保存上一个界面,用来返回
-                        self.screen_prev = self.screen_old #
-                self.screen_old = self.screen
+                    if self.screen.meta_type != "popup": #只要当前界面不是弹窗界面都要保存当前界面
+                        if self.screen_old.meta_type != "popup":#上个界面也不为弹窗界面
+                            self.screen_prev = self.screen_old #第二种方式
+                            screen_new = msg["screen"]
+                            # print('self.screen_prev.NAME:{} self.screen_old:{}'.format(self.screen_prev.NAME,self.screen.NAME))
+                            if self.screen_prev.NAME != self.screen.NAME:
+                                EventMesh.publish("add_new_screen",screen_new)#保存新的界面用作返回上一级 
+                
                 if msg.get("meta"):
                     self.screen.meta_info = msg.get("meta")
                 print("load_screen:post_processor_before_initialization")
@@ -6872,6 +6928,10 @@ class UI(object):
                 self.lv.scr_load(self.screen.get_meta())
                 
                 self.screen.post_processor_after_initialization()
+                self.screen_old = self.screen
+                if self.screen_prev == None:
+                    if self.screen.meta_type != "popup":
+                        self.screen_prev = self.screen
                 self.__lcd_on()
                 mem = gc.mem_free()
                 print('2剩余内存RAM:{} KB'.format(mem / 1024))
index bc77f77..072a09f 100644 (file)
@@ -703,9 +703,9 @@ print("restore_screen")
 restore_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 restore_label = lv.label(restore_screen)
-restore_label.set_pos(0, 100)
-restore_label.set_size(240, 40)
-restore_label.set_text("恢复出厂设置?")
+restore_label.set_pos(0, 90)
+restore_label.set_size(240, 70)
+restore_label.set_text("设备多有的数据将被清除,确定继续?")
 restore_label.set_long_mode(lv.label.LONG.WRAP)
 restore_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
 restore_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
@@ -883,13 +883,13 @@ class RestoreScreen(Screen):
         
 
     def concel(self, e):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
@@ -905,13 +905,13 @@ class UpdateScreen(Screen):
         update_return.add_event_cb(lambda e: EventMesh.callback_wrapper(self.back(e)),lv.EVENT.CLICKED, None)
     
     def back(self,e):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
        
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
@@ -943,10 +943,10 @@ class VersionScreen(Screen):
             EventMesh.publish("load_screen", {"screen": "factorymode"})
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
@@ -1012,7 +1012,7 @@ class PoweroffScreen(Screen):
         pass
         
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
         
     def confirm(self, e):
         EventMesh.publish("load_screen", {"screen": "poweroff_comfirm"})
@@ -1020,10 +1020,10 @@ class PoweroffScreen(Screen):
         
 
     def concel(self, e):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
@@ -1065,7 +1065,7 @@ class PowerOnScreen(Screen):
     def fun(self,*argc):
         EventMesh.publish("system_sleep_rest")#防止黑屏
         if self.count == 0:
-            self.aud.play(1, 1, 'E:/static/R_POWER_1.mp3')  #播放来电铃声
+            self.aud.play(1, 1, 'E:/static/R_POWER_1.mp3')  #播放来电铃声 
         else:
             play_state = EventMesh.publish("get_audio_state")#音频播放状态
             if play_state != None:
@@ -1197,13 +1197,13 @@ class LanguageScreen(Screen):
         self.meta = language_screen
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
 
 
 class DialswitchScreen(Screen):
@@ -1247,7 +1247,7 @@ class DialswitchScreen(Screen):
 
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
 
     def done_left_to_right(self):#右滑
         #print("done_left_to_right!!!!!!!!!")
@@ -1289,7 +1289,7 @@ class DialswitchScreen(Screen):
         self.timer.stop()
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
@@ -1327,7 +1327,7 @@ class ThemeswitchScreen(Screen):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
         
     def btn8_press(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
 
 # -------------------------------------------imei screen----------------------------------------------------------
 imei_screen = lv.obj()
@@ -1366,10 +1366,10 @@ class ImeiScreen(Screen):
         imei_label.set_text(imei)
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
@@ -1387,10 +1387,10 @@ class AppScreen(Screen):
         app_label.set_text(imei)
     
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
@@ -1584,10 +1584,10 @@ class BrightnessScreen(Screen):
 
     
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
@@ -1605,13 +1605,13 @@ class VolumeScreen(Screen):
         volume_alarm_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "alarmvolume"})), lv.EVENT.CLICKED, None)
 
     def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("load_screen", {"screen": "maiin_menu"})
 
 
 
@@ -1837,10 +1837,10 @@ class totalvolumeScreen(Screen):
 
     def done_return(self):
         self.aud.stop()
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
 
     def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "setting"})
+        EventMesh.publish("return_prev_screen")
         
     def btn8_press(self):
         EventMesh.publish("watch_top_show")