}\r
app_pkg_msg_send(HEAPINFO, DIAG_CONTROL_FALSE, NULL, 0);\r
}\r
+#include "bleService.h"\r
+\r
+static const char* getHandlname(uint16_t handle)\r
+{\r
+\r
+ if (data2ae0Cmd == handle) return "data2ae0Cmd";\r
+ if (data2ae1Cmd == handle) return "data2ae1Cmd";\r
+ if (data2ae3Cmd == handle) return "data2ae3Cmd";\r
+ if (data2ae4Cmd == handle) return "data2ae4Cmd";\r
+ if (data2ae5Cmd == handle) return "data2ae5Cmd";\r
+ \r
+ return "unknown handle";\r
+\r
+}\r
+\r
// typedef void (*hx3695_msg_callback_t)(uint8_t msg_type, uint8_t *msg_data, int32_t msg_datalen);\r
uint32_t ble_recv_register_msg_callback(ble_recv_msg_callback_t func)\r
{\r
}\r
\r
bool bigDataBufState=false;//大数据传输状态\r
-static bool Check_CRC(uint8_t *crcnum,uint16_t len,uint8_t crcvalue)//计算20byte的的校验位\r
+static bool Check_CRC(uint8_t *data,uint16_t len,uint8_t crcvalue)//计算20byte的的校验位\r
{\r
uint8_t crcbuf = 0;\r
uint8_t lrcValue = 0x00;\r
- if(crcnum == NULL)\r
+ if(data == NULL)\r
{\r
- return true;\r
- // if(crcvalue == 0x00)\r
- // {\r
- // return true;\r
- // }else{\r
- // return false;\r
- // }\r
+ return false; \r
}\r
for(uint16_t i = 0; i < len; i++)\r
{\r
- lrcValue =lrcValue+ crcnum[i];\r
- // printf("%02x ",crcnum[i]);\r
+ lrcValue =lrcValue+ data[i];\r
+ // printf("%02x ",data[i]);\r
}\r
//"{\"pn\":\"iPhone\",\"tp\":1}";\r
\r
crcbuf = crcbuf%256;\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "Check_CRC ret:0x%x len:%d\r\n",crcbuf,len);\r
\r
- return true;\r
- // if(crcbuf == crcvalue)\r
- // {\r
- // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "Check_CRC true:\r\n");\r
- // return true;\r
- // }\r
- // else{\r
- // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "Check_CRC false:\r\n");\r
- // return false;\r
- // }\r
+ if(crcbuf == crcvalue)\r
+ {\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "Check_CRC true:\r\n");\r
+ return true;\r
+ }\r
+ else{\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Check_CRC false:\r\n");\r
+ return false;\r
+ }\r
\r
}\r
-static uint8_t Calculate_CRC(uint8_t *crcnum,uint16_t len)//计算20byte\r
+static uint8_t Calculate_CRC(uint8_t *data,uint16_t len)//计算20byte\r
{\r
uint8_t crcbuf = 0;\r
uint8_t lrcValue = 0x00;\r
for(uint16_t i = 17; i < len; i++)\r
{\r
- lrcValue =lrcValue+ crcnum[i];\r
+ lrcValue =lrcValue+ data[i];\r
}\r
// printf("Calculate_CRC:%x,len:%d",lrcValue,len);\r
crcbuf = lrcValue%256;\r
crcbuf = crcbuf%256;\r
return crcbuf;\r
}\r
-static uint8_t cal_sum(uint8_t *crcnum,uint16_t len)//计算20byte\r
+static uint8_t cal_sum(uint8_t *data,uint16_t len)//计算20byte\r
{\r
uint8_t lrcValue = 0x00;\r
for(uint16_t i = 0; i < len; i++)\r
{\r
- lrcValue =lrcValue+ crcnum[i];\r
+ lrcValue =lrcValue+ data[i];\r
}\r
return lrcValue;\r
}\r
-static uint8_t Calculate_CRC_Big(uint8_t *crcnum,uint16_t len)//计算20byte\r
+static uint8_t Calculate_CRC_Big(uint8_t *data,uint16_t len)//计算20byte\r
{\r
uint8_t crcbuf = 0;\r
uint8_t lrcValue = 0x00;\r
for(uint16_t i = 0; i < len; i++)\r
{\r
- lrcValue =lrcValue+ crcnum[i];\r
+ lrcValue =lrcValue+ data[i];\r
}\r
crcbuf = lrcValue%256;\r
crcbuf = 256-crcbuf;\r
UnbindSucessCmd(1);//1确认解绑;\r
uapi_reboot_device();\r
}\r
-void clearPaireCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)//发送清除配对指令\r
+void clearPaireCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)//发送清除配对指令\r
{\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
//弹出清除配对界面不弹出是则发送0x02操作失败 1操作成功 0校验失败\r
clearPaireFlag(1);\r
}\r
\r
\r
-void getPhoneNameLen(uint8_t *crcnum,uint8_t *datalen)//获取手机设备名称长度\r
+void getPhoneNameLen(uint8_t *data,uint8_t *datalen)//获取手机设备名称长度\r
{\r
uint8_t len = 0;\r
- uint8_t *json = crcnum;\r
+ uint8_t *json = data;\r
cJSON* root = cJSON_Parse((const char *)json);\r
\r
if(root != NULL)\r
}\r
}\r
#define PHONE_NAME_MAX_LEN 50\r
-static uint8_t *getPhoneName(uint8_t *crcnum)//获取手机设备名称\r
+static uint8_t *getPhoneName(uint8_t *data)//获取手机设备名称\r
{\r
- uint8_t *json = crcnum;\r
+ uint8_t *json = data;\r
uint8_t *str = NULL; \r
cJSON* root = cJSON_Parse((const char *)json);\r
if(root != NULL)\r
}\r
\r
}\r
-void getPhoneMac(uint8_t *crcnum,uint8_t *phoneMac)//获取手机设备mac这个是手表上传给手机的mac地址\r
+void getPhoneMac(uint8_t *data,uint8_t *phoneMac)//获取手机设备mac这个是手表上传给手机的mac地址\r
{\r
- uint8_t *json = crcnum;\r
+ uint8_t *json = data;\r
uint8_t phone_tmp[6];\r
memset(phone_tmp,0,6);\r
cJSON* root = cJSON_Parse((const char *)json);\r
uapi_reboot_device();\r
}\r
}\r
-void sendBindInfor(uint8_t *crcnum)\r
+void sendBindInfor(uint8_t *data)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
uint8_t MacType = 0;\r
\r
GetwatchSaveMac(&save_mac,&MacType);//获取手表设备本地保存的mac地址和mac地址类型 \r
- getPhoneMac(crcnum,&copare_mac);\r
+ getPhoneMac(data,&copare_mac);\r
if(save_mac[0] == 0 && save_mac[1] == 0 && save_mac[2] == 0 && save_mac[3] == 0 && save_mac[4] == 0 && save_mac[5] == 0)//只要手表本地存储没有mac地址就走连接流程重新绑定\r
{\r
bond = 0x01;//手表未和任何手机绑定过\r
sendBleData(value,19);\r
#ifdef SUPPORT_DEVICE_PAIRING_NOTIFICATION\r
devnamelen = 0;\r
- getPhoneNameLen(crcnum,&devnamelen);//获取手机下发的手机设备名称长度\r
+ getPhoneNameLen(data,&devnamelen);//获取手机下发的手机设备名称长度\r
if(devnamelen > 0 )\r
{\r
- devname = getPhoneName(crcnum);\r
+ devname = getPhoneName(data);\r
printf("devname!!!!!!!!!:%s devnamelen:%d",devname,devnamelen);\r
if (devname != NULL){\r
printf("phone devname is name!!!!!!!!!:");\r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
}\r
-void getPhoneInfo(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取手机信息\r
+void getPhoneInfo(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取手机信息\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+15,&tmp_fen,2);\r
phoneDataFlag = 1;\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
- sendBindInfor(crcnum);\r
+ sendBindInfor(data);\r
}else{\r
value[17] = 0x00;\r
value[18] = Calculate_CRC(value,18);\r
\r
\r
\r
-void GetUTCtime(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取时间\r
+void GetUTCtime(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取时间\r
{\r
uint32_t tmp = 1;\r
uint16_t tmp_data = 1;\r
memcpy(sendBuf+11,&tmp,4);\r
memcpy(sendBuf+15,&tmp_data,2);\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
\r
- uint8_t *data;\r
- data = crcnum;\r
uint8_t set_ok = 1;\r
set_ok = jsonCheck_time(data);\r
sendBuf[17] = set_ok;\r
}\r
\r
\r
-void GetTarinTarget(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取时间\r
+void GetTarinTarget(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取时间\r
{\r
uint32_t tmp = 1;\r
uint16_t tmp_data = 1;\r
memcpy(sendBuf+11,&tmp,4);\r
memcpy(sendBuf+15,&tmp_data,2);\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
- uint8_t *data;\r
- data = crcnum;\r
uint8_t set_ok = 1;\r
set_ok = jsonCheck_targetparam(data);\r
sendBuf[17] = set_ok;\r
\r
}\r
\r
-static void GetOtherTarget(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取其他目标\r
+static void GetOtherTarget(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取其他目标\r
{\r
uint32_t tmp = 1;\r
uint16_t tmp_data = 1;\r
memcpy(sendBuf+11,&tmp,4);\r
memcpy(sendBuf+15,&tmp_data,2);\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
// 73 2 17 1 0 0 0 8 0 0 0 1 0 0 0 8 0 2c 1 a 8 1e 1 1 1 2\r
\r
- uint16_t target_kcal = crcnum[0]+crcnum[1]*256;//目标卡路里\r
- uint8_t target_km = crcnum[2];//目标里程\r
- uint8_t target_stand = crcnum[3];//目标站立\r
- uint8_t target_fattime = crcnum[4];//目标燃脂\r
- uint8_t ring = crcnum[5];//铃声\r
- uint8_t vibratior = crcnum[6];//振动\r
- uint8_t notify = crcnum[7];//通知\r
+ uint16_t target_kcal = data[0]+data[1]*256;//目标卡路里\r
+ uint8_t target_km = data[2];//目标里程\r
+ uint8_t target_stand = data[3];//目标站立\r
+ uint8_t target_fattime = data[4];//目标燃脂\r
+ uint8_t ring = data[5];//铃声\r
+ uint8_t vibratior = data[6];//振动\r
+ uint8_t notify = data[7];//通知\r
\r
set_goal_caloriescount(target_kcal);\r
set_goal_discount(target_km);\r
\r
}\r
\r
-void SetAlarmDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取app下发的屏幕参数\r
+void SetAlarmDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取app下发的屏幕参数\r
{\r
uint32_t tmp = 1;\r
uint16_t tmp_data = 1;\r
memcpy(sendBuf+11,&tmp,4);\r
memcpy(sendBuf+15,&tmp_data,2);\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
- jsonCheck_alarm(crcnum);\r
+ jsonCheck_alarm(data);\r
\r
sendBuf[17] = 1;\r
sendBuf[18] = Calculate_CRC(sendBuf,18);\r
\r
\r
\r
-void GetWatchLcdParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取app下发的屏幕参数\r
+void GetWatchLcdParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取app下发的屏幕参数\r
{\r
uint32_t tmp = 1;\r
uint16_t tmp_data = 1;\r
memcpy(sendBuf+11,&tmp,4);\r
memcpy(sendBuf+15,&tmp_data,2);\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
- uint8_t type = crcnum[0];\r
+ uint8_t type = data[0];\r
if(type == 0)//只设置屏幕亮度\r
{\r
- uint8_t brightness = crcnum[1];\r
+ uint8_t brightness = data[1];\r
set_brigthness(brightness);\r
}else if(type == 1)//设置亮屏时长 抬碗亮屏\r
{\r
- uint8_t screen_type = crcnum[1];//ms级别\r
+ uint8_t screen_type = data[1];//ms级别\r
int screen_time = 5*1000;\r
switch (screen_type)\r
{\r
default:\r
break;\r
}\r
- bool raise = crcnum[2];\r
+ bool raise = data[2];\r
set_ScreenDuration(screen_time);\r
Set_RaiseToWake(raise);\r
}\r
\r
\r
\r
-void GetVoiceVibrateParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取app下发的声音与振动参数\r
+void GetVoiceVibrateParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取app下发的声音与振动参数\r
{\r
uint32_t tmp = 1;\r
uint16_t tmp_data = 1;\r
memcpy(sendBuf+11,&tmp,4);\r
memcpy(sendBuf+15,&tmp_data,2);\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
\r
- uint8_t type = crcnum[0];\r
+ uint8_t type = data[0];\r
if(type == 0)//只改变系统音量参数 其他还是保持不变 按照原来的参数\r
{\r
- int sys_volume = crcnum[1];\r
+ int sys_volume = data[1];\r
Set_SystemVolume(sys_volume);\r
\r
}else if(type == 1)//只改变铃声音量参数 其他还是保持不变 按照原来的参数\r
{\r
int ring_volume = 0;\r
- ring_volume = crcnum[1];\r
+ ring_volume = data[1];\r
Set_CallVolume(ring_volume);\r
\r
}else if(type == 2)//只改变媒体音量\r
{\r
int ring_volume = 0;\r
- ring_volume = crcnum[1];\r
+ ring_volume = data[1];\r
Set_CallVolume(ring_volume);\r
}\r
else if(type == 3)//只改变铃声和振动开关\r
{\r
- int bell_on = crcnum[1];\r
- int vibrate_on = crcnum[2];\r
+ int bell_on = data[1];\r
+ int vibrate_on = data[2];\r
set_SilentMode(bell_on);\r
set_vibrationremiander(vibrate_on);\r
}\r
\r
}\r
\r
-void GetHrSetParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取app下发的声音与振动参数\r
+void GetHrSetParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取app下发的声音与振动参数\r
{\r
uint32_t tmp = 1;\r
uint16_t tmp_data = 1;\r
memcpy(sendBuf+11,&tmp,4);\r
memcpy(sendBuf+15,&tmp_data,2);\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
ble_recv_msg_callback_t func = ble_recv_get_send_msg_callback_func();\r
memset(&hr_param,0,sizeof(msg_get_heart_set_param_info_t));\r
func(READ_FLASH_DATA,cmd,&hr_param,sizeof(msg_get_heart_set_param_info_t));\r
}\r
// printf("drink_info:%d %d %d\r\n",drink_info.drink_on,drink_info.alarm_mode,drink_info.start_hour);\r
- hr_param.frequence = crcnum[0];\r
- hr_param.remind_on = crcnum[1];\r
- hr_param.max_min = crcnum[2];\r
- hr_param.heart = crcnum[3];\r
+ hr_param.frequence = data[0];\r
+ hr_param.remind_on = data[1];\r
+ hr_param.max_min = data[2];\r
+ hr_param.heart = data[3];\r
if(func != NULL)\r
{\r
func(WRITE_FLASH_DATA,cmd,&hr_param,sizeof(msg_get_heart_set_param_info_t));\r
}\r
\r
\r
-void GetSpo2SetParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)\r
+void GetSpo2SetParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)\r
{\r
uint32_t tmp = 1;\r
uint16_t tmp_data = 1;\r
memcpy(sendBuf+11,&tmp,4);\r
memcpy(sendBuf+15,&tmp_data,2);\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
ble_recv_msg_callback_t func = ble_recv_get_send_msg_callback_func();\r
memset(&spo2_param,0,sizeof(msg_get_spo2_set_param_info_t));\r
func(READ_FLASH_DATA,cmd,&spo2_param,sizeof(msg_get_spo2_set_param_info_t));\r
}\r
// printf("drink_info:%d %d %d\r\n",drink_info.drink_on,drink_info.alarm_mode,drink_info.start_hour);\r
- spo2_param.frequence = crcnum[0];\r
- spo2_param.remind_on = crcnum[1];\r
+ spo2_param.frequence = data[0];\r
+ spo2_param.remind_on = data[1];\r
if(spo2_param.remind_on)\r
{\r
- spo2_param.spo2 = crcnum[2];\r
+ spo2_param.spo2 = data[2];\r
}\r
\r
if(func != NULL)\r
\r
}\r
\r
-void SetsleepSetParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//设置睡眠\r
+void SetsleepSetParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//设置睡眠\r
{\r
uint32_t tmp = 1;\r
uint16_t tmp_data = 1;\r
memcpy(sendBuf+11,&tmp,4);\r
memcpy(sendBuf+15,&tmp_data,2);\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
msg_get_sleep_param_info_t sleep_info;\r
- sleep_info.schedule = crcnum[0];\r
- sleep_info.bedtime_hour= crcnum[1];\r
- sleep_info.bedtime_min= crcnum[2];\r
- sleep_info.waketime_hour= crcnum[3];\r
- sleep_info.waketime_min= crcnum[4];\r
- sleep_info.bedtime_alarm= crcnum[5];\r
+ sleep_info.schedule = data[0];\r
+ sleep_info.bedtime_hour= data[1];\r
+ sleep_info.bedtime_min= data[2];\r
+ sleep_info.waketime_hour= data[3];\r
+ sleep_info.waketime_min= data[4];\r
+ sleep_info.bedtime_alarm= data[5];\r
ble_set_sleep_remind(sleep_info);\r
\r
sendBuf[17] = 1;\r
}\r
}\r
\r
-void SetDrinkSetParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取喝水提醒s设置\r
+void SetDrinkSetParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取喝水提醒s设置\r
{\r
uint32_t tmp = 1;\r
uint16_t tmp_data = 1;\r
memcpy(sendBuf+11,&tmp,4);\r
memcpy(sendBuf+15,&tmp_data,2);\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
msg_drink_info_t drink_info;\r
- drink_info.drink_on = crcnum[0];\r
- if(crcnum[1])\r
+ drink_info.drink_on = data[0];\r
+ if(data[1])\r
{\r
drink_info.drink_on=2;\r
}\r
- // drink_info.drink_on = crcnum[1];\r
- drink_info.goal = crcnum[2]+crcnum[3]*256;\r
- drink_info.time_start = crcnum[4]<<16|crcnum[5];\r
- if(crcnum[1])\r
+ // drink_info.drink_on = data[1];\r
+ drink_info.goal = data[2]+data[3]*256;\r
+ drink_info.time_start = data[4]<<16|data[5];\r
+ if(data[1])\r
{\r
- drink_info.time_end = crcnum[6]<<16|crcnum[7];\r
- drink_info.freq = crcnum[8];\r
+ drink_info.time_end = data[6]<<16|data[7];\r
+ drink_info.freq = data[8];\r
\r
}\r
ble_set_drink_remind(drink_info);\r
\r
}\r
//APP设置步数目标\r
-void SetsteptargetParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)\r
+void SetsteptargetParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)\r
{\r
uint32_t tmp = 1;\r
uint16_t tmp_data = 1;\r
memcpy(sendBuf+11,&tmp,4);\r
memcpy(sendBuf+15,&tmp_data,2);\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
\r
uint32_t targetStep;\r
- memcpy(&targetStep,crcnum,4);\r
- uint8_t ringOn=crcnum[5];\r
- uint8_t vibration=crcnum[6];\r
- uint8_t notify=crcnum[7];\r
+ memcpy(&targetStep,data,4);\r
+ uint8_t ringOn=data[5];\r
+ uint8_t vibration=data[6];\r
+ uint8_t notify=data[7];\r
printf("设置步数:%d\r\n",targetStep);\r
\r
set_goal_stepcount(targetStep);\r
}\r
\r
\r
-void GetWeatherCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取天气数据\r
+void GetWeatherCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取天气数据\r
{\r
uint32_t tmp = 1;\r
uint16_t tmp_data = 1;\r
memcpy(sendBuf+7,&tmp,4);\r
memcpy(sendBuf+11,&tmp,4);\r
memcpy(sendBuf+15,&tmp_data,2);\r
- // printf("GetWeatherCmd:len:%d crcnum:%s\r\n",len,crcnum);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ // printf("GetWeatherCmd:len:%d data:%s\r\n",len,data);\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
uint8_t check = 1;\r
- jsonCheck_weather(crcnum,&check);\r
+ jsonCheck_weather(data,&check);\r
sendBuf[17] = check;\r
sendBuf[18] = Calculate_CRC(sendBuf,18);\r
sendBleData(sendBuf,19);\r
\r
}\r
//APP下发设置用户数据\r
-void getUserInfo(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//\r
+void getUserInfo(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//\r
{\r
+ \r
+ // 用户数据同步死机,暂时跳过 by Snicker\r
+ return;\r
+\r
uint8_t value[19];\r
memset(value,0,19);\r
uint32_t tmp = 1;\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp,2);\r
- \r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
printf("getUserInfo:!!!!!!!!\r\n");\r
msg_user_info_t user_info={0};\r
\r
for(uint8_t i = 0;i<len;i++)\r
{\r
- printf("%x ",crcnum[i]);\r
+ printf("%x ",data[i]);\r
}\r
- user_info.age = crcnum[0];\r
- user_info.gender = crcnum[1];\r
- user_info.height = crcnum[2];\r
+ user_info.age = data[0];\r
+ user_info.gender = data[1];\r
+ user_info.height = data[2];\r
printf("getUserInfo:!!!!!!!!5555\r\n");\r
- memcpy(&user_info.weight,crcnum+3,2);\r
- //memcpy(crcnum+3,&user_info.weight,2);\r
- memcpy(&user_info.target_step,crcnum+5,4);\r
+ memcpy(&user_info.weight,data+3,2);\r
+ //memcpy(data+3,&user_info.weight,2);\r
+ memcpy(&user_info.target_step,data+5,4);\r
printf("getUserInfo:!!!!!!!!666\r\n");\r
- //memcpy(crcnum+5,&user_info.target_step,4);\r
- memcpy(&user_info.fat_time,crcnum+9,2);\r
- user_info.target_stand = crcnum[11];\r
- user_info.timeformat = crcnum[12];\r
+ //memcpy(data+5,&user_info.target_step,4);\r
+ memcpy(&user_info.fat_time,data+9,2);\r
+ user_info.target_stand = data[11];\r
+ user_info.timeformat = data[12];\r
uint32_t target_kcal = 0;\r
- memcpy(&target_kcal,crcnum+13,2);\r
+ memcpy(&target_kcal,data+13,2);\r
printf("getUserInfo:!!!!!!!!99\r\n");\r
set_goal_caloriescount(target_kcal);\r
printf("getUserInfo:!!!!!!!!22\r\n");\r
- uint8_t target_km = crcnum[15];\r
+ uint8_t target_km = data[15];\r
printf("getUserInfo:!!!!!!!!22\r\n");\r
set_goal_discount(target_km);\r
printf("getUserInfo:!!!!!!!!333\r\n",user_info.age,user_info.gender,user_info.height,user_info.weight,user_info.target_step,user_info.fat_time,user_info.target_stand,\r
}\r
}\r
//APP下发快捷辅助功能参数\r
-void get_auxil_fun_parm(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//\r
+void get_auxil_fun_parm(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&packtmp,2);\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
- uint8_t paramCnt = crcnum[0];//快捷辅助功能 按照协议文档要区分\r
+ uint8_t paramCnt = data[0];//快捷辅助功能 按照协议文档要区分\r
set_quick_auxiliary_paramters(paramCnt);\r
value[17] = 1;\r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
}\r
}\r
-void getTRAIN_TARGETInfo(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//\r
+void getTRAIN_TARGETInfo(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//\r
{\r
\r
}\r
// #include "phoneaddressmodel.h"\r
//电话薄解析函数\r
-void Parse_addressbook_bin(uint8_t *crcnum,uint16_t len)\r
+void Parse_addressbook_bin(uint8_t *data,uint16_t len)\r
{\r
- int num=crcnum[0];//人数\r
+ int num=data[0];//人数\r
int offset=1;\r
while (num)\r
{\r
- uint8 sex = crcnum[offset];\r
+ uint8 sex = data[offset];\r
printf("性别: %d\r\n",sex);\r
offset=offset+1;\r
- uint8 name_len=crcnum[offset];\r
+ uint8 name_len=data[offset];\r
printf("name_len %d\r\n",name_len);\r
char name[32]={0};\r
if(name_len==0)\r
}\r
else\r
{\r
- memcpy(name,&crcnum[offset+1],name_len);\r
+ memcpy(name,&data[offset+1],name_len);\r
printf("姓名: %s\r\n",name);\r
// for(int i=0;i<name_len;i++)\r
// {\r
// printf("r\n");\r
}\r
offset=offset+name_len+1;\r
- uint8 phone_num=crcnum[offset]; \r
+ uint8 phone_num=data[offset]; \r
offset=offset+1;\r
for(int i=0;i<phone_num;i++)\r
{ \r
\r
- uint8 phonen_len=crcnum[offset];\r
+ uint8 phonen_len=data[offset];\r
char phonen_name[32]={0};\r
- memcpy(phonen_name,&crcnum[offset+1],phonen_len);\r
+ memcpy(phonen_name,&data[offset+1],phonen_len);\r
printf("号码: %s\r\n",phonen_name);\r
// for(int i=0;i<phonen_len;i++)\r
// {\r
}\r
for(int i=0;i<phone_num;i++)\r
{\r
- uint8 add = crcnum[offset];\r
+ uint8 add = data[offset];\r
printf("归属地长度: %d\r\n",add);\r
- memcpy(name,&crcnum[offset+1],add);\r
+ memcpy(name,&data[offset+1],add);\r
printf("归属地: %s\r\n",name);\r
offset=offset+add+1;\r
- uint8 yun = crcnum[offset];\r
- memcpy(name,&crcnum[offset+1],yun);\r
+ uint8 yun = data[offset];\r
+ memcpy(name,&data[offset+1],yun);\r
printf("运营商: %s\r\n",name);\r
offset=offset+yun+1;\r
}\r
}\r
\r
}\r
-void getAPPaddressbook(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//\r
+void getAPPaddressbook(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp,2);\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
//解析,传来的二进制数据\r
// char *address_path = addressbook();\r
// FILE *file = fopen(address_path, "wb+");\r
// if (file)\r
// {\r
- // size_t len_t = fwrite((void *)crcnum,1,len,file);\r
+ // size_t len_t = fwrite((void *)data,1,len,file);\r
// fclose(file); \r
// if(len_t == len){\r
// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fwrite:%d",len_t);\r
\r
// }\r
// }\r
- addressbookToRead((char*)crcnum);\r
+ addressbookToRead((char*)data);\r
value[17] = 0x01;\r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
}\r
\r
//切换表盘\r
-static void switchDialCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void switchDialCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
uint16_t daila_type = 0;\r
- memcpy(&daila_type,&crcnum[17],2);\r
+ memcpy(&daila_type,&data[17],2);\r
value[17] = 1;//校验成功\r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
}\r
\r
//获取闹钟数据\r
-static void GetAlarmDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetAlarmDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
\r
uint32_t tmp = 1;\r
uint32_t data_len = 1;\r
uint16_t tmp_data = 1;\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
\r
cJSON *dataJSON = cJSON_CreateObject();\r
\r
\r
//关于本机内容\r
-static void aboutDeviceCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void aboutDeviceCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
\r
uint8_t _major,_mid,_minor;\r
memcpy(value+7,&data_len,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
memcpy(value+17,(uint8_t *)json_format,data_len);//17+69 = 86\r
\r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
}\r
-static void findWatchCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void findWatchCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
- uint8_t findFlag = crcnum[0];\r
+ uint8_t findFlag = data[0];\r
//弹窗界面\r
if(findFlag)//查找手表弹窗界面\r
{\r
} \r
}\r
//获取sd卡剩余空间\r
-static void GetSDSpaceCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetSDSpaceCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[27];\r
memset(value,0,27);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
uint8_t sdFlag = 0;\r
if(sdFlag == 1)// 1获取失败 2 获取成功 \r
} \r
}\r
//获取当前数据\r
-static void GetCurDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetCurDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
cJSON *dataJSON = cJSON_CreateObject();\r
const char *string_value[8]={"hr","spo2","stress","steps","duration","standup","calories","distance"};\r
\r
// uint8_t buf[22] = {0x7b,0x22,0x74,0x70,0x22,0x3a,0x31,0x2c,0x22,0x70,0x6e,0x22,0x3a,0x22,0x69,0x50,0x68,0x6f,0x6e,0x65,0x22,0x7d};\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
memcpy(value+17,(uint8_t *)json_format,data_len);\r
\r
cJSON_free(json_format);\r
}\r
//获取当手表电池电量\r
-static void GetBatteryLevelCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetBatteryLevelCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
float voltage = 0.0F;\r
uint8_t power = 0;\r
}\r
}\r
//获取开关消息推送功能\r
-static void GetSwitchMessCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetSwitchMessCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
- uint8_t switch_on = crcnum[0];//0 关闭 1 开启\r
+ uint8_t switch_on = data[0];//0 关闭 1 开启\r
\r
value[17] = 1;\r
value[18] = Calculate_CRC(value,18);\r
}\r
}\r
//撤销当前文件传输 1 OTA 2MP3 3表盘 3天气 5闹钟\r
-static void RemoveFileCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void RemoveFileCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
- uint8_t file_type= crcnum[0];//1 ota 2 MP3\r
+ uint8_t file_type= data[0];//1 ota 2 MP3\r
\r
value[17] = 1; //\r
value[18] = Calculate_CRC(value,18);\r
}\r
\r
//获取指定类型文件目录\r
-static void GetFileTypeCmd(uint8_t *crcnum,uint16_t len)\r
+static void GetFileTypeCmd(uint8_t *data,uint16_t len)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,1))\r
+ if(Check_CRC(data,len,1))\r
{\r
- uint8_t fileType = crcnum[17];//2 mp3 3 表盘\r
+ uint8_t fileType = data[17];//2 mp3 3 表盘\r
\r
value[17] = 1; //1 操作成功 2 操作失败\r
value[18] = Calculate_CRC(value,18);\r
}\r
}\r
//删除指定类型所有的文件\r
-static void DeleteFileTypeCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void DeleteFileTypeCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
value[17] = 1; //1 操作成功 2 操作失败\r
value[18] = Calculate_CRC(value,18);\r
}\r
//开启指定运动模式\r
\r
-static void OpenSportModeCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void OpenSportModeCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
- training_ble_data.sportType= crcnum[0];//运动类型 0 健走 1跑步 2骑行 3\r
+ training_ble_data.sportType= data[0];//运动类型 0 健走 1跑步 2骑行 3\r
training_ble_data.controlmd= START;\r
- printf("开启指定运动%d\r\n",crcnum[0]);\r
+ printf("开启指定运动%d\r\n",data[0]);\r
CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\r
value[17] = 1; //1 操作成功 2 操作失败\r
value[18] = Calculate_CRC(value,18);\r
}\r
}\r
//结束运动模式\r
-static void StopSportModeCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void StopSportModeCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
\r
training_ble_data.sportType= 4;//运动类型 0 健走 1跑步 2骑行 3\r
}\r
}\r
//设置语言\r
-static void SetLanguageCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void SetLanguageCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
- uint8_t language = crcnum[0];\r
+ uint8_t language = data[0];\r
set_languaage(language);\r
value[17] = 1; //1 操作成功 2 操作失败\r
value[18] = Calculate_CRC(value,18);\r
}\r
}\r
//开启/关闭获取实时训练数据\r
-static void SetRealTimeDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void SetRealTimeDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
- uint8_t autoSportData = crcnum[0];//开关 1开启 0关闭\r
+ uint8_t autoSportData = data[0];//开关 1开启 0关闭\r
/*进行开启关闭操作*/\r
printf("进行开启关闭操作 %d\r\n", autoSportData);\r
set_traning_updata_auto( autoSportData);\r
}\r
}\r
//设置训练数据采集频率\r
-static void SetRTDataFreCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void SetRTDataFreCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
- uint8_t Frequence = crcnum[0];//频率单位是s\r
+ uint8_t Frequence = data[0];//频率单位是s\r
/*设置获取频率*/\r
printf("设置获取频率 %d\r\n", Frequence);\r
set_traning_updata_freq(Frequence);\r
\r
}\r
//获取实时训练数据\r
-static void GetRealTimeDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetRealTimeDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
sendRealTimeDataToAPP(1);\r
}else\r
}\r
}\r
//设置最高心率提醒\r
-static void SetMaxHrRemindCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void SetMaxHrRemindCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))//\r
+ if(Check_CRC(data,len,crcvalue))//\r
{\r
- uint8_t maxHr = crcnum[0];\r
+ uint8_t maxHr = data[0];\r
if(maxHr > 250)maxHr = 250;//最高心率是250\r
else if(maxHr <= 0) maxHr = 0;\r
set_traning_heart_max(maxHr);\r
\r
}\r
//训练暂停/恢复\r
-static void GetSportPasueResetCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetSportPasueResetCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))//\r
+ if(Check_CRC(data,len,crcvalue))//\r
{\r
- uint8_t PauseStop = crcnum[0];//0 暂停 1恢复\r
+ uint8_t PauseStop = data[0];//0 暂停 1恢复\r
if(PauseStop==0)\r
{\r
training_ble_data.sportType= 4;//运动类型 0 健走 1跑步 2骑行 3\r
\r
}\r
//发送当前表盘到app\r
-static void SendDialToAppCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void SendDialToAppCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[20];\r
memset(value,0,20);\r
memcpy(value+7,&datalen,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))//\r
+ if(Check_CRC(data,len,crcvalue))//\r
{\r
uint16_t dialNum = 450;//0 暂停 1恢复\r
memcpy(&value[17],&dialNum,2);\r
\r
}\r
//获取手表当前状态\r
-static void GetWatchStatusCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetWatchStatusCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[20];\r
memset(value,0,20);\r
sendBleData(value,19);\r
}\r
//获取手表屏幕参数\r
-static void GetScreenParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetScreenParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[21];\r
memset(value,0,21);\r
}\r
\r
//App删除表盘 (仅W4手表)\r
-static void DeleteDialUidCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void DeleteDialUidCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[20];\r
memset(value,0,20);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
uint16_t deleteDial = 0;//删除的表盘UID \r
- deleteDial=crcnum[0]+crcnum[1]*256;\r
+ deleteDial=data[0]+data[1]*256;\r
value[17] = 1;// 1删除成功 2 没有改资源 0指令校验失败\r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
}\r
\r
//获取手表声音与振动参数 Sound and Vibration\r
-static void GetSoundVibrationCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetSoundVibrationCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[23];\r
memset(value,0,23);\r
memcpy(value+7,&datalen,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
\r
int sys_volume = Get_SystemVolume();\r
}\r
\r
//APP获取手表辅助功能参数Auxiliary functions\r
-static void GetWatchAuxFuncCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetWatchAuxFuncCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[23];\r
memset(value,0,23);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
uint8_t paramCmt = 0;//辅助功能 0\r
paramCmt = get_quick_auxiliary_paramters();\r
\r
}\r
//APP获取手表心率设置\r
-static void GetHrGetParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetHrGetParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[22];\r
memset(value,0,22);\r
memcpy(value+7,&datalen,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
uint8_t hrfreq = 0;//监测频率\r
uint8_t hrSwitch = 0;//心率提醒开关\r
\r
}\r
//APP获取手表血氧设置\r
-static void GetSpo2GetParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetSpo2GetParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[21];\r
memset(value,0,21);\r
memcpy(value+7,&datalen,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
uint8_t spo2freq = 0;//监测频率\r
uint8_t spo2Switch = 0;//心率提醒开关\r
sendBleData(value,19);\r
}\r
//手势拍照协议\r
-static void carmeraCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void carmeraCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
- uint8_t carmera_on = crcnum[0]; //0退出拍照界面 1进入拍照界面\r
+ uint8_t carmera_on = data[0]; //0退出拍照界面 1进入拍照界面\r
//需要加界面弹窗提示\r
if(carmera_on == 1)//进入拍照界面\r
{\r
}\r
\r
//APP获取手表喝水提醒设置\r
-static void GetDrinkParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetDrinkParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
}\r
\r
//APP发送恢复出厂设置\r
-static void GetFactoryCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetFactoryCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
\r
value[17] = 1;// \r
}\r
//APP发送重新启动\r
static uint8_t power_buf[2]={0};\r
-static void GetResetCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetResetCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
\r
value[17] = 1;// \r
}\r
}\r
//APP发送关机\r
-static void GetPowerOffCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetPowerOffCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
\r
value[17] = 1;// \r
\r
\r
//app发送公英制单位\r
-static void GetMetricCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetMetricCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
- uint8_t kmileter = crcnum[0];//公英制单位 0 是公英制 1英制单位\r
+ uint8_t kmileter = data[0];//公英制单位 0 是公英制 1英制单位\r
value[17] = 1;// \r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
}\r
\r
//app获取睡眠设置\r
-static void GetSleepParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetSleepParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[24];\r
memset(value,0,24);\r
}\r
\r
//app获取所有表盘UID\r
-static void GetAllDialUidCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetAllDialUidCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[24];\r
memset(value,0,24);\r
}\r
}\r
//app获取目标步数设置\r
-static void GetTargetStepCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetTargetStepCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[25];\r
memset(value,0,25);\r
}\r
\r
//app其他目标设置\r
-static void GetTargetOtherCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetTargetOtherCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[26];\r
memset(value,0,26);\r
}\r
\r
//app发送解除配对消息\r
-static void UnpairMessCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void UnpairMessCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&datalen,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
\r
value[17] = 1;//\r
}\r
}\r
//app发送同步数据结束消息\r
-static void GetSynDataEndCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetSynDataEndCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&datalen,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
value[17] = 1;//\r
value[18] = Calculate_CRC(value,18);\r
}\r
}\r
//同步历史步数\r
-static void stepDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void stepDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[58];\r
memset(value,0,58);\r
memcpy(value+7,&tmpToall,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
uint8_t data_buf[40]; //\r
uint8_t data_len = 0;\r
}\r
}\r
//同步卡路里历史数据\r
-static void kcalDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void kcalDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[58];\r
memset(value,0,58);\r
memcpy(value+7,&tmpToall,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
uint8_t data_buf[40]; //\r
uint8_t data_len = 4;\r
}\r
}\r
//同步距离历史数据\r
-static void disDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void disDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[58];\r
memset(value,0,58);\r
memcpy(value+7,&tmpToall,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
uint8_t data_buf[40]; //\r
uint8_t data_len = 4;\r
// ym_free(json_format);\r
}\r
//同步睡眠数据\r
-static void sleepDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void sleepDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[18+1];\r
memset(value,0,18+1);\r
memcpy(value+7,&tmpToall,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
value[17] = 0;\r
value[18] = 0xff;\r
}\r
}\r
//同步数据结束完成\r
-static void synEndDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void synEndDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[18+1];\r
memset(value,0,18+1);\r
memcpy(value+7,&tmpToall,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
value[17] = 1;\r
value[18] = Calculate_CRC(value,18);\r
}\r
}\r
//同步站立历史数据\r
-static void standDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void standDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[58];\r
memset(value,0,58);\r
memcpy(value+7,&tmpToall,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
uint8_t data_buf[40]; //\r
uint8_t data_len = 4;\r
}\r
\r
//同步燃脂时间数据\r
-static void burntimeDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void burntimeDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[48];\r
memset(value,0,48);\r
memcpy(value+7,&tmpToall,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
uint8_t data_buf[30]; //\r
uint32_t data_len = 0;\r
}\r
\r
//同步血氧历史数据\r
-static void spo2DataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void spo2DataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[43];\r
memset(value,0,43);\r
memcpy(value+7,&tmpToall,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
uint32_t data_len = 0;\r
for(uint16_t i = 0;i<5;i++)\r
}\r
\r
//手机app下发读设备数据指令\r
-void readDevDataBle(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)\r
+void readDevDataBle(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)\r
{\r
uint8_t sendBuf[19];\r
memset(sendBuf,0,19);\r
memcpy(sendBuf+11,&pack_count,4);//分包索引号\r
memcpy(sendBuf+15,&pack_datalen,2);//分包数据长度\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
bleSendTypeID=cmd-((cmd/256)*256);\r
- // printf("同步第%d天的数据\r\n",crcnum[0]);\r
+ // printf("同步第%d天的数据\r\n",data[0]);\r
int num;\r
switch (bleSendTypeID)\r
{\r
{\r
num=96;\r
}\r
- printf("同步心率数据,每包最多:%d 条数据 crcnum:%d\r\n",num,crcnum[0]);\r
+ printf("同步心率数据,每包最多:%d 条数据 data:%d\r\n",num,data[0]);\r
Read_file_buf_send_bin_Data(num,0x40,"heart_data_list");\r
break;\r
case 0x41://同步血氧历史数据\r
case 0x03://\r
type2AE1Data(buf_cmd,data,data_size,totalData,crcvalue);\r
break;\r
+ case 0x04:\r
+ type2AE0Data(buf_cmd,data,data_size,totalData,crcvalue);\r
+ break;\r
default:\r
break;\r
}\r
}\r
return 1;\r
}\r
-void ancsDataShowCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//\r
+void ancsDataShowCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp,2);\r
\r
- if(Check_CRC(crcnum,len,crcvalue))\r
+ if(Check_CRC(data,len,crcvalue))\r
{\r
//解析ancs数据并且显示出来\r
uint8_t check_ok= 1;\r
- check_ok = jscheck_ancs(crcnum);\r
+ check_ok = jscheck_ancs(data);\r
value[17] = 1;\r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
break;\r
}\r
}\r
+\r
+static ota_file_struct_t g_ota_file_stat={0};\r
+\r
+errcode_t ota_json_file_save(uint8_t *data,uint16_t datalen)\r
+{\r
+ printf("ota_json_file_save %s\n",data);\r
+\r
+ /**\r
+ * * OTA文件信息格式\r
+ * {\r
+ "type":1, \r
+ //"name":"MT2523_FOTA.bin",\r
+ "size":3894464,\r
+ "major":0,\r
+ "mid":3,\r
+ "minor":2\r
+ "isForced":1\r
+ }\r
+\r
+ {"isForced":0,"size":254208,"minor":1,"type":1,"major":1,"mid":0}\r
+ */\r
+\r
+ cJSON* root = cJSON_Parse((const char *)data);\r
+ \r
+ if(root != NULL)\r
+ { \r
+ cJSON* ota_type_json = cJSON_GetObjectItem(root, "type");\r
+ if(ota_type_json != NULL && cJSON_IsNumber(ota_type_json))\r
+ {\r
+ g_ota_file_stat.ota_type = ota_type_json->valueint;\r
+ }\r
+\r
+ cJSON* ota_name_json = cJSON_GetObjectItem(root, "name");\r
+ if ( ota_name_json != NULL && cJSON_IsString(ota_name_json)) {\r
+ g_ota_file_stat.ota_name = ota_name_json->valuestring;\r
+ }\r
+\r
+ cJSON* ota_size_json = cJSON_GetObjectItem(root, "size");\r
+ if(ota_size_json != NULL && cJSON_IsNumber(ota_size_json))\r
+ {\r
+ g_ota_file_stat.ota_size = ota_size_json->valueint;\r
+ }\r
+ cJSON* ota_major_json = cJSON_GetObjectItem(root, "major");\r
+ if(ota_major_json != NULL && cJSON_IsNumber(ota_major_json))\r
+ {\r
+ g_ota_file_stat.ota_major = ota_major_json->valueint;\r
+ }\r
+ cJSON* ota_mid_json = cJSON_GetObjectItem(root, "mid");\r
+ if(ota_mid_json != NULL && cJSON_IsNumber(ota_mid_json))\r
+ {\r
+ g_ota_file_stat.ota_mid = ota_mid_json->valueint;\r
+ }\r
+ cJSON* ota_minor_json = cJSON_GetObjectItem(root, "minor");\r
+ if(ota_minor_json != NULL && cJSON_IsNumber(ota_minor_json))\r
+ {\r
+ g_ota_file_stat.ota_minor = ota_minor_json->valueint;\r
+ }\r
+ cJSON* ota_isforced_json = cJSON_GetObjectItem(root, "isForced");\r
+ if(ota_isforced_json != NULL && cJSON_IsNumber(ota_isforced_json))\r
+ {\r
+ g_ota_file_stat.ota_isforced = ota_isforced_json->valueint;\r
+ }\r
+ cJSON_Delete(root);\r
+\r
+ printf(" ota_type= %d, ota_name=%s, ota_size=%d, ota_major=%d, ota_mid=%d, ota_minor=%d, ota_isforced=%d \n",\r
+ g_ota_file_stat.ota_type,\r
+ g_ota_file_stat.ota_name,\r
+ g_ota_file_stat.ota_size,\r
+ g_ota_file_stat.ota_major,\r
+ g_ota_file_stat.ota_mid,\r
+ g_ota_file_stat.ota_minor,\r
+ g_ota_file_stat.ota_isforced\r
+ );\r
+\r
+ }\r
+ return ERRCODE_SUCC;\r
+}\r
+\r
+void type2AE0Data(uint8_t *buf_cmd,uint8_t *data,uint16_t datalen,uint8_t *totalData,uint8_t crcvalue)\r
+{\r
+ uint16_t typeID = buf_cmd[1]*256 +buf_cmd[2];\r
+ printf("type2AE0Data typeID:0x%x datalen %d\r\n",typeID,datalen);\r
+ bool checkcrc = Check_CRC(data,datalen,crcvalue);\r
+ if( checkcrc == true )\r
+ {\r
+ switch (typeID) //ID\r
+ {\r
+ case OTA_FILE_RECV_CMD://\r
+ ota_json_file_save( data, datalen);\r
+ break;\r
+ }\r
+ \r
+ }else{\r
+ printf("type2AE0Data CRC failed!\n");\r
+ }\r
+ \r
+}\r
void bleRecvANCSData(uint8_t *data, uint16_t data_size,uint8_t *buf_cmd,uint8_t *totalData,uint8_t crcvalue)//buf_cmd 指令前17个字节数据\r
{\r
uint8_t type = buf_cmd[1];\r
uint8_t cmd_data[17];\r
uint8_t *recvData;\r
#include "los_memory.h"\r
+\r
+\r
+#if USE_PROTOCOL_EN_DE_BY_SNICKER\r
+#define MAX_BLE_MSG_PACKAGE_LEN (1024*5) //包缓存最大5k\r
+typedef struct \r
+{\r
+ uint8_t *data;\r
+ int handle;\r
+ int data_len ;\r
+ int totalDataLen;\r
+ msg_header_t cmd_header;\r
+ uint8_t crcvalue;\r
+} ble_read_data;\r
+\r
#define MAX_HANDLE_NUM 10\r
+//LITE_OS_SEC_TEXT_MINOR UINT32 LOS_MemInfoGet(VOID *pool, LOS_MEM_POOL_STATUS *poolStatus)\r
+//根据特征值分开组合读取的数据,并处理\r
+static ble_read_data handle_l[MAX_HANDLE_NUM]={0};\r
+\r
+void dumpHeader(msg_header_t *msgheader)\r
+{\r
+ printf("dumpHeader(%d) direction %02X, type %02X, id %02X, package_count %d, total_data_len %d,package_index %d , package_len %d\n",\r
+ sizeof(msg_header_t),\r
+ msgheader->direction, \r
+ msgheader->cmdtype, \r
+ msgheader->cmdid, \r
+ msgheader->package_count,\r
+ msgheader->total_data_len, \r
+ msgheader->package_index, \r
+ msgheader->package_len \r
+ );\r
+}\r
+\r
+\r
+/*****\r
+ * 组包函数\r
+ * 组包校验完成,在分发给对应的handler去解码协议。\r
+ * \r
+*/\r
+errcode_t combine_data_internal(ble_read_data *buffer_handle,uint8_t *totalData, uint16_t event_size)\r
+{\r
+\r
+ msg_header_t *header = (msg_header_t*)totalData;\r
+ dumpHeader(header);\r
+ buffer_handle->cmd_header.direction = header->direction;\r
+ buffer_handle->cmd_header.cmdtype = header->cmdtype;\r
+ buffer_handle->cmd_header.cmdid = header->cmdid;\r
+ buffer_handle->cmd_header.package_count = header->package_count;\r
+ buffer_handle->cmd_header.total_data_len = header->total_data_len;\r
+ buffer_handle->cmd_header.package_len = header->package_len;\r
+ buffer_handle->cmd_header.package_index = header->package_index;\r
+\r
+ //第一帧\r
+ if (buffer_handle->cmd_header.package_index == 1)\r
+ {\r
+ //如果有历史数据,没有被清空,可能是历史错误数据,则清空内存。\r
+ if (buffer_handle->data!=NULL && buffer_handle->data_len > 0)\r
+ {\r
+ free(buffer_handle->data);\r
+ buffer_handle->data = NULL;\r
+ buffer_handle->data_len = 0;\r
+ }\r
+ buffer_handle->totalDataLen = buffer_handle->cmd_header.total_data_len;\r
+ if (buffer_handle->totalDataLen > MAX_BLE_MSG_PACKAGE_LEN || buffer_handle->totalDataLen <= 0 )\r
+ {\r
+ printf("package is too lardge (%d) than (%d) or too small !\n",buffer_handle->totalDataLen,MAX_BLE_MSG_PACKAGE_LEN);\r
+ return ERRCODE_FAIL;\r
+ }\r
+ buffer_handle->data = malloc(buffer_handle->totalDataLen);\r
+ if (buffer_handle->data== NULL) \r
+ {\r
+ return ERRCODE_MALLOC;\r
+ }\r
+ }\r
+ //经过第一包处理,仍然data==NULL证明第一帧就是错的,要退出解析。\r
+ if (buffer_handle->data== NULL) \r
+ {\r
+ return ERRCODE_MALLOC;\r
+ }\r
+ //创建缓存开始存储包数据\r
+ if(buffer_handle->cmd_header.package_len >0)\r
+ {\r
+\r
+\r
+ }\r
+ //如果包完整接收,进行crc校验\r
+ if(buffer_handle->data_len == buffer_handle->totalDataLen)\r
+ {\r
+\r
+\r
+ }\r
+ return ERRCODE_SUCC;\r
+}\r
+\r
+void bleDataRecv(uint8_t *totalData, uint16_t event_size,uint16_t handle)\r
+{\r
+\r
+ if (event_size < sizeof(msg_header_t))\r
+ {\r
+ printf("event size (%d) is less than msg_header_t (%d) ",event_size,sizeof(msg_header_t));\r
+ return ;\r
+ }\r
+ if(sendbigDataBufState == true)//正在发送大数据不接收任何app指令下发的数据\r
+ {\r
+ return;\r
+ }\r
+ printf("bleDataRecv handle:%d\r\n",handle); \r
+\r
+ for(int i = 0;i<MAX_HANDLE_NUM;i++)\r
+ {\r
+ if(handle_l[i].handle == 0)//第一次用 \r
+ {\r
+ handle_l[i].handle = handle; \r
+ }\r
+ if(handle_l[i].handle == handle)\r
+ {\r
+ //找到当前handle的缓存数据 ,进行组包\r
+ combine_data_internal(&handle_l[i],totalData,event_size);\r
+ }\r
+ }\r
+}\r
+\r
+void free_ble_data(void)//以防断开蓝牙没有释放数据类型\r
+{\r
+ return;\r
+ totalpack = 0;\r
+ muiltFlag = 0; \r
+ packdataLen = 0;\r
+ totalDataLen = 0;\r
+ ANCSBigBufFlag = 0;\r
+ recvBigDataBufState = false;\r
+ sendbigDataBufState = false;\r
+ \r
+}\r
+#else \r
typedef struct \r
{\r
uint8_t *data;\r
uint8_t cmd_data[17];\r
uint8_t crcvalue;\r
} ble_read_data;\r
+\r
+#define MAX_HANDLE_NUM 10\r
//LITE_OS_SEC_TEXT_MINOR UINT32 LOS_MemInfoGet(VOID *pool, LOS_MEM_POOL_STATUS *poolStatus)\r
//根据特征值分开组合读取的数据,并处理\r
static ble_read_data handle_l[MAX_HANDLE_NUM]={0};\r
void bleDataRecv(uint8_t *totalData, uint16_t event_size,uint16_t handle)\r
{\r
+\r
+ if(sendbigDataBufState == true)//正在发送大数据不接收任何app指令下发的数据\r
+ {\r
+ return;\r
+ }\r
+ printf("bleDataRecv handle:%d\r\n",handle); \r
+\r
if(sendbigDataBufState == true)//正在发送大数据不接收任何app指令下发的数据\r
{\r
return;\r
{\r
if(handle_l[i].handle == 0)//第一次用 \r
{\r
- handle_l[i].handle = handle;\r
- \r
+ handle_l[i].handle = handle; \r
+\r
}\r
if(handle_l[i].handle == handle)//以前用过 2AE4 2AE5 2AE1 2AE3 2AE0 \r
{\r
{\r
read_data_tmp->data[read_data_tmp->totalDataLen]=0;\r
}\r
- bleLongRecvData(read_data_tmp->data,read_data_tmp->totalDataLen,read_data_tmp->cmd_data,NULL,read_data_tmp->crcvalue);\r
+ bleLongRecvData(read_data_tmp->data,read_data_tmp->totalDataLen,read_data_tmp->cmd_data,NULL,read_data_tmp->crcvalue);\r
if(read_data_tmp->data)//只有数据不为NULL的才释放\r
{\r
ym_free(read_data_tmp->data);\r
memset(read_data_tmp->cmd_data,0,17);\r
printf("pack data end!!!!!!\r\n");\r
}\r
- \r
+\r
\r
}\r
void free_ble_data(void)//以防断开蓝牙没有释放数据类型\r
sendbigDataBufState = false;\r
\r
}\r
+\r
+#endif\r
+\r
//接收app下发的原始数据 \r
void revBleOldData(uint8_t *buf, uint16_t event_size,uint16_t handle)//每包的数据大小\r
{\r
- printf("handle :%d data2ae3Cmd:%d data2ae4Cmd:%d event_size %d\r\n",handle,data2ae3Cmd,data2ae4Cmd,event_size);\r
+ printf("handle :%d %s event_size %d\r\n",handle,getHandlname(handle),event_size);\r
bleDataRecv(buf,event_size,handle);\r
}\r
#endif\r