优化CAT1文件传输 869/1
authorDXY <1731678236@qq.com>
Wed, 4 Sep 2024 03:23:42 +0000 (11:23 +0800)
committerDXY <1731678236@qq.com>
Wed, 4 Sep 2024 03:23:42 +0000 (11:23 +0800)
cat1modem/src/tcpService.py
code/sdk/drivers/peripheral/slip/cat1Service/cat1_tcpServer.cpp

index e2823f4..dcc3706 100644 (file)
@@ -396,7 +396,7 @@ class TcpServiceInit:
                 print(" (data):{}\r\n".format(len(data)))
                 tmpdata = str(data)
                 head = tmpdata[0:2] #FE 
-                if head != CAT1_FILE_DATA_HEAD and len(tmpdata) <= 8: #必须大于8 FF+012C+DATA+crc(一个字节89)
+                if head != CAT1_FILE_DATA_HEAD or len(tmpdata) <= 8: #必须大于8 FF+012C+DATA+crc(一个字节89)
                     print("head {}\r\n".format(head))
                     self.__Socket_UDP_file_noreply(CAT1_SEND_HEAD_ERR,"head error!")
                     return
@@ -409,19 +409,19 @@ class TcpServiceInit:
                 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
+                # 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 = "{}/{}".format(BAK_FILE_PATH,str(self.fileNameTmp))
                 print("py path:{} self.fileNameTmp:{}\r\n".format(path,self.fileNameTmp))
index 6f5e2f8..daf9468 100644 (file)
@@ -77,7 +77,7 @@ static uint8_t timerOut_count = 0;
 #define DEFAULT_TIMEOUT_TIME 10 //间隔超时时间10s
 #define DEFAULT_TIMEOUT_COUNT (60/DEFAULT_TIMEOUT_TIME) //10s倒计时 计时6次总共是1分钟
 
-#define READ_FILE_DATA_MAX_SIZE 400 // 一次读文件数据最大的size 数据长度不包含头 长度 CRC位
+#define READ_FILE_DATA_MAX_SIZE 900 // 一次读文件数据最大的size 数据长度不包含头 长度 CRC位
 #define CAT1_FILE_DATA_HEAD "FF" //数据头'FF'
 #define CAT1_FILE_DATA_LEN_CHA "0000" //数据LEN
 #define CAT1_FILE_DATA_CRC_CHA "00" //数据CRC'
@@ -86,14 +86,14 @@ static uint8_t timerOut_count = 0;
 #define DATA_ACTUAL_LEN_BIT 4 //实际数据的长度
 #define DATA_CRC_SZIE 2 //CRC 字符个数
 
-#define DATA_TOTAL_LEN (DATA_HEAD_SIZE+DATA_ACTUAL_LEN_BIT+READ_FILE_DATA_MAX_SIZE+DATA_CRC_SZIE+2+200) //最大一包的数据总长度  200 {"Code":1,"fileName":"",file}
+#define DATA_TOTAL_LEN (DATA_HEAD_SIZE+DATA_ACTUAL_LEN_BIT+READ_FILE_DATA_MAX_SIZE+DATA_CRC_SZIE+2+100) //最大一包的数据总长度  200 {"Code":1,"fileName":"",file}
 #define DATA_MIN_HEAD_LEN (DATA_HEAD_SIZE+DATA_ACTUAL_LEN_BIT)  
 
 #define FAILE_COUNT 10 //失败次数
 
 #define RESP_STATUS_OFSET  2
-#define MAX_CMD_MSG_BUFFER_LEN DATA_TOTAL_LEN
-#define MAX_TCP_MSG_BUFFER_LEN (MAX_CMD_MSG_BUFFER_LEN+8)
+#define MAX_CMD_MSG_BUFFER_LEN 512
+#define MAX_TCP_MSG_BUFFER_LEN (DATA_TOTAL_LEN+8)
 #pragma pack(push)
 #pragma pack(1)
 struct tcp_msg_t {
@@ -128,7 +128,7 @@ static struct tcp_msg_old_t *unpack_tlv_format_old(char *rx_buffer, int length)
 static int pack_tlv_format_old(char *tx_buffer,uint8_t mode, uint8_t cmd, char *content)
 {
     int content_length = (int)strlen(content);
-    if( content == NULL || content_length > MAX_CMD_MSG_BUFFER_LEN) {
+    if( content == NULL || content_length > MAX_TCP_MSG_BUFFER_LEN) {
         return -1;
     }
     if(mode == FILE_TRANSFER_CMD){ //文件传输是json格式
@@ -158,7 +158,7 @@ static int pack_tlv_format(char *tx_buffer,uint8_t mode,uint8_t cmd, char *conte
 {
     
     int content_length = (int)strlen(content);
-    if(content_length > MAX_CMD_MSG_BUFFER_LEN || content == NULL)
+    if(content_length > MAX_TCP_MSG_BUFFER_LEN || content == NULL)
     {
         printf("content data error: content_length %d %s\r\n",content_length,content);
         return -1;
@@ -402,10 +402,6 @@ static void stop_cat1_ota(void){ //停止 CAT1 ota 清标识
             fileNameList[i] = NULL;
         }
     }
-    // for(uint8_t i=0;i<DEFAULT_MAX_FILE_COUNT;i++){
-    //     strcpy(fileNameList[i],"");
-    // }
-    
     if(fp != NULL){ //防止打开文件没有关闭
         printf("file is not close!\r\n");
         fclose(fp);
@@ -527,6 +523,22 @@ void send_curfile_info_data(void)
     if(fileNameList[curfilecount] != NULL)
     {
         if(strlen(fileNameList[curfilecount]) != 0 && filesize != 0){
+            char file_path[DEFAULT_MAX_FILE_NAME_SIZE]={0};
+            memset(file_path,0,DEFAULT_MAX_FILE_NAME_SIZE);
+            sprintf_s(file_path,DEFAULT_MAX_FILE_NAME_SIZE,"%s/%s",CAT1_PY_PATH,fileNameList[curfilecount]);
+            if(fp != NULL){
+                fclose(fp);
+                fp = NULL;
+            }
+            if(fp == NULL){
+                fp = fopen(file_path, "rb");
+                if(fp != NULL){
+                    fseek(fp, 0, SEEK_END);
+                    filesize = ftell(fp);
+                    fseek(fp, 0, SEEK_SET);
+                    noreplayCount = 0;
+                }
+            }
             cat1_ota_send_data(CAT1_TCP_START_SEND_SINGLE_FILE_INFO,fileNameList[curfilecount],filesize,NULL);
         }
     }
@@ -564,15 +576,22 @@ void read_file_info_data(void){
             sprintf_s(file_path,DEFAULT_MAX_FILE_NAME_SIZE,"%s/%s",CAT1_PY_PATH,fileNameList[curfilecount]);
             
             count+=1;
-            fp = fopen(file_path, "rb");
             if(fp != NULL){
-                fseek(fp, 0, SEEK_END);
-                filesize = ftell(fp);
-                fseek(fp, 0, SEEK_SET);
-                noreplayCount = 0;
-                send_curfile_info_data();
-                break;
+                fclose(fp);
+                fp = NULL;
             }
+            if(fp == NULL){
+                fp = fopen(file_path, "rb");
+                if(fp != NULL){
+                    fseek(fp, 0, SEEK_END);
+                    filesize = ftell(fp);
+                    fseek(fp, 0, SEEK_SET);
+                    noreplayCount = 0;
+                    send_curfile_info_data();
+                    break;
+                }
+            }
+            
         }else{
             cat1_ota_flag = CAT1_TCP_START_SEND_ALLFILE_FINESH;
             timerOut_count = DEFAULT_TIMEOUT_TIME;
@@ -598,7 +617,7 @@ void send_cur_pack_data(void){
 
         data_len+=snprintf(head_data+data_len,sizeof(head_data)-data_len,"%04x",read_size);
         memcpy_s(data_arr,6,head_data,6);
-        crcvalue = cat1_file_crc(data_arr+6,read_size);
+        // crcvalue = cat1_file_crc(data_arr+6,read_size);
         data_len+=read_size;
         data_len+=snprintf(data_arr+data_len,sizeof(data_arr)-data_len,"%02x",crcvalue);