From: DXY <1731678236@qq.com> Date: Mon, 13 May 2024 12:32:54 +0000 (+0800) Subject: 修复ble死机问题:修改蓝牙名称大写显示 X-Git-Tag: release_V1.2.70_20241020_135402~1108^2~9 X-Git-Url: http://git.snicker.com.cn/sitemap.xml?a=commitdiff_plain;h=d97d7f297eb24caba3f7b25669b023b4791ba8dc;p=mirrors%2FFD230.git 修复ble死机问题:修改蓝牙名称大写显示 --- diff --git a/code/sdk/application/wearable/fd230app/nativeui/classicbluetooth/src/ClassicBlueToothPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/classicbluetooth/src/ClassicBlueToothPresenter.cpp index edac3ba73..99e08fd99 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/classicbluetooth/src/ClassicBlueToothPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/classicbluetooth/src/ClassicBlueToothPresenter.cpp @@ -117,18 +117,16 @@ namespace OHOS { case UICheckBox::SELECTED: WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BlueTooth Capability Is Enabled"); - malloc_test(); - // start_custom_ble_service(); // 主动开启蓝牙 + start_custom_ble_service(); // 主动开启蓝牙 - // ConfigModel::GetInstance()->SetClassicBlueToothState(true); + ConfigModel::GetInstance()->SetClassicBlueToothState(true); break; case UICheckBox::UNSELECTED: - malloc_test(); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BlueTooth Capability Is Disabled"); - // stop_custom_ble_service(); + stop_custom_ble_service(); - // ConfigModel::GetInstance()->SetClassicBlueToothState(false); + ConfigModel::GetInstance()->SetClassicBlueToothState(false); break; default: break; diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c index 7d52fb8c6..f5434be57 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c @@ -518,9 +518,10 @@ errcode_t UnbindSucessCmd(uint8_t flag)//发送解绑指令,解绑界面调用 return sendok; } -void getDeviceState(void) +void getDeviceState(void)//获取设备状态 { bool ret = bt_is_acl_connected(&phone_addr); + printf("getDeviceState ret:%d\r\n",ret); } void clearPaireFlag(uint8_t flag) @@ -1914,7 +1915,7 @@ uint8_t jsonCheck_weather(uint8_t *buf,uint8_t *check)//json 格式解析 天气 fputs((char *)buf,fp); fclose(fp); #endif - printf("开始解析天气数据\n"); + printf("开始解析天气数据 %x\n",json); cJSON* root = cJSON_Parse((const char *)json); if (root == NULL) { printf("天气 JSON解析错误\n"); @@ -4771,7 +4772,7 @@ uint8_t jscheck_ancs(uint8_t *data) hasCode_t = hasCode->valueint; } cJSON_Delete(root); - message_data(uid_t,appid_t,titleBuf,msgBuf,hasCode_t); + // message_data(uid_t,appid_t,titleBuf,msgBuf,hasCode_t); if(titleBuf != NULL){ ym_free(titleBuf); titleBuf = NULL; @@ -4894,13 +4895,19 @@ void bleDataRecv(uint8_t *totalData, uint16_t event_size,uint16_t handle) if(totalDataLen > event_size-17)//多包数据第一包处理,大于一包的数据长度 514-17=494 { packdataLen = event_size-17;//多包数据第一包数据不带CRC校验和的 - handle_l[i].data = ym_malloc(totalDataLen+1); - printf("bleDataRecv!!!!!!!%d\r\n",totalDataLen); - memcpy(handle_l[i].data,totalData+17,packdataLen);//从第十七个字节开始接收数据data - handle_l[i].data_len = packdataLen; - memset(handle_l[i].cmd_data,0,17); - memcpy(handle_l[i].cmd_data,totalData,17); + if(handle_l[i].data != NULL){ + printf("bleDataRecv!!!!!!!%d\r\n",totalDataLen); + if(handle_l[i].totalDataLen < packdataLen) + { + printf("packdataLen error!!!!!!!%d\r\n",packdataLen); + packdataLen=handle_l[i].totalDataLen; + } + memcpy(handle_l[i].data,totalData+17,packdataLen);//从第十七个字节开始接收数据data + handle_l[i].data_len = packdataLen; + memset(handle_l[i].cmd_data,0,17); + memcpy(handle_l[i].cmd_data,totalData,17); + } }else{//一包数据 printf("bleDataRecv one %d\r\n",totalDataLen); packdataLen = event_size-18; @@ -4918,19 +4925,27 @@ void bleDataRecv(uint8_t *totalData, uint16_t event_size,uint16_t handle) }else//多包数据存储 { + uint32_t packStartAddrLen = handle_l[i].data_len;// handle_l[i].data_len = handle_l[i].data_len+event_size; printf("muilt 133333 handle_l[i].data_len:%d\r\n",handle_l[i].data_len); if(handle_l[i].data_len >= handle_l[i].totalDataLen)//接收完整的数据 { - uint32_t packEndLen = handle_l[i].data_len-event_size;//这是最后一包的起始地址 - handle_l[i].data_len = handle_l[i].data_len-1;//减去最后一个字节的CRC校验和 才算是总的数据长度 - - memcpy(handle_l[i].data+packEndLen,totalData,handle_l[i].data_len);//为了不把CRC copy到data所以多一步操作 + //这是最后一包的起始地址 + if(handle_l[i].totalDataLen -packStartAddrLen < event_size-1) + { + printf("packStartAddrLen error!!!!!!!%d\r\n",packStartAddrLen); + event_size=handle_l[i].totalDataLen-packStartAddrLen; + } + memcpy(handle_l[i].data+packStartAddrLen,totalData,event_size-1);//为了不把CRC copy到data所以多一步操作 handle_l[i].crcvalue = totalData[event_size-1];//最后一个字节为总的数据包的CRC read_data_tmp = &handle_l[i]; - }else{ - memcpy(handle_l[i].data+handle_l[i].data_len,totalData,event_size); //这是不带CRC数据说明还有下一包直接copy + if(handle_l[i].totalDataLen -packStartAddrLen < event_size) + { + printf("event_size error!!!!!!!%d\r\n",event_size); + event_size=handle_l[i].totalDataLen-packStartAddrLen; + } + memcpy(handle_l[i].data+packStartAddrLen,totalData,event_size); //这是不带CRC数据说明还有下一包直接copy } } break; diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c index 56641dbd8..62955e404 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c @@ -169,7 +169,6 @@ static void svr_ble_adv_data_set(int adv_id) bluetooth_get_local_addr(&addr[0],len); char watchName[32]; memset_s(watchName, sizeof(watchName), 0, sizeof(watchName)); - (void)sprintf_s(watchName, sizeof(watchName), "%s %02X%02X",BLE_DEFAULT_NAME,addr[1],addr[0]); // (void)sprintf_s(watchName, sizeof(watchName), "%s",BLE_DEFAULT_NAME); @@ -1226,6 +1225,7 @@ void openBle(void) #define MODE_ALIPAY_ADV_SRV (1) void ble_avd_mode_change(uint8_t mode) { + if(AdverFlag == false) { return; @@ -1291,37 +1291,38 @@ typedef struct uint8_t *msg_data; } blesrv_custom_cmd_t; -#define MAX_BUF_LEN (2+4+4) //sizeof(blesrv_custom_cmd_t) /*MTU max 514 , sizeof(blesrv_custom_cmd_t)*/ -static unsigned long g_blesrv_queue = 0xFFFFFFFF; +#define MAX_BUF_LEN sizeof(blesrv_custom_cmd_t) //sizeof(blesrv_custom_cmd_t) /*MTU max 514 , sizeof(blesrv_custom_cmd_t)*/ +static unsigned long g_blesrv_queue; static uint8_t g_blesrv_queue_created = 0; + void blesrv_service_recv_msg_handler(uint16_t srv_handle, uint8_t * msg_data, uint32_t msg_len) { int ret; - + blesrv_custom_cmd_t blesrv_mail={0}; if( g_blesrv_queue_created == 0) return ; - if (msg_data == NULL) return ; + if (msg_data == NULL) return; - blesrv_custom_cmd_t mail={0}; + + // mail = (blesrv_custom_cmd_t*)malloc(sizeof(blesrv_custom_cmd_t)); uint32_t sendlen = MAX_BUF_LEN; - mail.service_handle = srv_handle; - mail.msg_len = msg_len; - mail.msg_data = (uint8_t*)malloc(msg_len); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble_recv:mail.msg_data %x\r\n",mail.msg_data); - if(mail.msg_data==NULL) + blesrv_mail.service_handle = srv_handle; + blesrv_mail.msg_len = msg_len; + blesrv_mail.msg_data = (uint8_t*)malloc(msg_len); + if(blesrv_mail.msg_data==NULL) { return ; } - memcpy_s(mail.msg_data,msg_len,msg_data,msg_len); + memcpy_s((blesrv_mail.msg_data),msg_len,msg_data,msg_len); + 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]); + ret = osal_msg_queue_write_copy(g_blesrv_queue, (void *)&blesrv_mail, sendlen , 0); - ret = osal_msg_queue_write_copy(g_blesrv_queue, (void *)&mail, MAX_BUF_LEN , 0); if (ret != OSAL_SUCCESS) { PRINT("Error blesrv Check send failed! err=0x%x! \r\n", ret); } - -} +} static void blesrv_service_check_task(void const *arg) { @@ -1336,15 +1337,16 @@ static void blesrv_service_check_task(void const *arg) OSAL_MSGQ_WAIT_FOREVER); if (ret != OSAL_SUCCESS) { + //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"OSAL_SUCCESS"); continue; } - uint8_t *p_msgbuf = mail.msg_data; + uint8_t *p_msgbuf = (mail.msg_data); uint16_t server_handle = mail.service_handle; uint32_t msg_len = mail.msg_len; - 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]); - #if 0 + 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]); + #if 1 if (server_handle == get_factory_ate_write_handl()) { factory_recv_cmd_data(p_msgbuf,msg_len,server_handle); @@ -1362,9 +1364,11 @@ static void blesrv_service_check_task(void const *arg) revBleOldData(p_msgbuf,msg_len,server_handle); } #endif - - // free(mail.msg_data); - // mail.msg_data = NULL; + if(mail.msg_data) + { + free(mail.msg_data); + mail.msg_data = NULL; + } WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble_recv:end\r\n"); } } @@ -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, 0, MAX_BUF_LEN) != ERRCODE_SUCC) { - printf("[blesrv][service] app create mail fail\n"); + printf("[blesrv][service] app create mail fail g_blesrv_queue:%d\n",g_blesrv_queue); g_blesrv_queue_created = 0; }else{ + printf("[blesrv][service] app create mail success g_blesrv_queue:%d\n",g_blesrv_queue); g_blesrv_queue_created = 1; }