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 "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)
{

View File

@ -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<SetLedState> mDeviceStatus; ///< Device status indicator.
DeviceStatus mDeviceStatusFlag;
};
#endif

View File

@ -52,7 +52,7 @@ void TestMissionState::GoInState()
std::shared_ptr<VAppMonitor> monitor =
std::dynamic_pointer_cast<TestMissionState>(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;
}

View File

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