Improve:Led show device status.

This commit is contained in:
Fancy code 2024-07-23 09:25:25 +08:00
parent 03303797fe
commit 281a1aa60f
4 changed files with 45 additions and 6 deletions

View File

@ -16,14 +16,29 @@
#include "ILog.h" #include "ILog.h"
#include "LedControl.h" #include "LedControl.h"
#include "SetLedState.h" #include "SetLedState.h"
LedsHandle::LedsHandle() : mDeviceStatusFlag(DeviceStatus::END)
{
}
void LedsHandle::ControlDeviceStatusLed(const DeviceStatus &status, const long int &keepAliveTime, void LedsHandle::ControlDeviceStatusLed(const DeviceStatus &status, const long int &keepAliveTime,
const unsigned int &blinkPeriod) 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) { switch (status) {
case DeviceStatus::NORMAL: case DeviceStatus::NORMAL:
mDeviceStatus = SetLedState::ControlLed("device_status", LedState::GREEN, keepAliveTime, blinkPeriod); mDeviceStatus = SetLedState::ControlLed("device_status", LedState::GREEN, keepAliveTime, blinkPeriod);
break; 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: case DeviceStatus::FORMATTING:
mDeviceStatus = SetLedState::ControlLed("device_status", LedState::RED, keepAliveTime, blinkPeriod); mDeviceStatus = SetLedState::ControlLed("device_status", LedState::RED, keepAliveTime, blinkPeriod);
break; break;
@ -44,6 +59,7 @@ void LedsHandle::ControlDeviceStatusLed(const DeviceStatus &status, const long i
LogWarning("unknow device status.\n"); LogWarning("unknow device status.\n");
break; break;
} }
mDeviceStatusFlag = status;
} }
void LedsHandle::DeleteDeviceStatusLed(void) void LedsHandle::DeleteDeviceStatusLed(void)
{ {

View File

@ -19,7 +19,8 @@ enum class DeviceStatus
{ {
NORMAL = 0, NORMAL = 0,
TAKING_PICTURE_OR_VIDEO, 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_REMOVE,
SD_CARD_INSERT, SD_CARD_INSERT,
SD_CARD_ABNORMAL, SD_CARD_ABNORMAL,
@ -32,7 +33,7 @@ enum class DeviceStatus
class LedsHandle class LedsHandle
{ {
public: public:
LedsHandle() = default; LedsHandle();
virtual ~LedsHandle() = default; virtual ~LedsHandle() = default;
protected: protected:
@ -55,5 +56,6 @@ private:
* calling the DeleteState function. * calling the DeleteState function.
*/ */
std::shared_ptr<SetLedState> mDeviceStatus; ///< Device status indicator. std::shared_ptr<SetLedState> mDeviceStatus; ///< Device status indicator.
DeviceStatus mDeviceStatusFlag;
}; };
#endif #endif

View File

@ -52,7 +52,7 @@ void TestMissionState::GoInState()
std::shared_ptr<VAppMonitor> monitor = std::shared_ptr<VAppMonitor> monitor =
std::dynamic_pointer_cast<TestMissionState>(MissionState::shared_from_this()); std::dynamic_pointer_cast<TestMissionState>(MissionState::shared_from_this());
IAppManager::GetInstance()->SetAppMonitor(monitor); IAppManager::GetInstance()->SetAppMonitor(monitor);
LedsHandle::ControlDeviceStatusLed(DeviceStatus::NORMAL); LedsHandle::ControlDeviceStatusLed(DeviceStatus::NORMAL, KEEP_ALIVE_FOREVER, BLINKING_SLOW_MS);
} }
void TestMissionState::GoOutState() void TestMissionState::GoOutState()
{ {
@ -87,24 +87,30 @@ bool TestMissionState::ClickResetKey(const KeyEventData &data)
bool TestMissionState::HoldDownResetKey(const KeyEventData &data) bool TestMissionState::HoldDownResetKey(const KeyEventData &data)
{ {
constexpr int CLOSE_WATCH_DOG_PRESSING_TIME_MS = 1000 * 3; 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"); LogInfo("Close watch dog.\n");
constexpr int KEEP_BLINKING_FAST_MS = 1000 * 3; constexpr int KEEP_BLINKING_FAST_MS = 1000 * 3;
LedsHandle::ControlDeviceStatusLed(DeviceStatus::CLOSE_WATCHDOG, KEEP_BLINKING_FAST_MS, BLINKING_FAST_MS); LedsHandle::ControlDeviceStatusLed(DeviceStatus::CLOSE_WATCHDOG, KEEP_BLINKING_FAST_MS, BLINKING_FAST_MS);
CloseWatchDog(); CloseWatchDog();
} }
if (CLOSE_WATCH_DOG_PRESSING_TIME_MS > data.mHoldTime) {
return NOT_EXECUTED;
}
mFormattingSDCard = DO_NOT_FORMAT_SDCARD_ANYMORE; mFormattingSDCard = DO_NOT_FORMAT_SDCARD_ANYMORE;
// mResetKeyHoldTime = data.mHoldTime; mResetKeyHoldTime = data.mHoldTime;
return EXECUTED; return EXECUTED;
} }
bool TestMissionState::HoldUpResetKey(const KeyEventData &data) bool TestMissionState::HoldUpResetKey(const KeyEventData &data)
{ {
mFormattingSDCard = SD_CARD_IS_NOT_FORMATTING; mFormattingSDCard = SD_CARD_IS_NOT_FORMATTING;
mResetKeyHoldTime = 0;
return EXECUTED; return EXECUTED;
} }
bool TestMissionState::HoldDownFormatKey(const KeyEventData &data) bool TestMissionState::HoldDownFormatKey(const KeyEventData &data)
{ {
constexpr int FORMAT_SD_CARD_PRESSING_TIME_MS = 1000 * 15; 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) { if (FORMAT_SD_CARD_PRESSING_TIME_MS <= data.mHoldTime && SD_CARD_IS_NOT_FORMATTING == mFormattingSDCard) {
LogInfo("format key down.\n"); LogInfo("format key down.\n");
mFormattingSDCard = DO_NOT_FORMAT_SDCARD_ANYMORE; mFormattingSDCard = DO_NOT_FORMAT_SDCARD_ANYMORE;
@ -113,6 +119,13 @@ bool TestMissionState::HoldDownFormatKey(const KeyEventData &data)
MissionStateMachine::GetInstance()->SendStateMessage(message); MissionStateMachine::GetInstance()->SendStateMessage(message);
return EXECUTED; 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; mFormatKeyHoldTime = data.mHoldTime;
return NOT_EXECUTED; return NOT_EXECUTED;
} }

View File

@ -124,6 +124,14 @@ const StatusCode McuManagerImpl::SetFeedingCycleForWatchDog(std::shared_ptr<VMcu
const StatusCode McuManagerImpl::SetFeedingCycleForWatchDog(std::shared_ptr<VMcuAsk> &ask, const StatusCode McuManagerImpl::SetFeedingCycleForWatchDog(std::shared_ptr<VMcuAsk> &ask,
const unsigned short &feedCycle_s) 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<VProtocolContext> context = std::make_shared<ProtocolContext<std::shared_ptr<VMcuAsk>>>(ask); std::shared_ptr<VProtocolContext> context = std::make_shared<ProtocolContext<std::shared_ptr<VMcuAsk>>>(ask);
return McuProtocol::SetFeedingCycleForWatchDog(feedCycle_s, context); return McuProtocol::SetFeedingCycleForWatchDog(feedCycle_s, context);
} }