From bdb5ac893fdba6a70d78f3811bcd2de29c58d92e Mon Sep 17 00:00:00 2001 From: Caisking <3449750381@qq.com> Date: Mon, 30 Sep 2024 18:19:27 +0800 Subject: [PATCH] =?utf8?q?=E5=A2=9E=E5=8A=A0app=E5=AF=B9=E8=BF=90=E5=8A=A8?= =?utf8?q?=E7=8A=B6=E6=80=81=E6=8E=A7=E5=88=B6=E7=9A=84=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../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