#define BLE_ZHIHUI_OTA_ID 0x2ae6\r
#define BLE_ZHIHUI_OTA_REPLY_ID 0x2ae7\r
\r
+#define BLE_ZHIHUI_AI_ID 0x2ae8\r
+\r
#define BLE_CHARACTERISTIC_RECV_ID 0x2ae5\r
#define BLE_CHARACTERISTIC_SNED_SHORT_ID 0x2ae3\r
\r
uint16_t data2ae0Cmd = 0;//OTA\r
uint16_t data2ae6Cmd = 0;//自定义OTA \r
uint16_t data2ae7Cmd = 0;//自定义OTA \r
-\r
+uint16_t data2ae8Cmd = 0;//AI\r
\r
#define handle_max_len 40\r
\r
BLE_CHARACTERISTIC_SNED_ANDRIOD_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP,\r
BLE_CHARACTERISTIC_READ_BATTERY_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_READ|GATT_CHARACTER_PROPERTY_BIT_NOTIFY,\r
BLE_ZHIHUI_OTA_ID_ID_PROPERTIES=GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP,\r
-\r
+ BLE_ZHIHUI_AI_ID_ID_PROPERTIES=GATT_CHARACTER_PROPERTY_BIT_NOTIFY|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP|GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_READ,\r
BLE_ZHIHUI_OTA_REPLY_ID_PROPERTIES=GATT_CHARACTER_PROPERTY_BIT_NOTIFY|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP|GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_READ,\r
};\r
static uint8_t ble_adv_falg = 0;\r
}\r
}\r
\r
+static void srv_ble_add_Zhihui_AI(uint8_t server_id,uint16_t srv_handle)\r
+{\r
+ errcode_t ret = 0;\r
+ static uint8_t battery_point_val[] = {0x00, 0x00};\r
+ gatts_add_chara_info_t character;\r
+ gatts_add_desc_info_t descriptor;\r
+\r
+ bts_data_to_uuid_len2(BLE_ZHIHUI_AI_ID, &character.chara_uuid);\r
+ character.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE;\r
+ character.properties = BLE_ZHIHUI_AI_ID_ID_PROPERTIES;\r
+ character.value_len = (uint16_t)sizeof(battery_point_val);\r
+ character.value = battery_point_val;\r
+\r
+ ret = gatts_add_characteristic(server_id, srv_handle, &character);\r
+ if (ret != ERRCODE_SUCC) {\r
+ // ALIPAY_PRINT_ERR(0, "gatts_add_characteristic fail, ret:%u.\r\n", ret);\r
+ }\r
+ bts_data_to_uuid_len2(BLE_UUID_CLIENT_CHARACTERISTIC_CONF, &descriptor.desc_uuid);\r
+ descriptor.permissions = GATT_ATTRIBUTE_PERMISSION_WRITE;\r
+ descriptor.value_len = (uint16_t)sizeof(battery_point_val);\r
+ descriptor.value = battery_point_val;\r
+ \r
+ ret = gatts_add_descriptor(server_id, srv_handle, &descriptor);\r
+ if (ret != ERRCODE_SUCC) {\r
+ // ALIPAY_PRINT_ERR(0, "gatts_add_descriptor fail, ret:%u.\r\n", ret);\r
+ }\r
+\r
+ bts_data_to_uuid_len2(BLE_UUID_USER_CHARACTERISTIC_CONF, &descriptor.desc_uuid);\r
+ descriptor.permissions = GATT_ATTRIBUTE_PERMISSION_WRITE | GATT_ATTRIBUTE_PERMISSION_READ;;\r
+ descriptor.value_len = (uint16_t)sizeof(battery_point_val);\r
+ descriptor.value = battery_point_val;\r
+ \r
+ ret = gatts_add_descriptor(server_id, srv_handle, &descriptor);\r
+ if (ret != ERRCODE_SUCC) {\r
+ // ALIPAY_PRINT_ERR(0, "gatts_add_descriptor fail, ret:%u.\r\n", ret);\r
+ }\r
+}\r
+\r
+\r
//用于adnriod发送消息添加特征值和描述符\r
static void srv_ble_add_chart_decr_andriod(uint8_t server_id,uint16_t srv_handle)\r
{ \r
srv_ble_add_chart_decr_long_cmd(server_id,srv_handle);\r
srv_ble_add_chart_decr_recv_cmd(server_id,srv_handle);\r
srv_ble_add_chart_decr_Zhihui_ota(server_id,srv_handle);\r
+ srv_ble_add_Zhihui_AI(server_id,srv_handle);\r
+ \r
+ // srv_ble_add_chart_decr_Zhihui_AI(server_id,srv_handle);\r
srv_ble_add_ZHIHUIOTA_REPLY_chart_decr_recv_cmd(server_id,srv_handle);\r
gatts_start_service(server_id, srv_handle);\r
}\r
bt_uuid_t chara_uuid_data_2ae7 = {0};\r
bts_data_to_uuid_len2(BLE_ZHIHUI_OTA_REPLY_ID, &chara_uuid_data_2ae7);\r
\r
+ bt_uuid_t chara_uuid_data_2ae8 = {0};\r
+ bts_data_to_uuid_len2(BLE_ZHIHUI_AI_ID, &chara_uuid_data_2ae8);\r
+\r
+ if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data_2ae8))\r
+ {\r
+ if(data2ae8Cmd==0)\r
+ {\r
+ data2ae8Cmd=result->value_handle;\r
+ }\r
+ Is_value_handle[handle_num]=result->value_handle;\r
+ handle_num++;\r
+ }\r
+\r
if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data_2ae7))\r
{\r
if(data2ae7Cmd==0)\r
{\r
data2ae7Cmd=result->value_handle;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "data2ae7Cmd");\r
}\r
Is_value_handle[handle_num]=result->value_handle;\r
handle_num++;\r
\r
if(ret!=ERRCODE_SUCC)\r
{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.data_len:%d", ret, g_ble_server_id,\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.data_len:%d", ret, g_ble_server_id,\r
g_ble_conn_id, g_ble_server_handle,data_len);\r
- ble_set_ai_Answer_str("BLE NOTIF ERROR",5);\r
+\r
+ // ble_set_ai_Answer_str("BLE NOTIF ERROR",5);\r
}\r
\r
}\r
data_info.value = data;\r
data_info.value_len = data_len;\r
if (g_ble_conn_id == 0)\r
- return 0;\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_ble_conn_id");\r
+ // return 0;\r
+ }\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_ble_conn_id %d g_ble_conn_id %d",g_ble_server_id,g_ble_conn_id);\r
+ errcode_t ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info);\r
+ if(ret!=ERRCODE_SUCC)\r
+ {\r
+ msleep(50);\r
+ ret=gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info);\r
+ if(ret!=ERRCODE_SUCC)\r
+ {\r
+ msleep(100);\r
+ ret=gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info);\r
+\r
+ if(ret!=ERRCODE_SUCC)\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.data_len:%d", ret, g_ble_server_id,\r
+ g_ble_conn_id, g_ble_server_handle,data_len);\r
+ }\r
+ }\r
+ return ret; \r
+}\r
+\r
+errcode_t svr_ble_bt_gatts_noyify_AI(uint8_t *data, uint16_t data_len)//这里是设备数据上报给app手机端\r
+{\r
+ gatts_ntf_ind_t data_info;\r
+ data_info.attr_handle = data2ae8Cmd;\r
+ data_info.value = data;\r
+ data_info.value_len = data_len;\r
+ if (g_ble_conn_id == 0)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_ble_conn_id");\r
+ // return 0;\r
+ }\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_ble_conn_id %d g_ble_conn_id %d",g_ble_server_id,g_ble_conn_id);\r
errcode_t ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info);\r
if(ret!=ERRCODE_SUCC)\r
{\r
ret=gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info);\r
\r
if(ret!=ERRCODE_SUCC)\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.data_len:%d", ret, g_ble_server_id,\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.data_len:%d", ret, g_ble_server_id,\r
g_ble_conn_id, g_ble_server_handle,data_len);\r
}\r
}\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble_recv:end\r\n");\r
}\r
}\r
-#define BLESRV_APP_BOARD_MSG_COUNT 50\r
+#define BLESRV_APP_BOARD_MSG_COUNT 500\r
#define BLESRV_APP_BOARD_TASK_SIZE 0x2000\r
#define BLESRV_BOARD_TASK_PRIO 7\r
void create_blesrv_queue(void)\r
return;\r
}\r
\r
+static unsigned long g_ble_Ai_record_queue = 0xFFFFFFFF;\r
+static uint8_t g_ble_Ai_record_queue_created = 0;\r
+\r
+void create_Ai_record_queue(void)\r
+{\r
+ if (osal_msg_queue_create("Ai_record_queue", BLESRV_APP_BOARD_MSG_COUNT, &g_ble_Ai_record_queue,\r
+ 0, MAX_BUF_LEN) != ERRCODE_SUCC)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"[blesrv][service] app create mail fail g_blesrv_queue:%d\n",g_ble_Ai_record_queue);\r
+ g_ble_Ai_record_queue_created = 0;\r
+ }else{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"[blesrv][service] app create mail success g_blesrv_queue:%d\n",g_ble_Ai_record_queue);\r
+ g_ble_Ai_record_queue_created = 1;\r
+ }\r
+\r
+}\r
+\r
+\r
+#define Ai_TEST 0\r
+static void blesrvAi_send_service_task(void const *arg)\r
+{\r
+ unused(arg);\r
+ int32_t ret;\r
+ blesrv_custom_cmd_t mail={0};\r
+ uint32_t msgsize = MAX_BUF_LEN;\r
+\r
+ #if Ai_TEST\r
+ FILE* fp= fopen("user/airecord.pcm","wb+");\r
+ #endif\r
+ while (1)\r
+ {\r
+ ret = osal_msg_queue_read_copy(g_ble_Ai_record_queue, (void *)&mail, &msgsize,\r
+ OSAL_MSGQ_WAIT_FOREVER);\r
+ if (ret != OSAL_SUCCESS)\r
+ {\r
+ continue;\r
+ }\r
+ \r
+\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
+ #if Ai_TEST\r
+ fwrite(fp,1,mail.msg_len,mail.msg_data);\r
+ #endif\r
+ // if(get_ble_connect())\r
+ send_Ai_record(mail.msg_len,mail.msg_data);\r
+ \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
+\r
+\r
+static blesrv_custom_cmd_t g_blesrv_mail={0};\r
+\r
+errcode_t uapi_Ai_send_service_init(void)\r
+{\r
+\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"uapi_blesrv_service_init !\r\n");\r
+ app_task_definition_t taskcfg = {0};\r
+ taskcfg.create_queue_handle = create_Ai_record_queue;\r
+ taskcfg.attr.name = "Ai_record_queue_service";\r
+ taskcfg.attr.priority = osPriorityNormal;\r
+ taskcfg.attr.stack_size = BLESRV_APP_BOARD_TASK_SIZE;\r
+ taskcfg.func = blesrvAi_send_service_task;\r
+ taskcfg.use_mem = USE_EXTEND_MEM;\r
+\r
+ g_blesrv_mail.msg_len=0;\r
+ g_blesrv_mail.msg_data=NULL;\r
+\r
+\r
+ errcode_t ret = uapi_create_osThread_custom(&taskcfg);\r
+ if (ret != ERRCODE_SUCC)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"create blesrv_service failed %d!\r\n", ret);\r
+ return ERRCODE_FAIL;\r
+ }\r
+\r
+ return ERRCODE_SUCC;\r
+}\r
+\r
+\r
+uint32_t send_msg_data_into_Ai_msg_queue_count=0;\r
+\r
+\r
+void AI_data_assembly(uint8_t type,uint8_t *buf)\r
+{\r
+ \r
+ memset_s(buf,ble_nus_max_data_len,0,19);\r
+ // 设置消息头部信息\r
+ buf[0] = 0x72; // 消息头\r
+ buf[1] = 0x08; // 类型\r
+ if(type)\r
+ buf[2] = 0x01; // 类型ID\r
+ else\r
+ buf[2] = 0x02; // 类型ID\r
+ uint32_t temp_data=1;\r
+ memcpy(buf + 3, &temp_data, 4); // 总包数\r
+ memcpy(buf + 7, &temp_data, 4); // 总数据长度\r
+ memcpy(buf + 11, &temp_data, 4); // 数据包ID\r
+ memcpy(buf + 15, &temp_data, 2); // 包数据长度\r
+ \r
+ buf[18] = 0; // 计算CRC\r
+}\r
+\r
+static uint8_t g_blesrv_mail_flag=0;\r
+\r
+\r
+\r
+int send_msg_data_into_Ai_msg_queue(void *buff,uint16_t len,uint8_t type)\r
+{\r
+ blesrv_custom_cmd_t blesrv_mail={0};\r
+ uint32_t ret ;\r
+ if( g_blesrv_queue_created == 0) return ERRCODE_FAIL;\r
+ if (buff == NULL) return ERRCODE_FAIL;\r
+\r
+ uint32_t sendlen = sizeof(blesrv_custom_cmd_t);\r
+ uint32_t singlebuflen= ble_nus_max_data_len-20;\r
+\r
+\r
+ if(len<=singlebuflen)\r
+ {\r
+ if(type==1)\r
+ {\r
+ blesrv_mail.service_handle = 0;\r
+ blesrv_mail.msg_len = len;\r
+ blesrv_mail.msg_data = (uint8_t*)malloc(len);\r
+\r
+ if(blesrv_mail.msg_data==NULL)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ memcpy_s((void *)(blesrv_mail.msg_data),len,buff,len);\r
+\r
+ ret = osal_msg_queue_write_copy(g_ble_Ai_record_queue, (void *)&blesrv_mail, sendlen , 0);\r
+ if (ret != OSAL_SUCCESS)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"len<=singlebuflen Error blesrv Check send failed! err=0x%X %d! \r\n", ret,send_msg_data_into_Ai_msg_queue_count);\r
+ }\r
+ return OSAL_SUCCESS;\r
+\r
+ }\r
+ else if(type==2)\r
+ {\r
+\r
+ blesrv_custom_cmd_t blesrv_mail_end={0};\r
+\r
+ blesrv_mail_end.msg_len=g_blesrv_mail.msg_len;\r
+ blesrv_mail_end.msg_data=malloc(g_blesrv_mail.msg_len);\r
+ if(blesrv_mail_end.msg_data==NULL)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+\r
+ memcpy_s( blesrv_mail_end.msg_data,singlebuflen,g_blesrv_mail.msg_data,g_blesrv_mail.msg_len);\r
+ free(g_blesrv_mail.msg_data);\r
+ g_blesrv_mail.msg_data=NULL;\r
+ g_blesrv_mail.msg_len=0;\r
+\r
+ ret = osal_msg_queue_write_copy(g_ble_Ai_record_queue, (void *)&blesrv_mail_end, sendlen , 0);\r
+ if (ret != OSAL_SUCCESS)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"len<=singlebuflen Error blesrv Check send failed! err=0x%X %d! \r\n", ret,send_msg_data_into_Ai_msg_queue_count);\r
+ }\r
+\r
+ blesrv_mail.service_handle = 0;\r
+ blesrv_mail.msg_len = len;\r
+ blesrv_mail.msg_data = (uint8_t*)malloc(len);\r
+\r
+ if(blesrv_mail.msg_data==NULL)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ memcpy_s((void *)(blesrv_mail.msg_data),len,buff,len);\r
+\r
+ ret = osal_msg_queue_write_copy(g_ble_Ai_record_queue, (void *)&blesrv_mail, sendlen , 0);\r
+ if (ret != OSAL_SUCCESS)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"len<=singlebuflen Error blesrv Check send failed! err=0x%X %d! \r\n", ret,send_msg_data_into_Ai_msg_queue_count);\r
+ }\r
+ return OSAL_SUCCESS;\r
+ }\r
+ //以下为文件数据处理\r
+ if(g_blesrv_mail.msg_len+len<singlebuflen)\r
+ {\r
+ if (g_blesrv_mail.msg_len!=0 || g_blesrv_mail.msg_data!=NULL)\r
+ {\r
+ g_blesrv_mail.msg_data=realloc( g_blesrv_mail.msg_data,g_blesrv_mail.msg_len+len);\r
+ if(g_blesrv_mail.msg_data==NULL)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ memcpy_s(g_blesrv_mail.msg_data+ g_blesrv_mail.msg_len,singlebuflen,buff,len);\r
+ g_blesrv_mail.msg_len+=len;\r
+ }\r
+ else\r
+ {\r
+ g_blesrv_mail.msg_data=malloc(len);\r
+ if(g_blesrv_mail.msg_data==NULL)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+\r
+ memcpy_s(g_blesrv_mail.msg_data+ g_blesrv_mail.msg_len,singlebuflen,buff,len);\r
+ g_blesrv_mail.msg_len+=len;\r
+ }\r
+ \r
+ \r
+ return OSAL_SUCCESS;\r
+ }\r
+ else if(g_blesrv_mail.msg_len+len==singlebuflen)\r
+ {\r
+ // g_blesrv_mail.msg_data=realloc( g_blesrv_mail.msg_data,g_blesrv_mail.msg_len+len);\r
+\r
+ blesrv_mail.msg_len = singlebuflen;\r
+ blesrv_mail.msg_data = (uint8_t*)malloc(singlebuflen);\r
+ if(blesrv_mail.msg_data==NULL)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+\r
+ memcpy_s( blesrv_mail.msg_data,singlebuflen,g_blesrv_mail.msg_data,g_blesrv_mail.msg_len);\r
+ memcpy_s( blesrv_mail.msg_data+ g_blesrv_mail.msg_len,singlebuflen,buff,len);\r
+\r
+ g_blesrv_mail.msg_len=0;\r
+ free( g_blesrv_mail.msg_data);\r
+ g_blesrv_mail.msg_data=NULL;\r
+\r
+ ret = osal_msg_queue_write_copy(g_ble_Ai_record_queue, (void *)&blesrv_mail, sendlen , 0);\r
+ if (ret != OSAL_SUCCESS)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"len<=singlebuflen Error blesrv Check send failed! err=0x%X %d! \r\n", ret,send_msg_data_into_Ai_msg_queue_count);\r
+ }\r
+ return OSAL_SUCCESS; \r
+\r
+ }\r
+ else\r
+ {\r
+ blesrv_mail.msg_len=g_blesrv_mail.msg_len;\r
+ blesrv_mail.msg_data=malloc(g_blesrv_mail.msg_len);\r
+ if(blesrv_mail.msg_data==NULL)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ memcpy_s( blesrv_mail.msg_data,singlebuflen,g_blesrv_mail.msg_data,g_blesrv_mail.msg_len);\r
+ free(g_blesrv_mail.msg_data);\r
+\r
+ g_blesrv_mail.msg_len=len;\r
+ g_blesrv_mail.msg_data=malloc(len);\r
+ memcpy_s( blesrv_mail.msg_data,singlebuflen,buff,len);\r
+ \r
+ ret = osal_msg_queue_write_copy(g_ble_Ai_record_queue, (void *)&blesrv_mail, sendlen , 0);\r
+ if (ret != OSAL_SUCCESS)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"len<=singlebuflen Error blesrv Check send failed! err=0x%X %d! \r\n", ret,send_msg_data_into_Ai_msg_queue_count);\r
+ }\r
+ return OSAL_SUCCESS; \r
+ }\r
+\r
+ }\r
+ else\r
+ {\r
+ uint8_t count=len/singlebuflen;\r
+ if(len%singlebuflen)\r
+ {\r
+ count++;\r
+ }\r
+ uint16_t residue_len=len;\r
+ for(int i=0;i<count;i++)\r
+ {\r
+ blesrv_mail.service_handle = 0;\r
+ if(residue_len>=singlebuflen)\r
+ {\r
+ blesrv_mail.msg_len = singlebuflen;\r
+ blesrv_mail.msg_data = (uint8_t*)malloc(singlebuflen);\r
+ \r
+ if(blesrv_mail.msg_data==NULL)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ memcpy_s((void *)(blesrv_mail.msg_data),singlebuflen,buff+i*singlebuflen,singlebuflen);\r
+ residue_len-=singlebuflen;\r
+ }\r
+ else if(len%singlebuflen)\r
+ {\r
+ blesrv_mail.msg_len = len%singlebuflen;\r
+ blesrv_mail.msg_data = (uint8_t*)malloc( len%singlebuflen);\r
+ \r
+ if(blesrv_mail.msg_data==NULL)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ memcpy_s((void *)(blesrv_mail.msg_data),len%singlebuflen,buff+i*singlebuflen,len%singlebuflen);\r
+ }\r
+ \r
+\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"g_blesrv_queue:%d ble_recv:mail.msg_data %X %02X %02X %02X msg_data:%02X %02X %02X\r\n",\r
+ g_ble_Ai_record_queue,\r
+ blesrv_mail.msg_data,\r
+ blesrv_mail.msg_data[0],\r
+ blesrv_mail.msg_data[1],\r
+ blesrv_mail.msg_data[2],\r
+ msg_data[0],\r
+ msg_data[1],\r
+ msg_data[2]\r
+ );\r
+ ret = osal_msg_queue_write_copy(g_ble_Ai_record_queue, (void *)&blesrv_mail, sendlen , 0);\r
+ if (ret != OSAL_SUCCESS)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"else Error blesrv Check send failed! err=0x%X %d %d! \r\n", ret,send_msg_data_into_Ai_msg_queue_count,len);\r
+ }\r
+ }\r
+ }\r
+ \r
+ \r
+ return ret;\r
+}\r
+\r
+\r
\r
#ifdef __cplusplus\r
}\r