修改文件名
authorDXY <1731678236@qq.com>
Wed, 21 Aug 2024 10:56:17 +0000 (18:56 +0800)
committerDXY <1731678236@qq.com>
Wed, 21 Aug 2024 10:56:17 +0000 (18:56 +0800)
cat1modem/src/main.py
cat1modem/src/tcpService.py [new file with mode: 0644]

index a878fb6..a72e1dc 100644 (file)
@@ -1,7 +1,7 @@
 import example
 main_flag = 1
 try:
-    from usr.ftpService import FtpService
+    from usr.tcpService import TcpService
     example.exec('/usr/main_init.py')
     print("启动成功!!!!!\r\n")
 except Exception as e:
diff --git a/cat1modem/src/tcpService.py b/cat1modem/src/tcpService.py
new file mode 100644 (file)
index 0000000..3238fc2
--- /dev/null
@@ -0,0 +1,694 @@
+from misc import Power
+import usocket
+import log
+import utime
+import audio
+from machine import UART
+import _thread
+from queue import Queue
+from machine import Pin
+from machine import ExtInt
+import dataCall
+import voiceCall
+import net
+import uping
+import example
+import osTimer
+import sim
+import modem
+import utime
+import checkNet
+import atcmd
+import fota
+import request
+import ql_fs
+import pm
+import sms
+import binascii
+import ujson
+import uos
+import slip
+
+CAT1_SERVICE_HEAD = "FE"
+
+
+
+CAT1_REPLAY_STATE="00"
+CAT1_CREAT_DIR_FAILE= "01"
+CAT1_CREAT_DIR_OK= "02"
+CAT1_NO_REPLAY_OTA_OK= "03"
+CAT1_WRITE_FILE_SUCC= "04"
+CAT1_WRITE_FILE_ERROR = "05"
+CAT1_CRC_ERROR = "06"
+CAT1_SEND_HEAD_ERR = "07"
+CAT1_OTA_TIMEOUT_BLE_NO_REPLAY = "08"
+CAT1_CREAT_FILE_ERROR = "09"
+CAT1_CREAT_FILE_SUCC = "0A"
+CAT1_ALLPY_FILE_TRANSFER_END = "0B"
+CAT1_REPLAY_OTA_SUCC = "0C"
+CAT1_REPLAY_OTA_FALIE = "0D"
+CAT1_REPLAY_FILE_SIZE_OK = "0E"
+CAT1_REPLAY_FILE_SIZE_ERR = "0F"
+CAT1_REPLAY_OTA_END_FAILE = "10" #升级完之后 CAT1回复升级失败
+
+CAT1_NEED_UPDATE_OTA = "11" #提示用户强制升级
+
+BLE_STOP_OTA = 0 #结束OTA升级
+BLE_START_OTA = 1 #ble 开始发送OTA标识 -》   CAT1
+BLE_START_SEND_SINGLE_FILE_INFO= 2 #//ble 开始发送单个文件信息 -> CAT1 创建单个文件名
+BLE_START_SEND_FILE_DATA= 3 #//BLE开始发送文件数据额 ----》CAT1 接收文件数据写文件
+BLE_START_OTA_FAILE = 4 #BLE 发送OTA失败 取消文件传输
+BLE_START_OTA_SUCC = 5 #//BLE 发送OTA成功标识
+BLE_START_SEND_ALLFILE_FINESH = 6 #/所有PY文件传输完成
+BLE_START_SEND_SINGLE_FINESH = 7 #//单个文件传输完成
+BLE_START_ERROR_INFO = 255 #/发送错误信息结束进程
+
+# 创建gpio对象
+gpioWakeBT = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_DISABLE, 1)
+# 设置输入输出模式
+gpioWakeBT.set_dir(Pin.OUT)
+
+# 设置引脚电平
+gpioWakeBT.write(0)
+FILE_TRANSFER_TIMEOUT=60  #超时时间 60s没有收到BLE的发送数据就结束了
+class TcpServiceInit:
+    AP = 0  # SLIP_INNER
+    STA = 1 # SLIP_OUTER
+
+    def __init__(self, uart=UART.UART4, mode=AP):
+        self.__uart = uart
+        self.__mode = mode
+        self.Cat1FileState = 0
+        self.Cat1FileReplayBle = 0
+        self.Cat1TimeCount = 0
+        self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT
+        self.Cat1FileTransTimer = osTimer()
+        self.Cat1OtaTimeOut = osTimer()
+        self.crc_err = 0
+        self.allPyRecvFlag = 0
+        self.ota_state =0
+        self.ota_bstate =0
+        self.fileNameTmp = ""
+        self.fileNameList = []
+        self.fileSizeList = []
+        self.fileSize = 0
+        self.updateTimer = osTimer()
+        self.updateTimerCount = 0
+        self.updateTimerFlag = 0
+        self.sock = None
+        
+        slip.destroy()
+        ret = slip.construct(self.__uart,self.__mode, 0)
+        if ret != 0:
+            print('slip netif construct fail')
+            return None
+        
+        self.__sock_file = None
+        self.__sock_file = self.__socket_file_init()
+        self.__thread_file = _thread.start_new_thread(self.__Socket_File_Thread, ())
+        print("ftp_Service :{}\r\n".format(self.__sock_file))
+    # 封装tlv数据包
+    def __pack_tlv_format(self, head, content):
+        head1 = head
+        content1 = content
+        if len(content1) == 0 or len(content1) > 9999 or len(head1) != 2:
+            print('illegal pack tlv content file')
+            return -1
+        len_str ='%04d' % len(content1)
+        tlv_pack = CAT1_SERVICE_HEAD+head1+len_str+content1
+        return tlv_pack
+    # 解码tlv数据包
+    def __unpack_tlv_format(self, msg):
+        print('__unpack_tlv_format file {}\r\n'.format(msg))
+        msg_tmp = str(msg)[2:]#这是去除head FE
+        tag = msg_tmp[0:2]
+        length = msg_tmp[2:6]
+        value = msg_tmp[6:]
+        len_str ='%04d' % len(value)
+        if len(value) == 0 or len(value) > 9999 or len(tag) != 2 or len_str != msg_tmp[2:6]:
+            print('__unpack_tlv_format err file')
+            return -1
+        print('__unpack_tlv_format: {} {} {}\r\n'.format(tag,length,value))
+        unpack = (tag,length,value)
+        return unpack
+    def __socket_init(self):
+       
+        # 创建一个socket实例
+        self.sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
+        self.sock.setsockopt(usocket.SOL_SOCKET, usocket.SO_REUSEADDR, 1)
+        return self.sock
+
+    def __socket_file_init(self): #文件传输Socket
+        self.sock = usocket.socket(usocket.AF_INET, usocket.SOCK_DGRAM, usocket.TCP_CUSTOMIZE_PORT)
+        self.sock.setsockopt(usocket.SOL_SOCKET, usocket.SO_REUSEADDR, 1)
+        # 绑定IP
+        bind_addr = ('172.16.1.2', 5001) 
+        self.sock.bind(bind_addr)
+        self.sock.settimeout(10)
+        return self.sock
+    def __socket_file_reinit(self):
+        print("self.__sock_file reinit:{}\r\n".format(self.__sock_file))
+        if self.__sock_file != None:
+            self.sock.close()
+        return self.__socket_file_init()
+    
+    def __Socket_UDP_file_noreply(self, head, content):
+        head1 = head
+        content1 = content
+        gpioWakeBT.write(1)
+        utime.sleep_ms(2)
+        gpioWakeBT.write(0)
+        utime.sleep_ms(20)
+        # 消息处理
+        msg = self.__pack_tlv_format(head1,content1)
+        if msg == -1: #无效数据
+            return 0
+        # 向服务端发送消息
+        server_addr = ('172.16.1.5',1001) #服务端口也需要更改
+        
+        print("__Socket_UDP_file_noreply send msg {}".format(msg))
+        try:
+            data_size = self.__sock_file.sendto(msg,server_addr)
+            print("self.__sock_file data_size {}".format(data_size))
+        except Exception as e:
+            print("self.__sock_file error {}".format(e))
+        return 0
+    # py文件传输
+    # //py文件传输
+    # // {"Code":1} 开始OTA
+    # // {"Code":2,"fileName":"cat1Service.py","fileSize":123435} fileCode: 文件ID fileName:文件名称 fileSize:文件大小
+    # // {"Code":3,"head+datalen+data+CRC":"数据"} // Code: 2开始发送文件数据
+    # // {"Code":4} BLE 主动发送OTA失败
+    # // {"Code":5} BLE 主动发送OTA成功
+    # // {"Code":6} BLE 所有PY文件传输完成
+    # // {"Code":7} BLE 单个文件传输完成
+    def __Socket_File_Thread(self):
+        while True:
+            try:
+                print(" __Socket_File_Thread recv====22222")
+                data=self.__sock_file.recv(1024*10)
+                if not data:
+                    print("__Socket_File_Thread data null:\r\n")
+                else:
+                    self.file_data(data.decode('uft-8'))
+                    # print("__Socket_File_Thread  end:{}\r\n".format(data.decode()))
+
+            except Exception as e:
+                print("__Socket_File_Thread:e{}\r\n".format(e))
+                self.__sock_file = self.__socket_file_reinit()
+            # print("End __Socket_File_Thread Thread")
+    
+    def cat1FileTimerCb(self,*argc):
+        print("timer test\r\n")
+        if self.Cat1PyFileTimout > 0:
+            self.Cat1PyFileTimout-=1
+        if self.Cat1PyFileTimout == 0:
+            self.Cat1PyFileTimout = 0
+            self.Cat1FileState = 0
+            self.deleteTmpFile()
+            self.deleteUsrTmpFile()
+            self.__Socket_UDP_file_noreply(CAT1_OTA_TIMEOUT_BLE_NO_REPLAY,"ota error") #结束文件接收不完整的
+            self.Cat1FileTransTimer.stop() #//关闭定时器
+            pass
+
+    def crc_cal(self,msg):
+        bytes_data = msg.encode('utf-8')
+        hex_data = binascii.hexlify(bytes_data)
+        hex_data = hex_data.decode()
+        # print("hex_data:{}\r\n".format(hex_data))
+        data = hex_data
+        crcValue = 0
+        j = 0
+        i = 0
+        json_state = 0
+        crcbuf = 0
+        print("len(data) :{}\r\n".format(len(data)))
+        data_len = len(str(data))
+        try:
+            if data_len % 2 != 0: 
+                json_state = 0
+                return [json_state,crcbuf]
+        except Exception as e:
+            json_state = 0
+            print("不合法的的十六进制数据!!\r\n")
+
+        for i in range(data_len):
+            if j >= data_len:
+                break
+            try:
+                decimal_number = int(str(data[j:j+2]), 16)
+                
+                crcValue=crcValue+decimal_number
+                crcValue = crcValue&0xff
+            except Exception as e:
+                print("不合法的的十六进制数据!!\r\n")
+            j+=2
+        
+        crcbuf = crcValue%256
+        crcbuf = 256-crcbuf
+        crcbuf = crcbuf%256
+        
+        print("crcbuf:{}\r\n".format(crcbuf))
+        return [json_state,"%02x"%(crcbuf)]
+    #删除临时创建的文件夹
+    def deleteTmpFile(self):
+        tmp_dir = ql_fs.path_exists("/usr/TmpPyFile")
+        if tmp_dir == True:
+            ql_fs.rmdirs("/usr/TmpPyFile")
+
+    #删除usr临时创建的文件夹
+    def deleteUsrTmpFile(self):
+        return
+        tmp_dir = ql_fs.path_exists("/usr/UsrTmpPyFile")
+        if tmp_dir == True:
+            ql_fs.rmdirs("/usr/UsrTmpPyFile")              
+
+    def file_data(self,data):
+        mk_dir_state = 0
+        print("data!!!!!{}\r\n".format(len(data)))
+        if self.updateTimerFlag == 0:
+            self.updateTimerFlag = 1
+            self.updateTimer.stop()
+        msg = {}
+        json_state = 0
+        try:
+            msg = ujson.loads(data)
+            json_state = 1
+        except Exception as e:
+            
+            json_state = 0
+        
+        # print("msg type msg {} {}\r\n".format(msg,type(data)))
+        if "Code" in msg and json_state == 1 :
+            
+            Code = int(msg["Code"])
+            print("Code {} self.Cat1FileState:{}\r\n".format(Code,self.Cat1FileState))
+            if Code == BLE_STOP_OTA: #OTA失败
+                self.allPyRecvFlag = 0
+                self.Cat1FileState = 0
+                self.Cat1FileTransTimer.stop()
+                self.deleteTmpFile()
+                self.deleteUsrTmpFile()
+                pass
+            elif Code == BLE_START_OTA: #BLE 开始OTA cat1创建临时文件夹记录传输的文件数据 文件名
+                self.ota_state =0
+                self.ota_bstate =0
+                self.allPyRecvFlag = 0
+                self.fileNameList = []
+                self.fileSizeList = []
+                print("BLE_START_OTA {} \r\n".format(BLE_START_OTA))
+                self.allPyRecvFlag = 0
+                self.Cat1FileState = 0
+                self.deleteUsrTmpFile()
+                self.Cat1OtaTimeOut.stop()
+                check_dir = ql_fs.path_exists("/usr/TmpPyFile")
+                mk_dir_state = 0
+                if check_dir == True:
+                    try:
+                        self.deleteTmpFile()
+                    except Exception as e:
+                        print("移除失败!!!!\r\n")
+                check_dir = ql_fs.path_exists("/usr/TmpPyFile")      
+                if check_dir == False: #文件夹不存在 创建目录文件夹
+                    try:
+                        ql_fs.mkdirs("/usr/TmpPyFile") 
+                        mk_dir_state = 1
+                        print("创建临时文件 创建成功!!!!\r\n")
+                    except Exception as e:
+                        mk_dir_state = 0
+                        print("创建临时文件失败没有内存!!!!\r\n")
+                else: #已经存在目录了
+                   mk_dir_state = 1 
+                print("创建成功!!!!{}\r\n".format(mk_dir_state))
+                if mk_dir_state == 0:
+                    self.__Socket_UDP_file_noreply(CAT1_CREAT_DIR_FAILE,"creat dir error!")
+                else:
+                    self.Cat1FileState = 1
+                    self.fileNameList = []
+                    self.fileSizeList = []
+                    self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT #超时时间10s
+                    self.Cat1FileTransTimer.stop()
+                    self.Cat1FileTransTimer.start(1000,1,self.cat1FileTimerCb)
+                    self.__Socket_UDP_file_noreply(CAT1_CREAT_DIR_OK,"creat dir success!")
+                    
+
+            elif Code == BLE_START_SEND_SINGLE_FILE_INFO and self.Cat1FileState == 1: #包含文件名 文件大小 
+                print("BLE_START_SEND_SINGLE_FILE_INFO {} \r\n".format(BLE_START_SEND_SINGLE_FILE_INFO))
+                self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT #超时时间60s
+                # {"Code":1,"fileName":"testpy.py","fileSize":1040}
+                # print("msg {}\r\n".format(msg))
+                self.fileNameTmp = str(msg["fileName"])
+                self.fileSize = msg["fileSize"]
+                self.fileNameList = msg["fileNameList"]
+                # self.fileSizeList.append({"fileName":self.fileNameTmp,"fileSize":int(self.fileSize)})
+                path = "/usr/TmpPyFile/{}".format(self.fileNameTmp)
+                print("self.fileNameTmp {} self.fileSize:{} self.fileNameList:{} self.fileSizeList:{}\r\n".format(self.fileNameTmp,self.fileSize,self.fileNameList,self.fileSizeList))
+                check_touch = ql_fs.path_exists("/usr/TmpPyFile/{}".format(self.fileNameTmp))
+                if check_touch == True:
+                    try:
+                        uos.remove("/usr/TmpPyFile/{}".format(self.fileNameTmp))
+                    except Exception as e:
+                        print("移除文件失败\r\n")
+                    try:
+                        with open(path,"w+") as fd:
+                            fd.write("")
+                        fd.close()  #关闭文件流
+                        self.__Socket_UDP_file_noreply(CAT1_CREAT_FILE_SUCC,"1creat file or dir success!")
+                    except Exception as e:
+                        print("创建文件失败\r\n")
+                        self.__Socket_UDP_file_noreply(CAT1_CREAT_FILE_ERROR,"1creat file or dir err!")
+                else:
+                    try:
+                        print("self.fileNameTmp 111111{}\r\n".format(self.fileNameTmp))
+                        with open(path,"w+") as fd:
+                            fd.write("")
+                        fd.close()  #关闭文件流
+                        self.crc_err = 0
+                        print("self.fileNameTmp {}\r\n".format(self.fileNameTmp))
+                        self.__Socket_UDP_file_noreply(CAT1_CREAT_FILE_SUCC,"2creat file or dir success!")
+                    except Exception as e:
+                        self.__Socket_UDP_file_noreply(CAT1_CREAT_FILE_ERROR,"2creat file or dir err!")
+                        print("创建文件失败\r\n")
+
+            elif Code == BLE_START_SEND_FILE_DATA and self.Cat1FileState == 1: #文件数据
+                self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT #超时时间10s
+                print("BLE_START_SEND_FILE_DATA {} self.fileNameTmp:{}\r\n".format(BLE_START_SEND_FILE_DATA,self.fileNameTmp))
+                # {"Code":2,"data":"89ggjdggsjgdj"}
+                if len(self.fileNameTmp) == 0: #文件名不能为空
+                    return
+                data = msg["data"]
+                if len(data) == 0:
+                    return
+                print(" (data):{}\r\n".format(len(data)))
+                tmpdata = str(data)
+                head = tmpdata[0:2] #FE 
+                if head != "FE" and len(tmpdata) <= 8: #必须大于8 FE+012C+DATA+crc(一个字节89)
+                    print("head {}\r\n".format(head))
+                    self.__Socket_UDP_file_noreply(CAT1_SEND_HEAD_ERR,"head error!")
+                    return
+                datalen = str(tmpdata[2:6]) #012c
+                datalen = int("0x" + datalen, 16) #转换成十进制数
+                data_buf = tmpdata[6:] # 数据
+                data_buf = data_buf[:-2]  #最后两个往前的数据
+                crc = tmpdata[-2:] # 最后两个字符是 crc 一个字节
+                print("crc ===!111111:{} {} len:{} {}\r\n".format(crc,type(crc),datalen,len(str(data_buf))))
+                if len(str(data_buf)) == 0 or len(str(data_buf)) != datalen: #数据为空
+                    self.__Socket_UDP_file_noreply(CAT1_WRITE_FILE_ERROR,"crc error or data null!")
+                    return
+                crclist=self.crc_cal(data_buf)
+                newcrc = crclist[1]
+                news = crclist[0]
+                if len(str(crc)) == 0:
+                    self.__Socket_UDP_file_noreply(CAT1_CRC_ERROR,"crc error!")
+                    return
+                decnumCrcCal = int("0x" + str(newcrc), 16) #转换成十进制数
+                decnumCrc = int("0x" + str(crc), 16) #转换成十进制数
+                print("crc:{} newcrc:{}\r\n".format(crc,newcrc,decnumCrc,decnumCrcCal))
+                if decnumCrcCal != decnumCrc and news == 0:
+                    print("newcrc is not === crc crc校验出错不一致\r\n")
+                    self.__Socket_UDP_file_noreply(CAT1_CRC_ERROR,"crc error!")
+                    return
+                data = str(data_buf)
+                path = "/usr/TmpPyFile/{}".format(str(self.fileNameTmp))
+                print("py path:{} self.fileNameTmp:{}\r\n".format(path,self.fileNameTmp))
+                try:
+                    with open(path,"a") as fd:
+                        fd.write(data)
+                    fd.close() #关闭文件流
+                    self.__Socket_UDP_file_noreply(CAT1_WRITE_FILE_SUCC,"write file success!")
+                    print("写文件成功!!!!!\r\n")
+                except Exception as e:
+                    self.__Socket_UDP_file_noreply(CAT1_WRITE_FILE_ERROR,"write file error!")
+                    print("写文件失败没有内存!!!!!\r\n")
+            elif Code == BLE_START_OTA_FAILE and self.Cat1FileState == 1: #取消文件传输 OTA失败 移除目录文件
+                print("BLE_START_OTA_FAILE {} \r\n".format(BLE_START_OTA_FAILE))
+                self.allPyRecvFlag = 0
+                self.__Socket_UDP_file_noreply(CAT1_REPLAY_OTA_FALIE,"OTA FAILE")
+                self.Cat1FileState = 0
+                self.Cat1FileTransTimer.stop()
+                self.deleteTmpFile()
+                self.deleteUsrTmpFile()
+                pass
+            elif Code == BLE_START_SEND_ALLFILE_FINESH and self.Cat1FileState == 1: #全部文件传输完成
+                
+                tmp_dir = ql_fs.path_exists("/usr/TmpPyFile")
+                if tmp_dir == True:
+                    filenamesList = uos.listdir("/usr/TmpPyFile")
+                    list1 = sorted(filenamesList)
+                    list2 = sorted(self.fileNameList)
+                    print("filenamesList:{} self.fileNameList:{} {}{}\r\n".format(filenamesList,self.fileNameList,type(filenamesList),type(self.fileNameList)))
+                    if list1 != list2: #传输的文件列表和BLE不一致说明有文件没有传输完成不再重启CAT1
+                        self.deleteTmpFile()
+                        self.Cat1FileState = 0
+                        print("self.Cat1PyFile444!!!:{}\r\n".format(self.Cat1FileState))
+                        self.Cat1FileTransTimer.stop()
+                        self.deleteUsrTmpFile()
+                        self.__Socket_UDP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!")
+                        return
+                    
+                    try:
+                        copy_state = 1
+                        compare_flag = 1
+                        copy_flag = 0
+                        filenamesList = uos.listdir("/usr/TmpPyFile")
+                        for tmp in filenamesList: #将传输的文件 copy到usr目录下
+                            print("filenamesList for :{}\r\n".format(filenamesList))
+                            dst_path = "/usr/{}".format(tmp) #目标目录文件
+                            if ql_fs.path_exists(dst_path) == True:
+                                try:
+                                    copy_flag = 1
+                                    uos.remove(dst_path)
+                                except Exception as e:
+                                    print("移除文件失败!!!!!\r\n")
+                            try:
+                                copy_flag = 1
+                                ql_fs.touch(dst_path,"")
+                            except Exception as e:
+                                print("创建文件失败!!!!!\r\n")
+
+                            if copy_flag == 0:
+                                print("创建文件失败!!!!!copy_flag\r\n")
+                                copy_state = 0
+                                break
+                            src_path = "/usr/TmpPyFile/{}".format(tmp) #源目录文件
+                            ret = False
+                            file_size = 0
+                            
+                            try:
+                                ret = ql_fs.file_copy(dst_path,src_path) 
+                                print("copy ret!!!!!:{}\r\n".format(ret))
+                                if ret == True:
+                                    dstfile_size = ql_fs.path_getsize(dst_path)
+                                    srcfile_size = ql_fs.path_getsize(src_path)
+
+                                    print("copy dstfile_size:{} srcfile_size:{}\r\n".format(dstfile_size,srcfile_size))
+                                    if dstfile_size != srcfile_size:
+                                        compare_flag = 0
+                                        break
+                                    else: #拷贝完之后比较大小一致移除文件
+                                        try:
+                                            compare_flag = 1
+                                            uos.remove(src_path)
+                                            filenamesList = uos.listdir("/usr/TmpPyFile")
+                                            print("remove filenamesList :{}\r\n".format(filenamesList))
+                                        except Exception as e:
+                                            print("copy file \r\n")
+                                else:
+                                    compare_flag = 0
+                                    break
+                                
+                            except Exception as e:
+                                print("copy file \r\n")
+                                
+                            
+                        if copy_state == 0 or compare_flag == 0 : #比较失败 或者copy失败没有内存了
+                            self.deleteUsrTmpFile()
+                            self.deleteTmpFile()
+                            self.Cat1FileState = 0
+                            self.Cat1FileTransTimer.stop()
+                            self.__Socket_UDP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!22") #传输文件完之后最后提示是否成功失败
+                            return
+                        self.__Socket_UDP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") #传输文件完之后最后提示是否成功失败
+                        self.deleteTmpFile()
+                        self.Cat1FileState = 0
+                        self.Cat1FileTransTimer.stop()
+                        print("重启 auto:\r\n")
+                        self.Cat1OtaTimeOut.stop()
+                        self.Cat1TimeCount = 0
+                        self.ota_state = 1
+                        self.allPyRecvFlag = 1 #所有的py文件接收完成
+                        self.Cat1OtaTimeOut.start(5000,0,self.otaTimeOut)
+                    except Exception as e:
+                        self.__Socket_UDP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!33") #传输文件完之后最后提示是否成功失败
+                        self.deleteUsrTmpFile()
+                        self.deleteTmpFile()
+                        self.Cat1FileState = 0
+                        self.Cat1FileTransTimer.stop()
+                else:
+                    if self.ota_state == 1:
+                        self.__Socket_UDP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") #传输文件完之后最后提示是否成功失败
+                        pass
+                    else:
+                        self.deleteTmpFile()
+                        self.Cat1FileState = 0
+                        self.Cat1FileTransTimer.stop()
+                        self.deleteUsrTmpFile()
+                        print("cat1 ota\r\n")
+                        self.__Socket_UDP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!")
+
+            
+            elif Code == BLE_START_OTA_SUCC and self.Cat1FileState == 1:
+                if self.allPyRecvFlag == 0: #没有接收完成就发送OTA成功的标识
+                    self.deleteTmpFile()
+                    self.deleteUsrTmpFile()
+                    self.__Socket_UDP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!")
+                    return
+                tmp_dir = ql_fs.path_exists("/usr/TmpPyFile")
+                if tmp_dir == True:
+                    filenamesList = uos.listdir("/usr/TmpPyFile")
+                    list1 = sorted(filenamesList)
+                    list2 = sorted(self.fileNameList)
+                    print("filenamesList:{} self.fileNameList:{} {}{}\r\n".format(filenamesList,self.fileNameList,type(filenamesList),type(self.fileNameList)))
+                    if list1 != list2: #传输的文件列表和BLE不一致说明有文件没有传输完成不再重启CAT1
+                        self.deleteTmpFile()
+                        self.Cat1FileState = 0
+                        print("self.Cat1PyFile444!!!:{}\r\n".format(self.Cat1FileState))
+                        self.Cat1FileTransTimer.stop()
+                        self.deleteUsrTmpFile()
+                        self.__Socket_UDP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!")
+                        return
+                    
+                    try:
+                        copy_state = 1
+                        compare_flag = 1
+                        copy_flag = 0
+                        filenamesList = uos.listdir("/usr/TmpPyFile")
+                        for tmp in filenamesList: #将传输的文件 copy到usr目录下
+                            print("filenamesList for :{}\r\n".format(filenamesList))
+                            dst_path = "/usr/{}".format(tmp) #目标目录文件
+                            if ql_fs.path_exists(dst_path) == True:
+                                try:
+                                    copy_flag = 1
+                                    uos.remove(dst_path)
+                                except Exception as e:
+                                    print("移除文件失败!!!!!\r\n")
+                            try:
+                                copy_flag = 1
+                                ql_fs.touch(dst_path,"")
+                            except Exception as e:
+                                print("创建文件失败!!!!!\r\n")
+
+                            if copy_flag == 0:
+                                print("创建文件失败!!!!!copy_flag\r\n")
+                                copy_state = 0
+                                break
+                            src_path = "/usr/TmpPyFile/{}".format(tmp) #源目录文件
+                            ret = False
+                            file_size = 0
+                            
+                            try:
+                                ret = ql_fs.file_copy(dst_path,src_path) 
+                                print("copy ret!!!!!:{}\r\n".format(ret))
+                                if ret == True:
+                                    dstfile_size = ql_fs.path_getsize(dst_path)
+                                    srcfile_size = ql_fs.path_getsize(src_path)
+
+                                    print("copy dstfile_size:{} srcfile_size:{}\r\n".format(dstfile_size,srcfile_size))
+                                    if dstfile_size != srcfile_size:
+                                        compare_flag = 0
+                                        break
+                                    else: #拷贝完之后比较大小一致移除文件
+                                        try:
+                                            compare_flag = 1
+                                            uos.remove(src_path)
+                                            filenamesList = uos.listdir("/usr/TmpPyFile")
+                                            print("remove filenamesList :{}\r\n".format(filenamesList))
+                                        except Exception as e:
+                                            print("copy file \r\n")
+                                else:
+                                    compare_flag = 0
+                                    break
+                                
+                            except Exception as e:
+                                print("copy file \r\n")
+                                
+                            
+                        if copy_state == 0 or compare_flag == 0 : #比较失败 或者copy失败没有内存了
+                            self.deleteUsrTmpFile()
+                            self.deleteTmpFile()
+                            self.Cat1FileState = 0
+                            self.Cat1FileTransTimer.stop()
+                            self.__Socket_UDP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!22") #传输文件完之后最后提示是否成功失败
+                            return
+                        self.__Socket_UDP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") #传输文件完之后最后提示是否成功失败
+                        self.deleteTmpFile()
+                        self.Cat1FileState = 0
+                        self.Cat1FileTransTimer.stop()
+                        print("重启 auto:\r\n")
+                        self.Cat1OtaTimeOut.stop()
+                        self.Cat1TimeCount = 0
+                        self.ota_bstate = 1
+                        self.Cat1OtaTimeOut.start(10000,0,self.otaTimeOut)
+                    except Exception as e:
+                        self.__Socket_UDP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota faile!33") #传输文件完之后最后提示是否成功失败
+                        self.deleteUsrTmpFile()
+                        self.deleteTmpFile()
+                        self.Cat1FileState = 0
+                        self.Cat1FileTransTimer.stop()
+                else:
+                    if self.ota_bstate == 1:
+                        self.__Socket_UDP_file_noreply(CAT1_REPLAY_OTA_SUCC,"ota success!") #传输文件完之后最后提示是否成功失败
+                        pass
+                    else:
+                        self.deleteTmpFile()
+                        self.Cat1FileState = 0
+                        self.Cat1FileTransTimer.stop()
+                        self.deleteUsrTmpFile()
+                        print("cat1 ota\r\n")
+                        self.__Socket_UDP_file_noreply(CAT1_REPLAY_OTA_FALIE,"ota end faile!")
+
+            elif Code == BLE_START_SEND_SINGLE_FINESH and self.Cat1FileState == 1: #单个文件传输完成
+                print("BLE_START_SEND_SINGLE_FINESH {} self.fileNameTmp:{}\r\n".format(BLE_START_SEND_SINGLE_FINESH,self.fileNameTmp))
+                self.Cat1PyFileTimout = FILE_TRANSFER_TIMEOUT #超时时间10s
+                tmp_dir = ql_fs.path_exists("/usr/TmpPyFile")
+                if tmp_dir == True:
+                    tmp_file = ql_fs.path_exists("/usr/TmpPyFile/{}".format(self.fileNameTmp))
+                    if tmp_file == True: #文件存在
+                        file_size = ql_fs.path_getsize("/usr/TmpPyFile/{}".format(self.fileNameTmp))
+                        print("file size :file_size:{} self.fileSize:{}\r\n".format(file_size,self.fileSize))
+                        if self.fileSize != file_size: #文件大小不一致 传输出错
+                            self.__Socket_UDP_file_noreply(CAT1_REPLAY_FILE_SIZE_ERR,"file size err") #结束文件接收不完整的
+                            pass
+                        else:
+                            self.__Socket_UDP_file_noreply(CAT1_REPLAY_FILE_SIZE_OK,"file size ok") #结束文件接收完整的
+                            pass
+                    else:
+                        self.__Socket_UDP_file_noreply(CAT1_CREAT_FILE_ERROR,"creat file or dir err!")
+                        pass
+                else:
+                    self.__Socket_UDP_file_noreply(CAT1_CREAT_DIR_FAILE,"creat file or dir error!")
+                    pass
+
+
+            else:
+                if self.Cat1FileState == 0:
+                    if self.Cat1FileReplayBle == 1:
+                        return
+                    self.Cat1FileReplayBle = 1
+                    self.__Socket_UDP_file_noreply(CAT1_REPLAY_OTA_SUCC,"reset start!") #结束文件接收不完整的
+                    print("错误信息!!!!!\r\n")
+                    self.Cat1FileState == 0
+                    self.Cat1FileTransTimer.stop() #//关闭定时器
+                    self.Cat1PyFileTimout = 0
+                    self.fileNameList=[]
+                    self.deleteTmpFile()
+                    self.deleteUsrTmpFile()
+                    
+
+    def otaTimeOut(self,*argc):
+        print("重启成功!!!!!!!!\r\n")
+        Power.powerRestart()
+
+TcpService = TcpServiceInit()
+
+