\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
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
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
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
}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
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
#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
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
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
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
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