From: dxy <1731678236@qq.com> Date: Sat, 13 Apr 2024 10:16:48 +0000 (+0800) Subject: 蓝牙协议指令优化 X-Git-Tag: release_V1.2.70_20241020_135402~1197 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=251c0ec970b30eac311772c03198f69a479e61e0;p=mirrors%2FFD230.git 蓝牙协议指令优化 --- 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 eabe61027..e65573ac9 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c @@ -1064,7 +1064,7 @@ void senfindphoneSend(uint8_t flag) sendBleData(sendBuf,19); } -static void jsonCheck_time(uint8_t *buf)//json 格式解析 +static uint8_t jsonCheck_time(uint8_t *buf)//json 格式解析 { char time_data[24]; memset(time_data,0,24); @@ -1074,7 +1074,7 @@ static void jsonCheck_time(uint8_t *buf)//json 格式解析 cJSON* root = cJSON_Parse((const char *)json); if (root == NULL) { printf("时间 JSON解析错误\n"); - return; + return 1; } char *locations; int year = 1970; @@ -1132,6 +1132,7 @@ static void jsonCheck_time(uint8_t *buf)//json 格式解析 sprintf((char *)time_data,"%d-%d-%d %d:%d:%d",year+2000,month,day,hour,minute,second); set_system_time(time_data); cJSON_Delete(root); + return 2; } @@ -1153,12 +1154,91 @@ void GetUTCtime(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uin if(Check_CRC(crcnum,len,crcvalue)) { - sendBuf[17] = 1; + + uint8_t *data; + data = crcnum; + uint8_t set_ok = 1; + set_ok = jsonCheck_time(data); + sendBuf[17] = set_ok; + sendBuf[18] = Calculate_CRC(sendBuf,18); + sendBleData(sendBuf,19); + } + else + { + sendBuf[17] = 0; sendBuf[18] = Calculate_CRC(sendBuf,18); sendBleData(sendBuf,19); + } + +} + +static uint8_t jsonCheck_targetparam(uint8_t *buf)//训练目标参数 +{ + + uint8_t *json; + json = buf; + cJSON* root = cJSON_Parse((const char *)json); + if (root == NULL) { + printf("时间 JSON解析错误\n"); + return 1; + } + // { + // "ty":0, + // "di":5000, + // } + cJSON* ty = cJSON_GetObjectItem(root, "ty");//目标类型 + if (cJSON_IsNumber(ty)) { + printf("ty: %d\n", ty->valueint); + + } + cJSON* di = cJSON_GetObjectItem(root, "di");//目标距离 + if (cJSON_IsNumber(di)) { + printf("di: %d\n", di->valueint); + + } + cJSON* ca = cJSON_GetObjectItem(root, "ca");//目标卡路里 + if (cJSON_IsNumber(di)) { + printf("ca: %d\n", ca->valueint); + + } + cJSON* tm = cJSON_GetObjectItem(root, "tm");//目标时间 + if (cJSON_IsNumber(tm)) { + printf("tm: %d\n", tm->valueint); + + } + cJSON* st = cJSON_GetObjectItem(root, "st");//目标步数 + if (cJSON_IsNumber(st)) { + printf("st: %d\n", st->valueint); + } + cJSON_Delete(root); + return 2; +} + + + +void GetTarinTarget(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取时间 +{ + uint32_t tmp = 1; + uint16_t tmp_data = 1; + uint8_t sendBuf[19]; + memset(sendBuf,0,19); + sendBuf[0] = 0x72; + sendBuf[1] = 0x02; + sendBuf[2] = 0x04; + memcpy(sendBuf+3,&tmp,4); + memcpy(sendBuf+7,&tmp,4); + memcpy(sendBuf+11,&tmp,4); + memcpy(sendBuf+15,&tmp_data,2); + + if(Check_CRC(crcnum,len,crcvalue)) + { uint8_t *data; data = crcnum; - jsonCheck_time(data); + uint8_t set_ok = 1; + set_ok = jsonCheck_targetparam(data); + sendBuf[17] = set_ok; + sendBuf[18] = Calculate_CRC(sendBuf,18); + sendBleData(sendBuf,19); } else { @@ -1168,6 +1248,8 @@ void GetUTCtime(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uin } } + + static void jsonCheck_alarm(uint8_t *buf)//json 解析闹钟数据 { uint8_t *json; @@ -1459,7 +1541,7 @@ void GetDrinkSetParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *tota } -static void jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据 +static uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据 { uint8_t *json; json = buf; @@ -1473,7 +1555,7 @@ static void jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据 cJSON* root = cJSON_Parse((const char *)json); if (root == NULL) { printf("天气 JSON解析错误\n"); - return; + return 1; } cJSON *now_cjson = cJSON_GetObjectItem(root, "now"); @@ -1523,6 +1605,7 @@ static void jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据 // } cJSON_Delete(root); printf("weather data!!!!!!!!!!end\r\n"); + return 2; } @@ -1542,11 +1625,11 @@ void GetWeatherCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData, if(Check_CRC(crcnum,len,crcvalue)) { - sendBuf[17] = 1; + uint8_t check = 1; + check = jsonCheck_weather(crcnum); + sendBuf[17] = check; sendBuf[18] = Calculate_CRC(sendBuf,18); sendBleData(sendBuf,19); - - jsonCheck_weather(crcnum); } else { @@ -1718,8 +1801,8 @@ void type2AE4Data(uint8_t *buf_cmd,uint8_t *data,uint16_t datalen,uint8_t *total case SET_BLE_NAME_CMD: getPhoneInfo_test(); break; - case SET_TRAIN_TARGET_CMD: - + case SET_TRAIN_TARGET_CMD://训练目标 + GetTarinTarget(typeID,data,datalen,totalData,crcvalue); break; case SET_address_book_CMD: getAPPaddressbook(typeID,data,datalen,totalData,crcvalue); @@ -2771,7 +2854,7 @@ static void GetDrinkParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t * memcpy(value+7,&tmp,4); memcpy(value+11,&tmp,4); memcpy(value+15,&tmp_data,2); - if(Check_CRC(crcnum,len,crcvalue)) + if(1) { msg_drink_param_info_t drink_on_t; memset(&drink_on_t,0,sizeof(msg_drink_param_info_t)); @@ -2782,11 +2865,6 @@ static void GetDrinkParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t * value[17] = drink_on_t.drink_on;// value[18] = Calculate_CRC(value,18); sendBleData(value,19); - }else - { - value[17] = 0; - value[18] = Calculate_CRC(value,18); - sendBleData(value,19); } } @@ -2919,7 +2997,7 @@ static void GetSleepParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t * memcpy(value+7,&datalen,4); memcpy(value+11,&tmp,4); memcpy(value+15,&tmp_data,2); - if(Check_CRC(crcnum,len,crcvalue)) + if(1) { uint8_t sleepTime = 0;//作息时间设定 0关闭 1开启 uint8_t bedTimeHour = 0;//就寝时间 @@ -2957,7 +3035,7 @@ static void GetAllDialUidCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t * memcpy(value+7,&tmp,4); memcpy(value+11,&tmp,4); memcpy(value+15,&tmp_data,2); - if(Check_CRC(crcnum,len,crcvalue)) + if(1) { uint8_t sleepTime = 0;//作息时间设定 0关闭 1开启 uint8_t bedTimeHour = 0;//就寝时间 @@ -2995,7 +3073,7 @@ static void GetTargetStepCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t * memcpy(value+7,&datalen,4); memcpy(value+11,&tmp,4); memcpy(value+15,&tmp_data,2); - if(Check_CRC(crcnum,len,crcvalue)) + if(1) { uint32_t targetStep = 10000;//目标步数 4字节 uint8_t ringOn = 0;//铃声提醒 @@ -3030,7 +3108,7 @@ static void GetTargetOtherCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t memcpy(value+7,&datalen,4); memcpy(value+11,&tmp,4); memcpy(value+15,&tmp_data,2); - if(Check_CRC(crcnum,len,crcvalue)) + if(1) { uint16_t targetKcal = 4556;//目标卡路里 uint8_t targetKm = 0;//目标里程 @@ -3724,7 +3802,7 @@ void typeHexFiveData(uint8_t *buf_cmd,uint8_t *data,uint16_t datalen) uint8_t bleSendTypeID=0; //发送的数据类型 //发送读出来的设备数据to APP uint16_t max_mtu_szie_data_len = 200; - +uint32_t EACH_DATA_LEN=0;//每种数据类型的的长度 void sendReadData(void) { sendbigDataBufState = true;//分包同步数据不允许打断 @@ -3767,7 +3845,7 @@ void sendReadData(void) //498 // printf("startDataLen:%d totalEnd:%d ble_nus_max_data_len %d\r\n",startDataLen,totalEnd,ble_nus_max_data_len); - if( startDataLen+STEP_DATA_LEN > ble_nus_max_data_len-3){ + if( startDataLen+EACH_DATA_LEN > ble_nus_max_data_len-3){ // printf("startDataLen111111111111:%d totalEnd:%d crcvalue:%d\r\n",startDataLen,totalEnd,crcvalue); totalEnd = totalEnd+startDataLen;//240 300-240 @@ -3810,7 +3888,7 @@ void sendReadData(void) else{ if(packCount > 0) { - totalEnd = totalEnd+STEP_DATA_LEN;//第二包开始只加每个数据类型的总的字节数据大小 比如步数 数据类型 时间 步数 总共是8个就加8 + totalEnd = totalEnd+EACH_DATA_LEN;//第二包开始只加每个数据类型的总的字节数据大小 比如步数 数据类型 时间 步数 总共是8个就加8 // printf("pack1 startDataLen22222222222:%d totalEnd:%d crcvalue:%x\r\n",startDataLen,totalEnd,crcvalue); if((totalEnd-17) >= dataLen && totalEnd > 17) { @@ -3851,42 +3929,38 @@ void readDevDataBle(uint8_t *crcnum,uint16_t len,uint8_t crcvalue) if(Check_CRC(crcnum+17,len-18,crcvalue)) { bleSendTypeID=crcnum[2]; - + switch (crcnum[2]) + { + case 0x40://同步心率历史数据 + EACH_DATA_LEN = HEART_DATA_LEN; + break; + case 0x41://同步血氧历史数据 + EACH_DATA_LEN = SPO2_DATA_LEN; + break; + case 0x43: //同步步数历史数据 + EACH_DATA_LEN = STEP_DATA_LEN; + break; + case 0x44://同步燃脂时间数据 + EACH_DATA_LEN = FATTIME_DATA_LEN; + break; + case 0x45://同步站立历史数据 + EACH_DATA_LEN = STAND_DATA_LEN; + break; + case 0x46://同步卡路里历史数据 + EACH_DATA_LEN = KCAL_DATA_LEN; + break; + case 0x47://同步距离历史数据 + EACH_DATA_LEN = DIS_DATA_LEN; + break; + case 0x49://同步基础训练历史数据 + EACH_DATA_LEN = DIS_DATA_LEN; + break; + case 0x4b://睡眠历史数据 + break; + default: + break; + } sendReadData(); - // switch (crcnum[2]) - // { - // case 0x40://同步心率历史数据 - // heartDataCmd(crcnum,len); - // break; - // case 0x41://同步血氧历史数据 - // spo2DataCmd(crcnum,len); - // break; - // case 0x43: //同步步数历史数据 - // stepDataCmd(crcnum,len); - // break; - // case 0x44://同步燃脂时间数据 - // burntimeDataCmd(crcnum,len); - // break; - // case 0x45://同步站立历史数据 - // standDataCmd(crcnum,len); - // break; - // case 0x46://同步卡路里历史数据 - // kcalDataCmd(crcnum,len); - // break; - // case 0x47://同步距离历史数据 - // disDataCmd(crcnum,len); - // break; - // case 0x49://同步基础训练历史数据 - // trainiHistoryDataCmd(crcnum,len); - // break; - // case 0x4b://睡眠历史数据 - // sleepDataCmd(crcnum,len); - // break; - // default: - // break; - // } - - }else{ crcnum[0] = 0x72; crcnum[len-1] = 0;