Merge #514 into sdk602patch0626 from refs/changes/514/head
author胡传军 <1224667075@qq.com>
Fri, 12 Jul 2024 11:18:48 +0000 (11:18 +0000)
committersnickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Fri, 12 Jul 2024 11:18:48 +0000 (11:18 +0000)
增加ai数据字符长度

* refs/changes/514/head: (2 commits squashed)

  - 增加ai数据字符长度

  - 修复AI数据bug 增加超时下载对文件操作

Signed-off-by: aliyun8003852482 <1224667075@qq.com>
Reviewed-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Merged-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/514
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c

index 879b667..92af0fb 100644 (file)
@@ -48,6 +48,8 @@ extern "C" {
 #define JSON_CHECK_OK 1 //json解析成功\r
 #define JSON_CHECK_ERR 2 //json解析失败\r
 \r
+#define AI_TXT_BUF_MAX_LEN 1024*3 //json解析失败\r
+\r
 uint8_t *bigDataBuf = NULL;//大数据buf\r
 uint8_t bigDataBufLen=0;\r
 bool sendbigDataBufState = false;//发送大数据表示不要被其他指令打断\r
@@ -1995,7 +1997,7 @@ uint8_t binCheck_AI(uint8_t *buf,uint8_t *check,uint16_t len)//json 格式解析
 {\r
     uint8_t flag = 0;\r
     // printf("jsonCheck_weather:len: json:%f jsonlen:%d\r\n",0.011,strlen((char *)json));\r
-    #if 1\r
+    #if 0\r
         FILE *fp=fopen("user/AI.txt","wb+");\r
         printf("binCheck_AI len %d\r\n",len);\r
         fwrite((void*)buf,1,len,fp);\r
@@ -2014,13 +2016,15 @@ uint8_t binCheck_AI(uint8_t *buf,uint8_t *check,uint16_t len)//json 格式解析
             memcpy_s(&txt_len,2,&buf[offset],2);\r
 \r
             offset+=2;\r
-            char txt_buf[128]={0};\r
-            memcpy_s(txt_buf,128,&buf[offset],txt_len);\r
-            printf("binCheck_AI txtbuf:%s %d\r\n",txt_buf,txt_len);\r
+            char txt_buf[256]={0};\r
+            memcpy_s(txt_buf,256,&buf[offset],txt_len);\r
+            printf("binCheck_AI Question txtbuf:%s %d\r\n",txt_buf,txt_len);\r
             ble_set_ai_Question_str(txt_buf);\r
             offset+=txt_len;\r
             //offset+=1;\r
        }\r
+        if(offset>=len)break;\r
+       \r
         if(buf[offset]==2)\r
        {\r
             offset++;\r
@@ -2029,24 +2033,35 @@ uint8_t binCheck_AI(uint8_t *buf,uint8_t *check,uint16_t len)//json 格式解析
 \r
             offset+=2;\r
 \r
-            char txt_buf[128]={0};\r
-            memcpy_s(txt_buf,128,&buf[offset],txt_len);\r
-            printf("binCheck_AI txtbuf %s %d\r\n",txt_buf,txt_len);\r
+            if(txt_len>=AI_TXT_BUF_MAX_LEN)\r
+            txt_len=AI_TXT_BUF_MAX_LEN;\r
+\r
+            char *txt_buf=(char*)malloc(txt_len+1);\r
+            if(txt_buf==NULL)\r
+            {\r
+                printf("binCheck_AI txtbuf malloc fail\r\n");\r
+                ble_set_ai_Answer_str("手表缓存不足");\r
+                return 0;\r
+            }\r
+\r
+            txt_buf[txt_len]=0;\r
+            memcpy_s((char *)txt_buf,1024*3,&buf[offset],txt_len);\r
+\r
+            printf("binCheck_AI txtbuf Answer %s %d\r\n",txt_buf,txt_len);\r
             ble_set_ai_Answer_str(txt_buf);\r
+            free(txt_buf);\r
+\r
             offset+=txt_len;\r
             //offset+=1;\r
        }\r
-       if(offset>=len)\r
-       {\r
-            break;\r
-       }\r
+        if(offset>=len)break;\r
         if(buf[offset]==0)\r
        {\r
             printf("AI 解析失败\r\n");\r
-            offset++;\r
-             break;\r
        }\r
-       offset++;\r
+       \r
+       if(offset>=len)break;\r
+        offset++;\r
     }\r
    \r
     *check = 1;\r
@@ -6045,6 +6060,7 @@ errcode_t cancel_recv_file(ble_read_data *buffer_handle)
 \r
 static uint8_t timer_flie_type=0;\r
 static uint32_t timer_flie_flag=0;\r
+ble_read_data* ble_read_timer_p=NULL;\r
 static void  ble_transfer_Timer_CallBack(int data)\r
 {\r
     timer_flie_flag--;\r
@@ -6063,6 +6079,23 @@ static void  ble_transfer_Timer_CallBack(int data)
         {\r
             TRANSMIT_DATA=TRANS_FREE;\r
         }\r
+        if (ble_read_timer_p->file_recv_stat.recv_file_stat != 2) //已经下载完毕的文件,没有必要cancel了。\r
+        {\r
+\r
+            if (ble_read_timer_p->file_recv_stat.file!=NULL)\r
+            {\r
+                fclose(ble_read_timer_p->file_recv_stat.file);\r
+                ble_read_timer_p->file_recv_stat.file = NULL;\r
+            }\r
+            if (ble_read_timer_p->file_recv_stat.file_name != NULL)\r
+            {\r
+                free(ble_read_timer_p->file_recv_stat.file_name);\r
+                ble_read_timer_p->file_recv_stat.file_name=NULL;\r
+            }\r
+            ble_read_timer_p->file_recv_stat.recv_file_stat = -1;\r
+\r
+            ble_reply_cmd(FILE_RECV_REPLY_STAT_CMD,0);//接收失败\r
+        }\r
         CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
         if(BR_TRANSFER_timer)\r
         {\r
@@ -6183,7 +6216,8 @@ errcode_t handle_recv_file(ble_read_data *buffer_handle,uint8_t *data, uint16_t
             BR_TRANSFER_timer = NULL;\r
         }\r
         timer_flie_type=buffer_handle->file_recv_stat.file_type;\r
-        timer_flie_flag=3;\r
+        ble_read_timer_p=buffer_handle;\r
+        timer_flie_flag=10;\r
 \r
         BR_TRANSFER_timer = osTimerNew((osTimerFunc_t)ble_transfer_Timer_CallBack, osTimerPeriodic, NULL, NULL);\r
         tick =1000;// osMs2Tick(1000);\r
@@ -6195,10 +6229,7 @@ errcode_t handle_recv_file(ble_read_data *buffer_handle,uint8_t *data, uint16_t
             return ERRCODE_FAIL;\r
         }\r
         ///////////////////////////////////////////////////////////\r
-\r
-\r
     }\r
-\r
     if (buffer_handle->file_recv_stat.file == NULL)\r
     {\r
         printf("6194 buffer_handle->file_recv_stat.file  \n");\r
@@ -6222,7 +6253,7 @@ errcode_t handle_recv_file(ble_read_data *buffer_handle,uint8_t *data, uint16_t
     }\r
 \r
     //检查文件是否写完\r
-    if(buffer_handle->file_recv_stat.file_size == buffer_handle->file_recv_stat.received_size )\r
+    if(buffer_handle->file_recv_stat.file_size == buffer_handle->file_recv_stat.received_size)\r
     {\r
         if (buffer_handle->file_recv_stat.file!=NULL)\r
         {\r