文件接收通过记录前四个字节和CRC值的方式判定是否已重复。解决传输数据重复造成接收文件失败问题。 479/2 479/head 480/target/1 481/target/1 482/target/1
authorSnickerSun <snickersun@163.com>
Mon, 8 Jul 2024 01:54:38 +0000 (09:54 +0800)
committerSnickerSun <snickersun@163.com>
Mon, 8 Jul 2024 01:54:38 +0000 (09:54 +0800)
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c

index 67a1555..30abfc8 100644 (file)
@@ -6114,26 +6114,37 @@ void Set_OTA_recv_value()
 static errcode_t save_package_sample(ble_read_data *buffer_handle,uint8_t *data, uint16_t event_size)\r
 {\r
 \r
-    int cmp_len = 5;\r
-    if (event_size < 5)\r
+    //保存前 4 bytes + 最后 1 byte\r
+    int save_len = 4;\r
+    uint8_t last_byte = calculate_lrc(data,event_size,0x00);\r
+    if (event_size < 4)\r
     {\r
-        cmp_len = event_size;\r
+        save_len = event_size;\r
     }\r
     memset(buffer_handle->last_data_sample,0,sizeof(buffer_handle->last_data_sample));\r
     buffer_handle->last_data_size = event_size;\r
-    memcpy_s(buffer_handle->last_data_sample,sizeof(buffer_handle->last_data_sample),data,cmp_len);\r
+    memcpy_s(buffer_handle->last_data_sample,sizeof(buffer_handle->last_data_sample),data,save_len);\r
+    buffer_handle->last_data_sample[4]=last_byte;\r
 \r
     return ERRCODE_SUCC;\r
 }\r
 static errcode_t check_package_same(uint8_t* lastdata,uint8_t *newdata , uint16_t cmp_size)\r
 {\r
 \r
-    int cmp_len = 5;\r
-    if (cmp_size < 5)\r
+\r
+    //对比前 4 bytes + 最后 1 byte    \r
+    int save_len = 4;\r
+    uint8_t current_sample_data[5];\r
+    uint8_t last_byte = calculate_lrc(newdata,cmp_size,0x00);\r
+    if (cmp_size < 4)\r
     {\r
-        cmp_len = cmp_size;\r
+        save_len = cmp_size;\r
     }\r
-    if (memcmp(lastdata,newdata,cmp_len)==0)\r
+    memset(current_sample_data,0,sizeof(current_sample_data));    \r
+    memcpy_s(current_sample_data,sizeof(current_sample_data),newdata,save_len);\r
+    current_sample_data[4]=last_byte;\r
+    \r
+    if (memcmp(lastdata,newdata,5)==0)\r
     {\r
         return ERRCODE_SUCC;\r
     }else{\r
@@ -6149,6 +6160,12 @@ errcode_t handle_recv_file(ble_read_data *buffer_handle,uint8_t *data, uint16_t
     {\r
         if (check_package_same(buffer_handle->last_data_sample,data,event_size) == ERRCODE_SUCC)\r
         {\r
+            printf("Error handle_recv_file recve same package header 0x%02X%02X%02X%02X end 0x%02X skip \n"\r
+            ,buffer_handle->last_data_sample[0]\r
+            ,buffer_handle->last_data_sample[1]\r
+            ,buffer_handle->last_data_sample[2]\r
+            ,buffer_handle->last_data_sample[3]\r
+            ,buffer_handle->last_data_sample[4]);\r
             return ERRCODE_FAIL;\r
         }\r
     }\r