From 52079f14cc9f5a2cd13b6e6445140970defe3577 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E8=A2=81=E6=B8=85=E6=A2=A6?= <3449750381@qq.com> Date: Mon, 30 Sep 2024 12:19:27 +0000 Subject: [PATCH] Merge #1073 into sdk602patch0626 from refs/changes/1073/head MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Code review from 袁清梦 * refs/changes/1073/head: (2 commits squashed) - 增加app对运动状态控制的限制 - Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0626 Signed-off-by: Caisking <3449750381@qq.com> Reviewed-by: snickersun@163.com Merged-by: snickersun@163.com CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/1073 --- .../training_card/src/TraingCardPresenter.cpp | 125 ++++++++++-------- 1 file changed, 71 insertions(+), 54 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp index 725313ab2..340571f18 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp @@ -363,88 +363,105 @@ void TraingCardPresenter::OnSwipe(UISwipeView &view) { } /* -------------------------------- 协议发起运动处理 * -------------------------------- */ + bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) { if (cmd == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid sport command"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "无效的运动命令"); return false; } + // 获取当前的运动状态 + ExerciseState currentState = TraingModel::GetInstance()->GetSportState(); + ExerciseState cmdstate = static_cast(cmd->controlmd); + switch (cmd->controlmd) { case SETGOAL: - if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General) { - // 设置目标:在非运动情况下设置 [单指令,执行后退出] + // 仅在一般状态下允许设置目标 + if (currentState == ExerciseState::General) { TraingModel::GetInstance()->SetSportTag( static_cast(cmd->sportTagType), cmd->sportTag); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetSportTag is succeed!\r\n"); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "目标设置成功!\r\n"); return true; } break; case SENDDATA: - TraingModel::GetInstance() - ->SendLiveData(); // 发送实时数据 [单指令,执行后退出] - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SendLiveData is succeed!\r\n"); + // 随时允许发送实时数据 + TraingModel::GetInstance()->SendLiveData(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "实时数据发送成功!\r\n"); return true; + default: break; } - if (TraingCardView::GetInstance() == nullptr) { - uapi_set_screen_on_api(); // 亮屏 - NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD); - // 设置目标类型和项目有且只有一次 - switch (cmd->sportType) { - case 0: - TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORWALKING); - OpenSensor(ExerciseClass::OUTDOOR); - break; - case 1: - TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORRUNNING); - OpenSensor(ExerciseClass::OUTDOOR); - break; - case 2: - TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING); - OpenSensor(ExerciseClass::FREE_TRAINING); - break; - default: - break; + // 仅在一般状态下允许开始运动 + if (cmdstate == ExerciseState::Start && + currentState == ExerciseState::General) { + if (TraingCardView::GetInstance() == nullptr) { + uapi_set_screen_on_api(); // 亮屏 + NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD); + // 设置目标类型和项目有且只有一次 + switch (cmd->sportType) { + case 0: + TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORWALKING); + OpenSensor(ExerciseClass::OUTDOOR); + break; + case 1: + TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORRUNNING); + OpenSensor(ExerciseClass::OUTDOOR); + break; + case 2: + TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING); + OpenSensor(ExerciseClass::FREE_TRAINING); + break; + default: + break; + } } - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, - "cmd->sportType[%d],cmd->controlmd[%d],cmd->sportTagType[%d]," - "cmd->sportTag[%d]\r\n", - cmd->sportType, cmd->controlmd, cmd->sportTagType, - cmd->sportTag); + handleStartState(); + return true; + } - ExerciseState cmdState = static_cast(cmd->controlmd); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ExerciseState::End [%d]\r\n", - cmdState); + // 仅在运动状态为开始或继续时允许暂停 + if (cmdstate == ExerciseState::Pause) { + if (currentState == ExerciseState::Start || + currentState == ExerciseState::Continue) { + reply_APP_SportPasueResetCmd(TraingModel::GetInstance()->GetSportTime()); + handlePauseState(); + return true; + } + } - uint32_t sport_time = TraingModel::GetInstance()->GetSportTime(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sport_time[%d]\r\n", sport_time); + // 仅在暂停状态下允许恢复运动 + if (cmdstate == ExerciseState::Continue && + currentState == ExerciseState::Pause) { + reply_APP_SportPasueResetCmd(TraingModel::GetInstance()->GetSportTime()); + handleContinueState(); + return true; + } - switch (cmdState) { - case ExerciseState::End: + // 仅在运动状态为开始、继续或暂停时允许结束运动 + if (cmdstate == ExerciseState::End && + (currentState == ExerciseState::Start || + currentState == ExerciseState::Continue || + currentState == ExerciseState::Pause)) { + uint32_t sport_time = TraingModel::GetInstance()->GetSportTime(); reply_APP_SportStopModeCmd(sport_time); handleEndState(); - break; - case ExerciseState::Pause: - reply_APP_SportPasueResetCmd(sport_time); - handlePauseState(); - break; - case ExerciseState::Continue: - reply_APP_SportPasueResetCmd(sport_time); - handleContinueState(); - break; - case ExerciseState::Start: - handleStartState(); - break; - default: - break; + return true; } - return true; + // 如果到达这里,命令未执行 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "cmd->sportType[%d],cmd->controlmd[%d],cmd->sportTagType[%d]," + "cmd->sportTag[%d]\r\n", + cmd->sportType, cmd->controlmd, cmd->sportTagType, + cmd->sportTag); + + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "由于状态限制,命令未执行。\r\n"); + return false; // 没有执行任何命令 } /*训练结束*/ -- 2.17.1