D10:
authordxy15521469561 <1731678236@qq.com>
Sat, 12 Oct 2024 06:36:34 +0000 (14:36 +0800)
committerdxy15521469561 <1731678236@qq.com>
Sat, 12 Oct 2024 06:36:34 +0000 (14:36 +0800)
加入ICCID协议
K01:
更新websockt

2.sdk-ZY/project/K01/sdk/services/microPython/ports/quectel/core/Makefile
2.sdk-ZY/project/K01/sdk/services/microPython/ports/quectel/core/ai.py
2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/EventMesh.py
2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/Makefile
2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/constants.py
2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/main_init.py
2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/protocol.py

index 034c280..d0380a3 100644 (file)
@@ -390,6 +390,7 @@ SRC_QSTR += \
                        source/modnfc.c \
                        source/nfc_sl6320.c \
                        source/modstk.c  \
+                       source/modmask.c \
                        source/modvoip.c
 
 
index 7de270e..e44724e 100644 (file)
@@ -1096,10 +1096,15 @@ class AIScreen(Screen):#AI_GUI
                     (AI_think_screen.has_flag(lv.obj.FLAG.HIDDEN)) == False:
                         EventMesh.publish("return_prev_screen")
         elif  code == lv.EVENT.SHORT_CLICKED:
+            # if msg != 0:
+            #     if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:
+            #         EventMesh.publish("load_screen", {"screen": "no_sim_popup_screen"})
             if msg == 1:
+                
                 self.talking_cb(e)
                 pass
             elif msg == 2:
+                
                 self.img_cb(e)
                 pass
             elif msg == 3:
@@ -1135,6 +1140,7 @@ class AIScreen(Screen):#AI_GUI
         self.tts_time_outcount = 0
 
     def talk_end_cancel_cb(self,e):#对话结束已经播放音频取消继续对话按钮
+        EventMesh.publish("system_sleep_rest")#防止黑屏
         if self.play_flag == 1:
             self.play_flag = 0
             self.aud.stopPlayStream()
@@ -1163,6 +1169,7 @@ class AIScreen(Screen):#AI_GUI
                 al_talk_end_screen_icon1.set_src("U:/static/AI/ai_result_can_stop.png")
         
     def talk_end_continue_cb(self,e):#连接超时确定按钮回调或者继续对话按钮
+        EventMesh.publish("system_sleep_rest")#防止黑屏
         self.Close()
         self.AI_label_answer = ""
         AI_no_net_screen.add_flag(lv.obj.FLAG.HIDDEN) #隐藏
@@ -1184,6 +1191,7 @@ class AIScreen(Screen):#AI_GUI
         pass
 
     def think_bt_cb(self,e):#正在思考确定按钮回调 取消播放
+        EventMesh.publish("system_sleep_rest")#防止黑屏
         self.Close()
         AI_no_net_screen.add_flag(lv.obj.FLAG.HIDDEN) #隐藏
         AI_listen_screen.add_flag(lv.obj.FLAG.HIDDEN)
@@ -1368,6 +1376,7 @@ class AIScreen(Screen):#AI_GUI
         #print("page_change3:str:{}".format(text_str_list[self.page_num])) 
 
     def listen_end_btcb(self,e):#说话完成确定按钮回调
+        EventMesh.publish("system_sleep_rest")#防止黑屏
         if self.AI_listen_end == 1:#说话完成 已有录音文字返回
             self.AI_listen_end = 0
             self.refresh_count = 0
@@ -1521,6 +1530,7 @@ class AIScreen(Screen):#AI_GUI
             self.ai_talk_end()
             
     def img_cb(self,e): #无网络 无数据按钮回调
+        EventMesh.publish("system_sleep_rest")#防止黑屏
         self.refresh_texttimer.stop()
         AI_no_net_screen.add_flag(lv.obj.FLAG.HIDDEN) #隐藏
         AI_listen_screen.add_flag(lv.obj.FLAG.HIDDEN)
@@ -1575,10 +1585,13 @@ class AIScreen(Screen):#AI_GUI
         
     #按下录音
     def talking_cb(self,e):
+        EventMesh.publish("system_sleep_rest")#防止黑屏
         self.press_state = 0
         self.refresh_count = 0
         self.refresh_texttimer.stop()
         signal = EventMesh.publish("screen_get_sig")
+        # if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:
+        #     EventMesh.publish("load_screen", {"screen": "no_sim_popup_screen"})
         if signal == -1 or EventMesh.publish("get_sim_Status") != 1:#网络不正常
             AI_listen_screen.add_flag(lv.obj.FLAG.HIDDEN)
             AI_think_screen.add_flag(lv.obj.FLAG.HIDDEN) #先隐藏
@@ -1810,7 +1823,6 @@ class AIScreen(Screen):#AI_GUI
             usys.print_exception(e)
             print("websocket_connect_chat error!!!\r\n")
             self.connect_timerout_popup(2)
-            return
         # 线程接收数据
         if self.AI_client_chat_recv_id != 0:
             try:
@@ -1901,7 +1913,6 @@ class AIScreen(Screen):#AI_GUI
                 usys.print_exception(e)
                 print("websocket_connect_tts ERROR:{}\r\n".format(e))
                 self.connect_timerout_popup(2)
-                return
             print("websocket_connect_tts:self.AI_client_tts {}\r\n".format(self.AI_client_tts))
         # 线程接收数据
         if self.AI_client_tts_recv_id != 0:
@@ -2098,7 +2109,6 @@ class AIScreen(Screen):#AI_GUI
             self.websocket_deconnect_asr()#先断一次,预防出错
         except Exception as e:
             usys.print_exception(e)   
-        
         try:
             if EventMesh.DEV_RES_MANAGE_AUTHEN_PLATFORM == 1: #加了设备资源管理鉴权平台的功能
                 token = EventMesh.publish("get_dev_token")
@@ -2117,7 +2127,6 @@ class AIScreen(Screen):#AI_GUI
             usys.print_exception(e)
             print("websocket_connect_asr error!!!\r\n")
             self.connect_timerout_popup(2)
-            return
         # 线程接收数据
         if self.AI_client_asr_recv_id != 0:
             try:
@@ -2209,34 +2218,45 @@ class AIScreen(Screen):#AI_GUI
                     #bytes_data = bytes(data[1])
                     #data[0].send(data[1])
                     if data[0] == self.AI_client_chat_num:
+                       
                         if self.AI_client_chat_isconnect == 0:
                             try:
                                 self.websocket_connect_chat()
+                                if self.AI_client_chat != None:
+                                    tmp = self.AI_client_chat.send(data[1])
+                                    print("chat send_data:{} tmp:{}".format(len(data[1]),tmp))
                             except Exception as e: #网络连接异常
                                 usys.print_exception(e)
-                        if self.AI_client_chat != None:
-                            tmp = self.AI_client_chat.send(data[1])
-                            print("chat send_data:{} tmp:{}".format(len(data[1]),tmp))
+                                print("chat websocket_connect_chat\r\n")
+                                self.connect_timerout_popup(2)
+                        
                     if data[0] == self.AI_client_asr_num:
                         if isinstance(data[1], str):
                             print("ASR:AI_client_asr_isconnect:{},data:{}",self.AI_client_asr_isconnect,data[1])
                         if self.AI_client_asr_isconnect == 0:
                             try:
                                 self.websocket_connect_asr()
+                                print("asr send_data:{}".format(len(data[1])))
+                                if self.AI_client_asr != None:
+                                    self.AI_client_asr.send(data[1])
                             except Exception as e: #网络连接异常
                                 usys.print_exception(e)
-                        print("asr send_data:{}".format(len(data[1])))
-                        if self.AI_client_asr != None:
-                            self.AI_client_asr.send(data[1])
+                                print("asr websocket_connect_asr\r\n")
+                                self.connect_timerout_popup(2)
+                        
                     if data[0] == self.AI_client_tts_num:
+                       
                         if self.AI_client_tts_isconnect == 0:
                             try:
                                 self.websocket_connect_tts() 
+                                print("tts send_data:{}".format((data[1])))
+                                if self.AI_client_tts != None:
+                                    self.AI_client_tts.send(data[1])
                             except Exception as e: #网络连接异常
                                 usys.print_exception(e)
-                        print("tts send_data:{}".format((data[1])))
-                        if self.AI_client_tts != None:
-                            self.AI_client_tts.send(data[1])
+                                print("asr websocket_connect_tts\r\n")
+                                self.connect_timerout_popup(2)
+                        
                 except Exception as e:
                     print("DeviceInfo_queue_thread:ERROR:{}".format(e))
                     usys.print_exception(e)
@@ -2330,6 +2350,7 @@ class AIScreen(Screen):#AI_GUI
     
     def Close(self):
         try:
+            
         #销毁线程
             if self.AI_audio_queue_thread_id != 0:
                 try:
index 912b3d0..a29bc49 100644 (file)
@@ -3,9 +3,9 @@ import usys
 import versions
 import ql_fs
 
-model = "D15"
-project = "D15"
-platform = "D15"#格物平台 不用的话选择空
+model = "D10"
+project = "D10"
+platform = "D10"#格物平台 不用的话选择空
 
 # project = "D10"
 # model = "D10"
index 4b64252..5c7c78d 100644 (file)
@@ -379,6 +379,7 @@ SRC_QSTR += \
                        source/code128_p.c \
                        source/modwlan.c\
                        source/modwlan.c \
+                       source/modmask.c \
                        source/machine_one_wire.c
 
 
index 38d9214..c21cf83 100644 (file)
@@ -180,6 +180,9 @@ class PROTOCOL:
 
     CALLCANCEL_SEND ="CALLCANCEL_SEND"
     CALLCANCEL_RECV = "CALLCANCEL_RECV"
+
+    ICCID_SEND = "ICCID_SEND"
+    ICCID_RECV = "ICCID_RECV"
     
 
 class EVENT:
index 8c4f115..e5dd013 100644 (file)
@@ -222,6 +222,7 @@ def main_init():
     pcr.add_support(protocol.RESET_ProtoCol())
     pcr.add_support(protocol.REMIND_CH_SIT_ProtoCol())
     pcr.add_support(protocol.SCREEN_SHOWProtoCol())
+    pcr.add_support(protocol.ICCID_ProtoCol())
 
     #视频通话
     if EventMesh.model == "D15":
index 2ab81a5..b9f8001 100644 (file)
@@ -23,6 +23,7 @@ import usys
 import request
 import umqtt 
 import modem
+import sim
 SHA256 = uhashlib.sha256
 import SecureData
 def server_init(server_type = None):
@@ -458,7 +459,13 @@ class SockManager(Abstract):
                 url = "http://app.api.thisiot.com/dev/device/check?imei={}&bid={}&sonce={}&sign={}".format(imei,pid_data,sonce_data,sign_data)
                 
                 # print("url:{}".format(url))
-                response = request.get(url)
+                response = 0
+                response_result  = 0
+                try:
+                    response = request.get(url)
+                    response_result = 1
+                except Exception as e:
+                    print("get jianquan\r\n")
                 data_tmp ={}
                 # d_server_addr = "device.miwitracker.com"
                 # d_server_port = 8505
@@ -466,49 +473,50 @@ class SockManager(Abstract):
                 # d_PID = "3G"
                 # response.content = {'protocolType': '', 'host': 'device.miwitracker.com', 'secretKey': '', 'port': 8505, 'bid': '3G', 'extJsonStr': ''}
                 # response.status_code=200
-                print("test-{}".format(response.status_code))
-                if response.status_code == 200:
-                    content = response.content
-                    c = next(content)
-                    # "api.xcloudtech.com"
-                    # d_server_port = 9000
-                    jsload_data =  ujson.loads(c)
-                    print("jsload_data-{}".format(jsload_data))
-                    # jsload_data = {'data':'111','protocolType':'', 'host':'device.miwitracker.com', 'secretKey': 'bZld0ALsZTt15tKEZhOlLPgbsO75BLTP', 'port':8505, 'bid': '3G', 'extJsonStr': ''}
-                    # ujson.loads(c)
-                    
-                    if "success" in jsload_data:
-                        success = jsload_data["success"]
-                        if success == True:#合法设备
-                            if "data" in jsload_data:
-                                data_tmp = jsload_data["data"]#返回的数据 
-                                print("data_tmp:{}".format(data_tmp))
-                                code = jsload_data["code"]
-                                if code == 20000:#合法的设备
-                                    protocloType = data_tmp["protocolType"]#协议类型
-                                    host = data_tmp["host"]#服务骑地址
-                                    secretKey = data_tmp["secretKey"]#
-                                    pid = data_tmp["bid"]#产品型号
-                                    port = data_tmp["port"]#端口号
-
-                                   
-
-                                    if host != '' and (port != '' and port != -1):
-                                        if host != '':
-                                            self.server_addr = host
-                                            EventMesh.publish("set_ip",str(self.server_addr))
-                                        
-                                        if port != '' and port != -1:
-                                            self.server_port = port
-                                            EventMesh.publish("set_com",self.server_port)
-                                        EventMesh.publish("set_new_key", str(secretKey))#获取pid和key
-                                        EventMesh.publish("set_new_pid",str(pid))#获取pid和key
-                                        # self.reconnect_timer_cb()#重连设备
-                                        print("self.reconnect_flag",self.reconnect_flag)
-                                        self.reconnect_flag = 0
-                                        self.reconnect()#重连设备
-                    self.publish_timer.stop()
-                    EventMesh.publish("set_server_state",1)#获取修改服务器状态
+                if response_result == 1:
+                    print("test-{}".format(response.status_code))
+                    if response.status_code == 200:
+                        content = response.content
+                        c = next(content)
+                        # "api.xcloudtech.com"
+                        # d_server_port = 9000
+                        jsload_data =  ujson.loads(c)
+                        print("jsload_data-{}".format(jsload_data))
+                        # jsload_data = {'data':'111','protocolType':'', 'host':'device.miwitracker.com', 'secretKey': 'bZld0ALsZTt15tKEZhOlLPgbsO75BLTP', 'port':8505, 'bid': '3G', 'extJsonStr': ''}
+                        # ujson.loads(c)
+                        
+                        if "success" in jsload_data:
+                            success = jsload_data["success"]
+                            if success == True:#合法设备
+                                if "data" in jsload_data:
+                                    data_tmp = jsload_data["data"]#返回的数据 
+                                    print("data_tmp:{}".format(data_tmp))
+                                    code = jsload_data["code"]
+                                    if code == 20000:#合法的设备
+                                        protocloType = data_tmp["protocolType"]#协议类型
+                                        host = data_tmp["host"]#服务骑地址
+                                        secretKey = data_tmp["secretKey"]#
+                                        pid = data_tmp["bid"]#产品型号
+                                        port = data_tmp["port"]#端口号
+
+                                    
+
+                                        if host != '' and (port != '' and port != -1):
+                                            if host != '':
+                                                self.server_addr = host
+                                                EventMesh.publish("set_ip",str(self.server_addr))
+                                            
+                                            if port != '' and port != -1:
+                                                self.server_port = port
+                                                EventMesh.publish("set_com",self.server_port)
+                                            EventMesh.publish("set_new_key", str(secretKey))#获取pid和key
+                                            EventMesh.publish("set_new_pid",str(pid))#获取pid和key
+                                            # self.reconnect_timer_cb()#重连设备
+                                            print("self.reconnect_flag",self.reconnect_flag)
+                                            self.reconnect_flag = 0
+                                            self.reconnect()#重连设备
+                        self.publish_timer.stop()
+                        EventMesh.publish("set_server_state",1)#获取修改服务器状态
             else:
                 self.publish_timer.stop()
             
@@ -1077,7 +1085,9 @@ class LK_ProtoCol(ProtoCol):
         EventMesh.publish(constants.PROTOCOL.PING_SEND)
         EventMesh.publish(constants.PROTOCOL.KA_SEND)
         EventMesh.publish(constants.PROTOCOL.TIME_SEND)
-
+        iccid = sim.getIccid()
+        print("ICCID:{}\r\n".format(iccid))
+        EventMesh.publish(constants.PROTOCOL.ICCID_SEND,str(iccid))
         EventMesh.publish(constants.EVENT.START_LOCATION,constants.PROTOCOL.UD_SEND) #开始UD定位
         EventMesh.publish(constants.EVENT.START_LOCATION,constants.PROTOCOL.WT_SEND) #开始WT定位
         if EventMesh.model == 'D15':
@@ -3237,7 +3247,8 @@ class SLEEP_DATA_ProtoCol(ProtoCol):#睡眠时间
     TYPE = "SleepReport"
     
     def send(self, event, msg):
-        send_data = EventMesh.publish("get_new_pid")+"*%s*0000b*SleepReport"%(self.imei)
+        str_len = len("SleepReport,")+len(str(msg))
+        send_data = EventMesh.publish("get_new_pid")+"*%s*%04X*SleepReport"%(self.imei,str_len)
         MD5_SIGN = self.pack_MD5_head(send_data)
         data = "[%s%s,%s]"%(str(MD5_SIGN),send_data,msg)
         EventMesh.debug_log("SLEEP_DATA:send:%s"%(data))
@@ -3575,10 +3586,11 @@ class CALLING_ProtoCol(ProtoCol):#app发起视频通话
     def send(self, event, msg):
         
         # [XT*334588000000156*0005*WLKEY]
-        send_data = EventMesh.publish("get_new_pid")+"*%s*0007*CALLING"%(self.imei)
+        str_len = len("CALLING,")+len(str(msg))
+        send_data = EventMesh.publish("get_new_pid")+"*%s*%04X*CALLING"%(self.imei,str_len)
         MD5_SIGN = self.pack_MD5_head(send_data)
         data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
-        # print("CALLING:send data:%s"%(data))
+        print("CALLING:send data:%s"%(data))
         # print("WLKEY!!!!!!!!!!!!!")
         # 通过socket发送到服务器端
         EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
@@ -3589,7 +3601,7 @@ class CALLING_ProtoCol(ProtoCol):#app发起视频通话
         @param msg: 接收到的下行数据
         """
         # b'[SZKW*867387060319166*000A*CALLING]'
-        print("CALLING!!!!!!!!!!!!!",msg)
+        # print("CALLING!!!!!!!!!!!!!",msg)
         if EventMesh.model == "D10":#D10没有视频通话
             EventMesh.publish(constants.PROTOCOL.CALLING_SEND,1)
             return
@@ -3632,10 +3644,12 @@ class RCALLING_ProtoCol(ProtoCol):#设备拒接接听
     def send(self, event, msg):
         
         # [XT*334588000000156*0005*WLKEY]
-        send_data = EventMesh.publish("get_new_pid")+"*%s*0008*RCALLING"%(self.imei)
+        # print("RCALLING:send msg:%s %d"%(msg,len(msg)))
+        str_len = len("RCALLING,")+len(str(msg[0]))+1+len(str(msg[1]))+1+len(str(msg[2]))
+        send_data = EventMesh.publish("get_new_pid")+"*%s*%04x*RCALLING"%(self.imei,str_len)
         MD5_SIGN = self.pack_MD5_head(send_data)
         data = "[%s%s,%s,%s,%d]"%(str(MD5_SIGN),send_data,msg[0],msg[1],msg[2])
-        # print("RCALLING:send data:%s"%(data))
+        print("RCALLING:send data:%s"%(data))
         # print("WLKEY!!!!!!!!!!!!!")
         # 通过socket发送到服务器端
         EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
@@ -3655,7 +3669,8 @@ class AGTALK_ProtoCol(ProtoCol):#设备发起视频通话与app接听视频通
     def send(self, event, msg):
         
         # [XT*334588000000156*0005*WLKEY]
-        send_data = EventMesh.publish("get_new_pid")+"*%s*0006*AGTALK"%(self.imei)
+        str_len = len("AGTALK,")+len(str(msg[0]))+1+len(str(msg[1]))
+        send_data = EventMesh.publish("get_new_pid")+"*%s*%04x*AGTALK"%(self.imei,str_len)
         MD5_SIGN = self.pack_MD5_head(send_data)
         data = "[%s%s,%d,%s]"%(str(MD5_SIGN),send_data,msg[0],msg[1])
         print("AGTALK:send data:%s"%(data))
@@ -3701,7 +3716,8 @@ class RTALK_ProtoCol(ProtoCol):#app拒接视频通话
     def send(self, event, msg):
         
         # [XT*334588000000156*0005*WLKEY]
-        send_data = EventMesh.publish("get_new_pid")+"*%s*0005*RTALK"%(self.imei)
+        str_len = len("RTALK,")+len(str(msg[0]))+1+len(str(msg[1]))
+        send_data = EventMesh.publish("get_new_pid")+"*%s*%04x*RTALK"%(self.imei,str_len)
         MD5_SIGN = self.pack_MD5_head(send_data)
         data = "[%s%s,%d,%s]"%(str(MD5_SIGN),send_data,msg[0],msg[1])
         # print("AGTALK:send data:%s"%(data))
@@ -3722,8 +3738,33 @@ class RTALK_ProtoCol(ProtoCol):#app拒接视频通话
         msg_tmp_d = msg_tmp.split(',')
         EventMesh.publish("app_rtalk_cb",1)
 
+# 上传ICCID 信息
+# 终端发送[XT*YYYYYYYYYYYYYYY*LEN*ICCID,x]
+# x 表示 ICCID 地址
+# 示例[XT*334588000000156*001A*ICCID,XXXXXX0MFSSYYGXXXXXX]
+# 平 台 回 复 : [XT*334588000000156*0005*ICCID]
+class ICCID_ProtoCol(ProtoCol):#ICCID
+    """"""
+    TYPE = "ICCID"
+    def send(self, event, msg):
         
+        # [XT*334588000000156*0005*ICCID]
+        str_len = len("ICCID,")+len(str(msg))
+        send_data = EventMesh.publish("get_new_pid")+"*%s*%04X*ICCID"%(self.imei,str_len)
+        MD5_SIGN = self.pack_MD5_head(send_data)
+        data = "[%s%s,%s]"%(str(MD5_SIGN),send_data,msg)
+        print("ICCID:send data:%s"%(data))
+        # 通过socket发送到服务器端
+        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
 
+    def recv(self, event, msg):
+        """
+        @param event:
+        @param msg: 接收到的下行数据
+        """
+        # b'[SZKW*867387060319166*000A*ICCID]'
+        print("ICCID!!!!!!!!!!!!!")  
+        
 
 class ProtoColResolver(object):
     def __init__(self):
@@ -3736,7 +3777,7 @@ class ProtoColResolver(object):
     def handler(self, data):
         # 这里接收数据
         
-        EventMesh.debug_log("handler -> {}".format(data))
+        # EventMesh.debug_log("handler -> {}".format(data))
         # if data.startswith('Init;'):
         #     data = data[5:]
         #     EventMesh.publish(constants.EVENT.SET_KEY, {"value": ujson.loads(data)['KEY']})