/*设置运动状态*/
void TraingModel::SetSportState(ExerciseState state)
{
+ if (state != ExerciseState::General)
+ {
+ sendtraningstatedata(static_cast<uint8_t>(state), sportdata->duration);
+ }
sportState_ = state;
}
/*获取运动状态*/
sportdata->Reset(); // 重置结构体
/*将Model的成员变量赋值到结构体里面*/
+ printf("SetTimestamp::time:%u \r\n", time);
sportdata->starttime = time;
sportdata->sportType = sportType_; // 训练类型
Gettagstuats = false; // 重置训练达标标志位
}
// PRINT("end_time [%s]\r\n", end_time);
sportdata->end_time = std::string(end_time);
+ sportState_ = ExerciseState::General;
Openstate = false; // 关闭运动标志位
free(end_time); // 释放内存
Endstate = true;
}
}
- // 获取训练时长时间戳
+ // 获取训练时长时间
std::string TraingModel::GetTrainingTime()
{
int hour = sportdata->duration / NUM_TIME_HOUR;
void TraingModel::SendLiveData()
{
msg_get_train_data_info_t data;
- data.st = sportdata->starttime / 1000;
+ memset(&data, 0, sizeof(msg_get_train_data_info_t));
+ PRINT("sportdata->starttime %d \r\n", sportdata->starttime);
+ data.st = (uint32)(sportdata->starttime / 1000);
data.hr = sportdata->heart;
data.ca = sportdata->calories;
data.stp = sportdata->steps;
-\r
+/***\r
+ * @Date: 2024-04-26 09:23:18\r
+ * @LastEditors: Caisking 3449750381@qq.com\r
+ * @LastEditTime: 2024-04-26 10:25:05\r
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp\r
+ */\r
\r
#include "AppViewIDs.h"\r
#include "components/ui_label_ext.h"\r
// 点击暂停按键\r
if (strcmp(view.GetViewId(), BUTTONSTOP) == 0)\r
{\r
- // 开始状态\r
- if (TraingModel::GetInstance()->GetSportState() == ExerciseState::Start || TraingModel::GetInstance()->GetSportState() == ExerciseState::Continue)\r
+ // 进行状态\r
+ if (TraingModel::GetInstance()->GetSportState() == ExerciseState::Continue || TraingModel::GetInstance()->GetSportState() == ExerciseState::Start)\r
{\r
- TrainingControlView::GetInstance()->GetLabel()->SetText("继续");\r
- TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_CONTINUE_IMAGE, SPORT_CONTINUE_IMAGE);\r
- // 设置为暂停状态\r
- TraingModel::GetInstance()->SetSportState(ExerciseState::Pause);\r
- // 暂停计时器\r
- PauseTimer();\r
- // 暂停运动库\r
- ControlSensor(ExerciseState::Pause);\r
- return true;\r
+ handlePauseState();\r
}\r
// 暂停状态\r
- if (TraingModel::GetInstance()->GetSportState() == ExerciseState::Pause)\r
+ else if (TraingModel::GetInstance()->GetSportState() == ExerciseState::Pause)\r
{\r
- TrainingControlView::GetInstance()->GetLabel()->SetText("暂停");\r
- TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_PAUSE_IMAGE, SPORT_PAUSE_IMAGE);\r
- // 设置为继续状态\r
- TraingModel::GetInstance()->SetSportState(ExerciseState::Continue);\r
- // 恢复计时器\r
- ResumeTimer();\r
- // 恢复运动库\r
- ControlSensor(ExerciseState::Continue);\r
- return true;\r
+ handleContinueState();\r
}\r
+ return true;\r
}\r
// 点击结束按键,弹窗显示\r
if (strcmp(view.GetViewId(), BUTTONEND) == 0)\r
// 退出按键\r
if (strcmp(view.GetViewId(), BUTTONEXIT) == 0)\r
{\r
- TraingModel::GetInstance()->SetSportState(ExerciseState::End);\r
- ControlSensor(ExerciseState::End);\r
-#if DATATEST\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA);\r
-#endif\r
- if (TraingModel::GetInstance()->GetMomentum())\r
- {\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA);\r
- }\r
- else\r
- {\r
- // 训练量不足进入训练记录界面\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_TRAINING_RECORD);\r
- }\r
+ handleEndState();\r
}\r
// 返回按键\r
if (strcmp(view.GetViewId(), BUTTONBACK) == 0)\r
return true;\r
}\r
\r
- /*蓝牙控制接口*/\r
bool TraingCardPresenter::send_sport_cmd(training_ble *cmd)\r
{\r
-\r
- if (cmd == nullptr || cmd->sportType < 0)\r
+ if (cmd == nullptr)\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid sport command");\r
return false;\r
}\r
\r
- //命令为设置目标\r
- if (cmd->controlmd == 4)\r
+ switch (cmd->controlmd)\r
{\r
- TraingModel::GetInstance()->SetSportTag(static_cast<ExerciseTag>(cmd->sportTagType), cmd->sportTag);\r
- return true; //设置目标为单指令\r
+ case SETGOAL:\r
+ if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General)\r
+ {\r
+ // 设置目标:在非运动情况下设置 [单指令,执行后退出]\r
+ TraingModel::GetInstance()->SetSportTag(static_cast<ExerciseTag>(cmd->sportTagType), cmd->sportTag);\r
+ return true;\r
+ }\r
+ break;\r
+ case SENDDATA:\r
+ TraingModel::GetInstance()->SendLiveData(); // 发送实时数据 [单指令,执行后退出]\r
+ return true;\r
+ default:\r
+ break;\r
}\r
\r
- uapi_set_screen_on_api(); // 亮屏检测\r
if (TraingCardView::GetInstance() == nullptr)\r
{\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD); // 切换Slice\r
- //对训练项目的选择只进行一次判断\r
+ uapi_set_screen_on_api(); // 亮屏\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD);\r
+ // 设置目标类型和项目有且只有一次\r
switch (cmd->sportType)\r
{\r
- // 室外走路\r
case 0:\r
+ TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORWALKING);\r
OpenSensor(ExerciseClass::FREE_TRAINING);\r
- break;\r
- // 室外跑步\r
case 1:\r
- OpenSensor(ExerciseClass::OUTDOOR);\r
+ TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING);\r
+ OpenSensor(ExerciseClass::FREE_TRAINING);\r
break;\r
- // 室外骑行\r
case 2:\r
- OpenSensor(ExerciseClass::FREE_TRAINING);\r
+ TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORRUNNING);\r
+ OpenSensor(ExerciseClass::OUTDOOR);\r
break;\r
default:\r
break;\r
}\r
}\r
\r
- // 增加打印\r
PRINT("cmd->sportType[%d],cmd->controlmd[%d],cmd->sportTagType[%d],cmd->sportTag[%d]\r\n", cmd->sportType, cmd->controlmd, cmd->sportTagType, cmd->sportTag);\r
\r
ExerciseState cmdState = static_cast<ExerciseState>(cmd->controlmd);\r
switch (cmdState)\r
{\r
case ExerciseState::End:\r
- {\r
- PRINT("ExerciseState::End [%d]\r\n", cmdState);\r
- TraingModel::GetInstance()->SetSportState(ExerciseState::End);\r
- ControlSensor(ExerciseState::End);\r
- if (TraingCardView::GetInstance()->RefreshEndView())\r
- {\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA);\r
- }\r
- else\r
- {\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_TRAINING_RECORD);\r
- }\r
+ handleEndState();\r
break;\r
- }\r
case ExerciseState::Pause:\r
- {\r
- PRINT("ExerciseState %d\r\n", cmdState);\r
- TraingModel::GetInstance()->SetSportState(cmdState);\r
- TrainingControlView::GetInstance()->GetLabel()->SetText("继续");\r
- TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_CONTINUE_IMAGE, SPORT_CONTINUE_IMAGE);\r
- TraingModel::GetInstance()->SetSportState(ExerciseState::Pause);\r
- PauseTimer();\r
- ControlSensor(ExerciseState::Pause);\r
+ handlePauseState();\r
break;\r
- }\r
case ExerciseState::Continue:\r
- {\r
- TrainingControlView::GetInstance()->GetLabel()->SetText("暂停");\r
- TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_PAUSE_IMAGE, SPORT_PAUSE_IMAGE);\r
- TraingModel::GetInstance()->SetSportState(ExerciseState::Continue);\r
- ResumeTimer();\r
- ControlSensor(ExerciseState::Continue);\r
+ handleContinueState();\r
break;\r
- }\r
case ExerciseState::Start:\r
- {\r
- PRINT("ExerciseState::Start [%d]\r\n", cmdState);\r
- ControlSensor(cmdState);\r
- TraingModel::GetInstance()->SetSportOpenWay(true);\r
+ handleStartState();\r
break;\r
- }\r
default:\r
break;\r
}\r
return true;\r
}\r
\r
+ /*训练结束*/\r
+ void TraingCardPresenter::handleEndState()\r
+ {\r
+ TraingModel::GetInstance()->SetSportState(ExerciseState::End);\r
+ ControlSensor(ExerciseState::End);\r
+#if DATATEST\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA);\r
+ return;\r
+#endif\r
+ if (TraingModel::GetInstance()->GetMomentum())\r
+ {\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA);\r
+ }\r
+ else\r
+ {\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_TRAINING_RECORD);\r
+ }\r
+ }\r
+\r
+ /*训练暂停*/\r
+ void TraingCardPresenter::handlePauseState()\r
+ {\r
+ TrainingControlView::GetInstance()->GetLabel()->SetText("继续");\r
+ TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_CONTINUE_IMAGE, SPORT_CONTINUE_IMAGE);\r
+ TraingModel::GetInstance()->SetSportState(ExerciseState::Pause);\r
+ PauseTimer();\r
+ ControlSensor(ExerciseState::Pause);\r
+ }\r
+\r
+ /*训练继续*/\r
+ void TraingCardPresenter::handleContinueState()\r
+ {\r
+ TrainingControlView::GetInstance()->GetLabel()->SetText("暂停");\r
+ TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_PAUSE_IMAGE, SPORT_PAUSE_IMAGE);\r
+ TraingModel::GetInstance()->SetSportState(ExerciseState::Continue);\r
+ ResumeTimer();\r
+ ControlSensor(ExerciseState::Continue);\r
+ }\r
+\r
+ /*训练开始*/\r
+ void TraingCardPresenter::handleStartState()\r
+ {\r
+ ControlSensor(ExerciseState::Start);\r
+ TraingModel::GetInstance()->SetSportOpenWay(true);\r
+ }\r
+\r
}\r
if(data==NULL)\r
{\r
data="\0";\r
- buf[17+datalen] = Calculate_CRC_Big((uint8_t *)data,datalen);\r
+ // buf[17+datalen] = Calculate_CRC_Big((uint8_t *)data,datalen);\r
if(flag)\r
- sendDataNow(buf,17+datalen+1);\r
+ sendDataNow(buf,17+1);\r
else\r
- sendBleData(buf,17+datalen+1);\r
+ sendBleData(buf,17+1);\r
\r
}else\r
{\r
uint32_t data_len=3;\r
data[0]=state;\r
memcpy(&data[1],&time,2);\r
- printf("发送训练状态数据%d %s\r\n",data_len,data);\r
+ printf("发送训练状态数据%d %d\r\n",data[0],time);\r
send_big_data(0,data,data_len,data_len,1,1,0x50,5);\r
\r
}\r
// "ty":0,\r
// "di":5000,\r
// }\r
+ memset(&training_ble_data,0,sizeof(training_ble));\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
- //CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\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
- CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\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
- CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\r
- \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
- CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\r
- \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
- CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\r
+ \r
}\r
+ CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\r
cJSON_Delete(root);\r
return 1;\r
}\r
// }\r
void sendRealTimeDataToAPP(uint8_t flag)\r
{\r
- if(flag != 0)//校验失败\r
+ if(flag == 0)//校验失败\r
{\r
send_big_data(0,NULL,1,data_len,1,1,0x0f,1);\r
\r