修复ble死机问题:修改蓝牙名称大写显示
authorDXY <1731678236@qq.com>
Mon, 13 May 2024 12:32:54 +0000 (20:32 +0800)
committerDXY <1731678236@qq.com>
Mon, 13 May 2024 12:32:54 +0000 (20:32 +0800)
code/sdk/application/wearable/fd230app/nativeui/classicbluetooth/src/ClassicBlueToothPresenter.cpp
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c
code/sdk/application/wearable/service/ble_service/bleservice/bleService.c

index edac3ba..99e08fd 100644 (file)
@@ -117,18 +117,16 @@ namespace OHOS
         {\r
         case UICheckBox::SELECTED:\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BlueTooth Capability Is Enabled");\r
-            malloc_test();\r
-            // start_custom_ble_service(); // 主动开启蓝牙\r
+            start_custom_ble_service(); // 主动开启蓝牙\r
 \r
-            // ConfigModel::GetInstance()->SetClassicBlueToothState(true);\r
+            ConfigModel::GetInstance()->SetClassicBlueToothState(true);\r
             break;\r
         case UICheckBox::UNSELECTED:\r
-            malloc_test();\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BlueTooth Capability Is Disabled");\r
 \r
-            // stop_custom_ble_service();\r
+            stop_custom_ble_service();\r
 \r
-            // ConfigModel::GetInstance()->SetClassicBlueToothState(false);\r
+            ConfigModel::GetInstance()->SetClassicBlueToothState(false);\r
             break;\r
         default:\r
             break;\r
index 7d52fb8..f5434be 100644 (file)
@@ -518,9 +518,10 @@ errcode_t UnbindSucessCmd(uint8_t flag)//发送解绑指令,解绑界面调用
 \r
     return sendok;\r
 }\r
-void getDeviceState(void)\r
+void getDeviceState(void)//获取设备状态\r
 {\r
     bool ret = bt_is_acl_connected(&phone_addr);\r
+    printf("getDeviceState ret:%d\r\n",ret);\r
 }\r
 \r
 void clearPaireFlag(uint8_t flag)\r
@@ -1914,7 +1915,7 @@ uint8_t jsonCheck_weather(uint8_t *buf,uint8_t *check)//json 格式解析 天气
         fputs((char *)buf,fp);\r
         fclose(fp);\r
     #endif\r
-    printf("开始解析天气数据\n");\r
+    printf("开始解析天气数据 %x\n",json);\r
     cJSON* root = cJSON_Parse((const char *)json);\r
     if (root == NULL) {\r
         printf("天气 JSON解析错误\n");\r
@@ -4771,7 +4772,7 @@ uint8_t jscheck_ancs(uint8_t *data)
         hasCode_t = hasCode->valueint;\r
     }\r
     cJSON_Delete(root);\r
-    message_data(uid_t,appid_t,titleBuf,msgBuf,hasCode_t);\r
+    // message_data(uid_t,appid_t,titleBuf,msgBuf,hasCode_t);\r
     if(titleBuf != NULL){\r
         ym_free(titleBuf);\r
         titleBuf = NULL;\r
@@ -4894,13 +4895,19 @@ void bleDataRecv(uint8_t *totalData, uint16_t event_size,uint16_t handle)
                 if(totalDataLen > event_size-17)//多包数据第一包处理,大于一包的数据长度 514-17=494\r
                 {\r
                     packdataLen = event_size-17;//多包数据第一包数据不带CRC校验和的\r
-                    \r
                     handle_l[i].data = ym_malloc(totalDataLen+1);\r
-                    printf("bleDataRecv!!!!!!!%d\r\n",totalDataLen);\r
-                    memcpy(handle_l[i].data,totalData+17,packdataLen);//从第十七个字节开始接收数据data\r
-                    handle_l[i].data_len = packdataLen;\r
-                    memset(handle_l[i].cmd_data,0,17);\r
-                    memcpy(handle_l[i].cmd_data,totalData,17);\r
+                    if(handle_l[i].data != NULL){\r
+                        printf("bleDataRecv!!!!!!!%d\r\n",totalDataLen);\r
+                        if(handle_l[i].totalDataLen < packdataLen)\r
+                        {\r
+                            printf("packdataLen error!!!!!!!%d\r\n",packdataLen);\r
+                            packdataLen=handle_l[i].totalDataLen;\r
+                        }\r
+                        memcpy(handle_l[i].data,totalData+17,packdataLen);//从第十七个字节开始接收数据data\r
+                        handle_l[i].data_len = packdataLen;\r
+                        memset(handle_l[i].cmd_data,0,17);\r
+                        memcpy(handle_l[i].cmd_data,totalData,17);\r
+                    } \r
                 }else{//一包数据\r
                     printf("bleDataRecv one %d\r\n",totalDataLen);\r
                     packdataLen = event_size-18;\r
@@ -4918,19 +4925,27 @@ void bleDataRecv(uint8_t *totalData, uint16_t event_size,uint16_t handle)
             }else//多包数据存储\r
             {\r
 \r
+                uint32_t packStartAddrLen = handle_l[i].data_len;//\r
                 handle_l[i].data_len = handle_l[i].data_len+event_size;\r
                 printf("muilt 133333 handle_l[i].data_len:%d\r\n",handle_l[i].data_len);\r
                 if(handle_l[i].data_len >= handle_l[i].totalDataLen)//接收完整的数据\r
                 {\r
-                    uint32_t packEndLen = handle_l[i].data_len-event_size;//这是最后一包的起始地址\r
-                    handle_l[i].data_len = handle_l[i].data_len-1;//减去最后一个字节的CRC校验和 才算是总的数据长度\r
-                    \r
-                    memcpy(handle_l[i].data+packEndLen,totalData,handle_l[i].data_len);//为了不把CRC copy到data所以多一步操作\r
+                    //这是最后一包的起始地址\r
+                    if(handle_l[i].totalDataLen -packStartAddrLen < event_size-1)\r
+                    {\r
+                        printf("packStartAddrLen error!!!!!!!%d\r\n",packStartAddrLen);\r
+                        event_size=handle_l[i].totalDataLen-packStartAddrLen;\r
+                    }\r
+                    memcpy(handle_l[i].data+packStartAddrLen,totalData,event_size-1);//为了不把CRC copy到data所以多一步操作\r
                     handle_l[i].crcvalue = totalData[event_size-1];//最后一个字节为总的数据包的CRC\r
                     read_data_tmp = &handle_l[i];\r
-                    \r
                 }else{\r
-                    memcpy(handle_l[i].data+handle_l[i].data_len,totalData,event_size); //这是不带CRC数据说明还有下一包直接copy\r
+                    if(handle_l[i].totalDataLen -packStartAddrLen < event_size)\r
+                    {\r
+                        printf("event_size error!!!!!!!%d\r\n",event_size);\r
+                        event_size=handle_l[i].totalDataLen-packStartAddrLen;\r
+                    }\r
+                    memcpy(handle_l[i].data+packStartAddrLen,totalData,event_size); //这是不带CRC数据说明还有下一包直接copy\r
                 }\r
             }\r
             break;\r
index 56641db..62955e4 100644 (file)
@@ -169,7 +169,6 @@ static void svr_ble_adv_data_set(int adv_id)
     bluetooth_get_local_addr(&addr[0],len);\r
     char watchName[32];\r
     memset_s(watchName, sizeof(watchName), 0, sizeof(watchName));\r
-\r
     (void)sprintf_s(watchName, sizeof(watchName), "%s %02X%02X",BLE_DEFAULT_NAME,addr[1],addr[0]);\r
     // (void)sprintf_s(watchName, sizeof(watchName), "%s",BLE_DEFAULT_NAME);\r
 \r
@@ -1226,6 +1225,7 @@ void openBle(void)
 #define MODE_ALIPAY_ADV_SRV (1)\r
 void ble_avd_mode_change(uint8_t mode)\r
 {\r
+    \r
     if(AdverFlag == false)\r
     {\r
         return;\r
@@ -1291,37 +1291,38 @@ typedef struct
     uint8_t *msg_data;\r
 } blesrv_custom_cmd_t;\r
 \r
-#define MAX_BUF_LEN  (2+4+4) //sizeof(blesrv_custom_cmd_t) /*MTU max 514 , sizeof(blesrv_custom_cmd_t)*/\r
-static unsigned long g_blesrv_queue = 0xFFFFFFFF;\r
+#define MAX_BUF_LEN  sizeof(blesrv_custom_cmd_t) //sizeof(blesrv_custom_cmd_t) /*MTU max 514 , sizeof(blesrv_custom_cmd_t)*/\r
+static unsigned long g_blesrv_queue;\r
 static uint8_t g_blesrv_queue_created = 0;\r
+\r
 void blesrv_service_recv_msg_handler(uint16_t srv_handle, uint8_t * msg_data, uint32_t msg_len)\r
 {\r
     int ret;\r
-    \r
+    blesrv_custom_cmd_t blesrv_mail={0};\r
     if( g_blesrv_queue_created == 0) return ;\r
-     if (msg_data == NULL) return ;\r
+    if (msg_data == NULL) return;\r
 \r
-    blesrv_custom_cmd_t mail={0};\r
+   \r
+    // mail = (blesrv_custom_cmd_t*)malloc(sizeof(blesrv_custom_cmd_t));\r
     uint32_t sendlen = MAX_BUF_LEN;\r
 \r
     \r
-    mail.service_handle = srv_handle;\r
-    mail.msg_len = msg_len;\r
-    mail.msg_data = (uint8_t*)malloc(msg_len);\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble_recv:mail.msg_data %x\r\n",mail.msg_data);\r
-    if(mail.msg_data==NULL)\r
+    blesrv_mail.service_handle = srv_handle;\r
+    blesrv_mail.msg_len = msg_len;\r
+    blesrv_mail.msg_data = (uint8_t*)malloc(msg_len);\r
+    if(blesrv_mail.msg_data==NULL)\r
     {\r
         return ;\r
     }\r
-    memcpy_s(mail.msg_data,msg_len,msg_data,msg_len);\r
+    memcpy_s((blesrv_mail.msg_data),msg_len,msg_data,msg_len);\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"g_blesrv_queue :%d ble_recv:mail.msg_data %x %x %x %x msg_data:%x %x %x\r\n",g_blesrv_queue,blesrv_mail.msg_data,blesrv_mail.msg_data[0],blesrv_mail.msg_data[1],blesrv_mail.msg_data[2],msg_data[0],msg_data[1],msg_data[2]);\r
+    ret = osal_msg_queue_write_copy(g_blesrv_queue, (void *)&blesrv_mail, sendlen , 0);\r
 \r
-    ret = osal_msg_queue_write_copy(g_blesrv_queue, (void *)&mail, MAX_BUF_LEN , 0);\r
     if (ret != OSAL_SUCCESS)\r
     {\r
         PRINT("Error blesrv Check send failed! err=0x%x! \r\n", ret);\r
     }\r
-    \r
-}\r
+}   \r
 \r
 static void blesrv_service_check_task(void const *arg)\r
 {\r
@@ -1336,15 +1337,16 @@ static void blesrv_service_check_task(void const *arg)
                                        OSAL_MSGQ_WAIT_FOREVER);\r
         if (ret != OSAL_SUCCESS)\r
         {\r
+            //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"OSAL_SUCCESS");\r
             continue;\r
         }\r
         \r
-        uint8_t *p_msgbuf = mail.msg_data;\r
+        uint8_t *p_msgbuf = (mail.msg_data);\r
         uint16_t server_handle = mail.service_handle;\r
         uint32_t msg_len = mail.msg_len;\r
 \r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble_recv:%d %d %x %x %x\r\n",msg_len,server_handle,p_msgbuf[0],p_msgbuf[1],p_msgbuf[2]);\r
-        #if 0\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"mail.msg_data:%x,g_blesrv_queue:%d ble_recv:%d %d %x %x %x mail.msg_data:%x %x %x %x\r\n",mail.msg_data,g_blesrv_queue,msg_len,server_handle,p_msgbuf[0],p_msgbuf[1],p_msgbuf[2],mail.msg_data ,mail.msg_data[0],mail.msg_data[1],mail.msg_data[2]);\r
+        #if 1\r
         if (server_handle == get_factory_ate_write_handl()) \r
         {\r
             factory_recv_cmd_data(p_msgbuf,msg_len,server_handle);\r
@@ -1362,9 +1364,11 @@ static void blesrv_service_check_task(void const *arg)
             revBleOldData(p_msgbuf,msg_len,server_handle);\r
         }\r
         #endif\r
-\r
-        // free(mail.msg_data);\r
-        // mail.msg_data = NULL;\r
+        if(mail.msg_data)\r
+        {\r
+            free(mail.msg_data);\r
+            mail.msg_data = NULL;\r
+        }\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble_recv:end\r\n");\r
     }\r
 }\r
@@ -1376,9 +1380,10 @@ void create_blesrv_queue(void)
     if (osal_msg_queue_create("blesrv_service_queue", BLESRV_APP_BOARD_MSG_COUNT, &g_blesrv_queue,\r
                               0, MAX_BUF_LEN) != ERRCODE_SUCC)\r
     {\r
-        printf("[blesrv][service] app create mail fail\n");\r
+        printf("[blesrv][service] app create mail fail g_blesrv_queue:%d\n",g_blesrv_queue);\r
         g_blesrv_queue_created = 0;\r
     }else{\r
+        printf("[blesrv][service] app create mail success g_blesrv_queue:%d\n",g_blesrv_queue);\r
         g_blesrv_queue_created = 1;\r
     }\r
 \r