diff --git a/application/MissionManager/src/LedsHandle.cpp b/application/MissionManager/src/LedsHandle.cpp index 6744dc3..6fd059e 100644 --- a/application/MissionManager/src/LedsHandle.cpp +++ b/application/MissionManager/src/LedsHandle.cpp @@ -16,14 +16,29 @@ #include "ILog.h" #include "LedControl.h" #include "SetLedState.h" +LedsHandle::LedsHandle() : mDeviceStatusFlag(DeviceStatus::END) +{ +} void LedsHandle::ControlDeviceStatusLed(const DeviceStatus &status, const long int &keepAliveTime, const unsigned int &blinkPeriod) { - DeleteDeviceStatusLed(); + if (KEEP_ALIVE_FOREVER == keepAliveTime) { + /** + * @brief For a specific state instance, when controlling the same indicator light, if the permanently + * maintained state changes, the original state needs to be overwritten. + */ + DeleteDeviceStatusLed(); + } switch (status) { case DeviceStatus::NORMAL: mDeviceStatus = SetLedState::ControlLed("device_status", LedState::GREEN, keepAliveTime, blinkPeriod); break; + case DeviceStatus::FORMAT_KEY_HOLD_DOWN_TIPS: + // if (DeviceStatus::FORMAT_KEY_HOLD_DOWN_TIPS == mDeviceStatusFlag) { + // break; + // } + mDeviceStatus = SetLedState::ControlLed("device_status", LedState::RED, keepAliveTime, blinkPeriod); + break; case DeviceStatus::FORMATTING: mDeviceStatus = SetLedState::ControlLed("device_status", LedState::RED, keepAliveTime, blinkPeriod); break; @@ -44,6 +59,7 @@ void LedsHandle::ControlDeviceStatusLed(const DeviceStatus &status, const long i LogWarning("unknow device status.\n"); break; } + mDeviceStatusFlag = status; } void LedsHandle::DeleteDeviceStatusLed(void) { diff --git a/application/MissionManager/src/LedsHandle.h b/application/MissionManager/src/LedsHandle.h index 1782067..2818bc1 100644 --- a/application/MissionManager/src/LedsHandle.h +++ b/application/MissionManager/src/LedsHandle.h @@ -19,7 +19,8 @@ enum class DeviceStatus { NORMAL = 0, TAKING_PICTURE_OR_VIDEO, - FORMATTING, + FORMATTING, ///< Prompt the user that the formatting operation is being performed. + FORMAT_KEY_HOLD_DOWN_TIPS, ///< Prompt the user that the format button has been pressed. SD_CARD_REMOVE, SD_CARD_INSERT, SD_CARD_ABNORMAL, @@ -32,7 +33,7 @@ enum class DeviceStatus class LedsHandle { public: - LedsHandle() = default; + LedsHandle(); virtual ~LedsHandle() = default; protected: @@ -55,5 +56,6 @@ private: * calling the DeleteState function. */ std::shared_ptr mDeviceStatus; ///< Device status indicator. + DeviceStatus mDeviceStatusFlag; }; #endif \ No newline at end of file diff --git a/application/MissionManager/src/TestMissionState.cpp b/application/MissionManager/src/TestMissionState.cpp index 8c92803..3944399 100644 --- a/application/MissionManager/src/TestMissionState.cpp +++ b/application/MissionManager/src/TestMissionState.cpp @@ -52,7 +52,7 @@ void TestMissionState::GoInState() std::shared_ptr monitor = std::dynamic_pointer_cast(MissionState::shared_from_this()); IAppManager::GetInstance()->SetAppMonitor(monitor); - LedsHandle::ControlDeviceStatusLed(DeviceStatus::NORMAL); + LedsHandle::ControlDeviceStatusLed(DeviceStatus::NORMAL, KEEP_ALIVE_FOREVER, BLINKING_SLOW_MS); } void TestMissionState::GoOutState() { @@ -87,24 +87,30 @@ bool TestMissionState::ClickResetKey(const KeyEventData &data) bool TestMissionState::HoldDownResetKey(const KeyEventData &data) { constexpr int CLOSE_WATCH_DOG_PRESSING_TIME_MS = 1000 * 3; - if (mFormatKeyHoldTime > data.mHoldTime && data.mHoldTime >= CLOSE_WATCH_DOG_PRESSING_TIME_MS) { + if (mFormatKeyHoldTime > data.mHoldTime && data.mHoldTime >= CLOSE_WATCH_DOG_PRESSING_TIME_MS && + mResetKeyHoldTime == 0) { LogInfo("Close watch dog.\n"); constexpr int KEEP_BLINKING_FAST_MS = 1000 * 3; LedsHandle::ControlDeviceStatusLed(DeviceStatus::CLOSE_WATCHDOG, KEEP_BLINKING_FAST_MS, BLINKING_FAST_MS); CloseWatchDog(); } + if (CLOSE_WATCH_DOG_PRESSING_TIME_MS > data.mHoldTime) { + return NOT_EXECUTED; + } mFormattingSDCard = DO_NOT_FORMAT_SDCARD_ANYMORE; - // mResetKeyHoldTime = data.mHoldTime; + mResetKeyHoldTime = data.mHoldTime; return EXECUTED; } bool TestMissionState::HoldUpResetKey(const KeyEventData &data) { mFormattingSDCard = SD_CARD_IS_NOT_FORMATTING; + mResetKeyHoldTime = 0; return EXECUTED; } bool TestMissionState::HoldDownFormatKey(const KeyEventData &data) { constexpr int FORMAT_SD_CARD_PRESSING_TIME_MS = 1000 * 15; + constexpr int MEANS_REALLY_HOLD_DOWN = 1000; if (FORMAT_SD_CARD_PRESSING_TIME_MS <= data.mHoldTime && SD_CARD_IS_NOT_FORMATTING == mFormattingSDCard) { LogInfo("format key down.\n"); mFormattingSDCard = DO_NOT_FORMAT_SDCARD_ANYMORE; @@ -113,6 +119,13 @@ bool TestMissionState::HoldDownFormatKey(const KeyEventData &data) MissionStateMachine::GetInstance()->SendStateMessage(message); return EXECUTED; } + if (MEANS_REALLY_HOLD_DOWN > data.mHoldTime) { + return NOT_EXECUTED; + } + if (0 == mFormatKeyHoldTime) { + constexpr int KEEP_MS = 1000 * 5; + LedsHandle::ControlDeviceStatusLed(DeviceStatus::FORMAT_KEY_HOLD_DOWN_TIPS, KEEP_MS, LED_NOT_BLINK); + } mFormatKeyHoldTime = data.mHoldTime; return NOT_EXECUTED; } diff --git a/middleware/McuManager/src/McuManagerImpl.cpp b/middleware/McuManager/src/McuManagerImpl.cpp index e6aa404..1daeb96 100644 --- a/middleware/McuManager/src/McuManagerImpl.cpp +++ b/middleware/McuManager/src/McuManagerImpl.cpp @@ -124,6 +124,14 @@ const StatusCode McuManagerImpl::SetFeedingCycleForWatchDog(std::shared_ptr &ask, const unsigned short &feedCycle_s) { + if (CLOSE_WATCH_DOG == feedCycle_s) { + /** + * @brief When the dog feeding is turned off, you need to stop feeding the dog. Continuing to feed the dog will + * restore the watchdog. + */ + mWatchDogRuning = false; + mCv.notify_one(); + } std::shared_ptr context = std::make_shared>>(ask); return McuProtocol::SetFeedingCycleForWatchDog(feedCycle_s, context); }