CONFIGMODEL_ITEM_SPORTS_GOAL_DURATION, //运动目标时长
CONFIGMODEL_ITEM_SPORTS_GOAL_DISTANCE, //运动目标距离
CONFIGMODEL_ITEM_DNOTDISTURB,//勿扰模式
- CONFIGMODEL_ITEM_TRANING_FREQ,//训练实时数据上传频率
CONFIGMODEL_ITEM_SYSTEM_VOLUME,//系统音量
CONFIGMODEL_ITEM_CALL_VOLUME,//通话音量
CONFIGMODEL_ITEM_VOLTE_CALL,//VoLTE通话
CONFIGMODEL_ITEM_MOTIONRECOGNITION,//运动识别
CONFIGMODEL_ITEM_HFP, //通话蓝牙开关
CONFIGMODEL_ITEM_A2DP,//媒体蓝牙开关
+
+ CONFIGMODEL_ITEM_TRANING_FREQ,//训练实时数据上传频率
+ CONFIGMODEL_ITEM_TRANING_AUTO,//开启关闭自动获取实时数据
+
CONFIFMOFEL_ITEM_HEARTRATE_DETECTED,//心率周期频率 0(关闭) 1 5 10
CONFIFMOFEL_ITEM_HEARTRATE_MAX,//最大心率
CONFIFMOFEL_ITEM_HEARTRATE_MIN,//最小心率
{ConfigDataType::DATATYPE_INT, "GoalDuration", "30" },// CONFIGMODEL_ITEM_SPORTS_GOAL_DURATION, //运动目标时长 30(分钟)
{ConfigDataType::DATATYPE_DOUBLE, "GoalDistance", "8.0" },// CONFIGMODEL_ITEM_SPORTS_GOAL_DISTANCE, //运动目标距离 8.0(km)
{ConfigDataType::DATATYPE_BOOL, "Dnotdisturb", "false" },// CONFIGMODEL_ITEM_DNOTDISTURB //勿扰模式默认关闭
- {ConfigDataType::DATATYPE_INT, "traningfreq", "10" },// CONFIGMODEL_ITEM_TRANING_FREQ //训练实时数据上传频率//单位秒
{ConfigDataType::DATATYPE_INT, "SystemVolume", "100" },// CONFIGMODEL_ITEM_SYSTEM_VOLUME //
{ConfigDataType::DATATYPE_INT, "CallVolume", "100" },// CONFIGMODEL_ITEM_CALL_VOLUME //
{ConfigDataType::DATATYPE_BOOL, "VoLTECall", "false" },// CONFIGMODEL_ITEM_VOLTE_CALL
{ConfigDataType::DATATYPE_BOOL, "MotionRecognition", "false" },// CONFIGMODEL_ITEM_MOTIONRECOGNITION
{ConfigDataType::DATATYPE_BOOL, "HFP", "false" },// CONFIGMODEL_ITEM_HFP
{ConfigDataType::DATATYPE_BOOL, "A2DP", "false" },// CONFIGMODEL_ITEM_A2DP
+
+ {ConfigDataType::DATATYPE_INT, "traningfreq", "10" },// CONFIGMODEL_ITEM_TRANING_FREQ //训练实时数据上传频率//单位秒
+ {ConfigDataType::DATATYPE_BOOL, "traningauto", "false" },//CONFIGMODEL_ITEM_TRANING_AUTO,//开启关闭自动获取实时数据
+ {ConfigDataType::DATATYPE_INT, "traningheart", "190" },//CONFIGMODEL_ITEM_TRAINING_HEART_MAX//训练最高心率
{ConfigDataType::DATATYPE_INT, "HeartRateDetected", "0" },// CONFIFMOFEL_ITEM_HEARTRATE_DETECTED//心率周期检测频率
{ConfigDataType::DATATYPE_INT, "HeartRateMax", "0" },// CONFIFMOFEL_ITEM_HEARTRATE_MAX//最大心率
{ConfigDataType::DATATYPE_INT, "HeartRateMin", "0" },// CONFIFMOFEL_ITEM_HEARTRATE_MIN//最小心率
- {ConfigDataType::DATATYPE_INT, "traningheart", "250" },//CONFIGMODEL_ITEM_TRAINING_HEART_MAX//训练最高心率
};
ConfigModel(); // 私有构造函数,确保无法在外部实例化
ConfigModel(const ConfigModel &) = delete; // 禁止拷贝构造
}\r
}\r
\r
-void send_big_data(uint8_t flag,char *data,int datalen,int total,uint32_t Packet_id,uint32_t packet_total,uint8_t type_id,uint8_t type)\r
+void send_big_data(uint8_t flag, char *data, int datalen, int total, uint32_t Packet_id, uint32_t packet_total, uint8_t type_id, uint8_t type)\r
{\r
- uint8_t buf[512]={0};\r
- buf[0]=0x72;\r
- buf[1]=type;\r
- buf[2]=type_id;\r
- memcpy(buf+3,&packet_total,4);\r
- memcpy(buf+7,&total,4);\r
- memcpy(buf+11,&Packet_id,4);\r
- memcpy(buf+15,&datalen,2);\r
- if(data==NULL)\r
- {\r
- data="\0";\r
- // buf[17+datalen] = Calculate_CRC_Big((uint8_t *)data,datalen);\r
- if(flag)\r
- sendDataNow(buf,17+1);\r
- else\r
- sendBleData(buf,17+1);\r
+ uint8_t *buf = malloc(17 + datalen + 1); // 动态分配内存空间,防止堆栈溢出\r
+ if (buf == NULL) {\r
+ printf("内存分配失败\n");\r
+ return;\r
+ }\r
\r
- }else\r
- {\r
- memcpy(buf+17,data,datalen);\r
- buf[17+datalen] = Calculate_CRC_Big((uint8_t *)data,datalen);\r
- printf("xxxxxxxxxxxxx\r\n");\r
- if(flag)\r
- sendDataNow(buf,17+datalen+1);\r
- else\r
- sendBleData(buf,17+datalen+1);\r
+ buf[0] = 0x72;\r
+ buf[1] = type;\r
+ buf[2] = type_id;\r
+ memcpy(buf + 3, &packet_total, 4);\r
+ memcpy(buf + 7, &total, 4);\r
+ memcpy(buf + 11, &Packet_id, 4);\r
+ memcpy(buf + 15, &datalen, 2);\r
+\r
+ if (data == NULL) {\r
+ data = "\0";\r
+ buf[17 + datalen] = Calculate_CRC_Big((uint8_t *)data, datalen);\r
+ } else {\r
+ memcpy(buf + 17, data, datalen);\r
+ buf[17 + datalen] = Calculate_CRC_Big((uint8_t *)data, datalen);\r
+ }\r
\r
+ if (flag) {\r
+ sendDataNow(buf, 17 + datalen + 1);\r
+ } else {\r
+ sendBleData(buf, 17 + datalen + 1);\r
}\r
- // }\r
+\r
+ free(buf); // 释放内存空间\r
}\r
//发送训练状态\r
void sendtraningstatedata(uint8_t state ,uint16_t time)\r
char *jsonString = cJSON_PrintUnformatted(dataJSON);\r
\r
uint32_t data_len=strlen(jsonString);\r
+ cJSON_Delete(dataJSON);\r
printf("发送训练实时数据%d %s\r\n",data_len,jsonString);\r
send_big_data(0,jsonString,data_len,data_len,1,1,0x0f,1);\r
cJSON_free(jsonString);\r
- cJSON_Delete(dataJSON);\r
+ \r
}\r
//发送ble数据\r
uint8_t phone_mac[6];//手机下发的mac地址 第一次连接为空 \r
\r
}\r
static training_ble training_ble_data;\r
-static uint8_t jsonCheck_targetparam(uint8_t *buf)//训练目标参数\r
+//设置训练目标\r
+static uint8_t jsonCheck_targetparam(uint8_t *buf)\r
{\r
- \r
uint8_t *json;\r
json = buf;\r
cJSON* root = cJSON_Parse((const char *)json);\r
printf("时间 JSON解析错误\n");\r
return 2;\r
}\r
- // {\r
- // "ty":0,\r
- // "di":5000,\r
- // }\r
- memset(&training_ble_data,0,sizeof(training_ble));\r
+\r
+ memset(&training_ble_data, 0, sizeof(training_ble));\r
+\r
cJSON* ty = cJSON_GetObjectItem(root, "ty");//目标类型\r
if (cJSON_IsNumber(ty)) {\r
printf("ty: %d\n", ty->valueint);\r
- training_ble_data.sportTagType=ty->valueint;\r
- training_ble_data.controlmd=SETGOAL;\r
- }\r
- \r
- cJSON* di = cJSON_GetObjectItem(root, "di");//目标距离\r
- if (cJSON_IsNumber(di)) {\r
- printf("di: %d\n", di->valueint);\r
- training_ble_data.sportTag=di->valueint;\r
- }\r
- cJSON* ca = cJSON_GetObjectItem(root, "ca");//目标卡路里\r
- if (cJSON_IsNumber(ca)) {\r
- printf("ca: %d\n", ca->valueint);\r
- training_ble_data.sportTag=ca->valueint;\r
- }\r
- cJSON* tm = cJSON_GetObjectItem(root, "tm");//目标时间\r
- if (cJSON_IsNumber(tm)) {\r
- printf("tm: %d\n", tm->valueint);\r
- training_ble_data.sportTag=tm->valueint;\r
- }\r
- cJSON* st = cJSON_GetObjectItem(root, "st");//目标步数\r
- if (cJSON_IsNumber(st)) {\r
- printf("st: %d\n", st->valueint);\r
- training_ble_data.sportTag=st->valueint;\r
- \r
+ training_ble_data.sportTagType = ty->valueint;\r
+ training_ble_data.controlmd = SETGOAL;\r
+\r
+ cJSON* targetItem = NULL;\r
+ switch (training_ble_data.sportTagType)\r
+ {\r
+ case 0: // 距离\r
+ targetItem = cJSON_GetObjectItem(root, "di");//目标距离\r
+ break;\r
+ case 1: // 卡路里\r
+ targetItem = cJSON_GetObjectItem(root, "ca");//目标卡路里\r
+ break;\r
+ case 2: // 时间\r
+ targetItem = cJSON_GetObjectItem(root, "tm");//目标时间\r
+ break;\r
+ case 3: // 步数\r
+ targetItem = cJSON_GetObjectItem(root, "st");//目标步数\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+\r
+ if (targetItem && cJSON_IsNumber(targetItem)) {\r
+ printf("%s: %d\n", targetItem->string, targetItem->valueint);\r
+ training_ble_data.sportTag = targetItem->valueint;\r
+ cJSON_Delete(root);\r
+ CustomEventPublish(TOPIC_EVENT_BLE_TRAINING, (uint8_t*)&training_ble_data, sizeof(training_ble));\r
+ return JSON_CHECK_OK;\r
+ }\r
}\r
- CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\r
+\r
cJSON_Delete(root);\r
- return 1;\r
+ return JSON_CHECK_ERR;\r
}\r
\r
\r
-\r
void GetTarinTarget(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取时间\r
{\r
uint32_t tmp = 1;\r
if(Check_CRC(crcnum,len,crcvalue))\r
{\r
uint8_t autoSportData = crcnum[0];//开关 1开启 0关闭\r
-\r
value[17] = 1; //1 操作成功 2 操作失败\r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
+ /*进行开启关闭操作*/\r
+ training_ble_data.controlmd = SETAUTO;\r
+ training_ble_data.controlauto = autoSportData;\r
+ printf("开启自动获取 %d\r\n", training_ble_data.controlauto);\r
+ CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\r
}else\r
{\r
value[17] = 0;\r
value[17] = 1; //1 操作成功 2 操作失败\r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
+ /*设置获取频率*/\r
}else\r
{\r
value[17] = 0;\r