}\r
/* -------------------------------- 协议发起运动处理\r
* -------------------------------- */\r
+\r
bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) {\r
if (cmd == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid sport command");\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "无效的运动命令");\r
return false;\r
}\r
\r
+ // 获取当前的运动状态\r
+ ExerciseState currentState = TraingModel::GetInstance()->GetSportState();\r
+ ExerciseState cmdstate = static_cast<ExerciseState>(cmd->controlmd);\r
+\r
switch (cmd->controlmd) {\r
case SETGOAL:\r
- if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General) {\r
- // 设置目标:在非运动情况下设置 [单指令,执行后退出]\r
+ // 仅在一般状态下允许设置目标\r
+ if (currentState == ExerciseState::General) {\r
TraingModel::GetInstance()->SetSportTag(\r
static_cast<ExerciseTag>(cmd->sportTagType), cmd->sportTag);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetSportTag is succeed!\r\n");\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "目标设置成功!\r\n");\r
return true;\r
}\r
break;\r
\r
case SENDDATA:\r
- TraingModel::GetInstance()\r
- ->SendLiveData(); // 发送实时数据 [单指令,执行后退出]\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SendLiveData is succeed!\r\n");\r
+ // 随时允许发送实时数据\r
+ TraingModel::GetInstance()->SendLiveData();\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "实时数据发送成功!\r\n");\r
return true;\r
+\r
default:\r
break;\r
}\r
\r
- if (TraingCardView::GetInstance() == nullptr) {\r
- uapi_set_screen_on_api(); // 亮屏\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD);\r
- // 设置目标类型和项目有且只有一次\r
- switch (cmd->sportType) {\r
- case 0:\r
- TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORWALKING);\r
- OpenSensor(ExerciseClass::OUTDOOR);\r
- break;\r
- case 1:\r
- TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORRUNNING);\r
- OpenSensor(ExerciseClass::OUTDOOR);\r
- break;\r
- case 2:\r
- TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING);\r
- OpenSensor(ExerciseClass::FREE_TRAINING);\r
- break;\r
- default:\r
- break;\r
+ // 仅在一般状态下允许开始运动\r
+ if (cmdstate == ExerciseState::Start &&\r
+ currentState == ExerciseState::General) {\r
+ if (TraingCardView::GetInstance() == nullptr) {\r
+ uapi_set_screen_on_api(); // 亮屏\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD);\r
+ // 设置目标类型和项目有且只有一次\r
+ switch (cmd->sportType) {\r
+ case 0:\r
+ TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORWALKING);\r
+ OpenSensor(ExerciseClass::OUTDOOR);\r
+ break;\r
+ case 1:\r
+ TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORRUNNING);\r
+ OpenSensor(ExerciseClass::OUTDOOR);\r
+ break;\r
+ case 2:\r
+ TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING);\r
+ OpenSensor(ExerciseClass::FREE_TRAINING);\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
}\r
- }\r
\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,\r
- "cmd->sportType[%d],cmd->controlmd[%d],cmd->sportTagType[%d],"\r
- "cmd->sportTag[%d]\r\n",\r
- cmd->sportType, cmd->controlmd, cmd->sportTagType,\r
- cmd->sportTag);\r
+ handleStartState();\r
+ return true;\r
+ }\r
\r
- ExerciseState cmdState = static_cast<ExerciseState>(cmd->controlmd);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ExerciseState::End [%d]\r\n",\r
- cmdState);\r
+ // 仅在运动状态为开始或继续时允许暂停\r
+ if (cmdstate == ExerciseState::Pause) {\r
+ if (currentState == ExerciseState::Start ||\r
+ currentState == ExerciseState::Continue) {\r
+ reply_APP_SportPasueResetCmd(TraingModel::GetInstance()->GetSportTime());\r
+ handlePauseState();\r
+ return true;\r
+ }\r
+ }\r
\r
- uint32_t sport_time = TraingModel::GetInstance()->GetSportTime();\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sport_time[%d]\r\n", sport_time);\r
+ // 仅在暂停状态下允许恢复运动\r
+ if (cmdstate == ExerciseState::Continue &&\r
+ currentState == ExerciseState::Pause) {\r
+ reply_APP_SportPasueResetCmd(TraingModel::GetInstance()->GetSportTime());\r
+ handleContinueState();\r
+ return true;\r
+ }\r
\r
- switch (cmdState) {\r
- case ExerciseState::End:\r
+ // 仅在运动状态为开始、继续或暂停时允许结束运动\r
+ if (cmdstate == ExerciseState::End &&\r
+ (currentState == ExerciseState::Start ||\r
+ currentState == ExerciseState::Continue ||\r
+ currentState == ExerciseState::Pause)) {\r
+ uint32_t sport_time = TraingModel::GetInstance()->GetSportTime();\r
reply_APP_SportStopModeCmd(sport_time);\r
handleEndState();\r
- break;\r
- case ExerciseState::Pause:\r
- reply_APP_SportPasueResetCmd(sport_time);\r
- handlePauseState();\r
- break;\r
- case ExerciseState::Continue:\r
- reply_APP_SportPasueResetCmd(sport_time);\r
- handleContinueState();\r
- break;\r
- case ExerciseState::Start:\r
- handleStartState();\r
- break;\r
- default:\r
- break;\r
+ return true;\r
}\r
\r
- return true;\r
+ // 如果到达这里,命令未执行\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
+ "cmd->sportType[%d],cmd->controlmd[%d],cmd->sportTagType[%d],"\r
+ "cmd->sportTag[%d]\r\n",\r
+ cmd->sportType, cmd->controlmd, cmd->sportTagType,\r
+ cmd->sportTag);\r
+\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "由于状态限制,命令未执行。\r\n");\r
+ return false; // 没有执行任何命令\r
}\r
\r
/*训练结束*/\r