One Framework 0.1.0
RoboMaster嵌入式框架“一键”解决方案,为你的“创意”服务。
载入中...
搜索中...
未找到
NotifyGuard.hpp
浏览该文件的文档.
1#ifndef OF_NOTIFY_GUARD_HPP
2#define OF_NOTIFY_GUARD_HPP
3
5#include <optional>
6
7namespace OF
8{
18 template<typename StatusT>
20 {
21 public:
22 explicit NotifyGuard(const FixedString<MAX_KEY_LEN>& key) : m_key(key) {}
23
29 bool set(const StatusT& status)
30 {
31 if (m_last_status.has_value() && m_last_status.value() == status)
32 {
33 return false;
34 }
35 m_last_status = status;
36 sendStatus(status);
37 return true;
38 }
39
43 void reset()
44 {
45 m_last_status.reset();
46 }
47
51 const std::optional<StatusT>& current() const
52 {
53 return m_last_status;
54 }
55
56 private:
58 std::optional<StatusT> m_last_status;
59
60 void sendStatus(const StatusT& status);
61 };
62
63 // 特化 LEDStatus 的发送逻辑
64 template<>
65 inline void NotifyGuard<LEDStatus>::sendStatus(const LEDStatus& status)
66 {
67 NotifyHub::setLEDStatus(m_key, status);
68 }
69
70 // 特化 BuzzerStatus 的发送逻辑
71 template<>
72 inline void NotifyGuard<BuzzerStatus>::sendStatus(const BuzzerStatus& status)
73 {
74 NotifyHub::setBuzzerStatus(m_key, status);
75 }
76}
77
78#endif // OF_NOTIFY_GUARD_HPP
定义 FixedString.hpp:12
const std::optional< StatusT > & current() const
获取当前缓存的状态(如果有)
定义 NotifyGuard.hpp:51
bool set(const StatusT &status)
设置状态,只有与上次不同时才发送
定义 NotifyGuard.hpp:29
NotifyGuard(const FixedString< MAX_KEY_LEN > &key)
定义 NotifyGuard.hpp:22
void reset()
重置缓存,下次 set 将强制发送
定义 NotifyGuard.hpp:43
static void setBuzzerStatus(const FixedString< MAX_KEY_LEN > &key, const BuzzerStatus &status)
定义 NotifyHub.cpp:131
static void setLEDStatus(const FixedString< MAX_KEY_LEN > &key, const LEDStatus &status)
定义 NotifyHub.cpp:149
定义 JointSetpointGenerator.hpp:9
定义 NotifyHub.hpp:17