mFrame
載入中...
搜尋中...
無符合項目
PulseTimer.h
1
7#ifndef MFRAME_7F782700_B98A_43B9_8DE2_E02B6973E8FD
8#define MFRAME_7F782700_B98A_43B9_8DE2_E02B6973E8FD
9
10/* ***************************************************************************************
11 * Include
12 */
13
14//----------------------------------------------------------------------------------------
15#include "./../../hal/digital/EdgeTrigger.h"
16#include "./../lang/Object.h"
17#include "./../lang/Updatable.h"
18#include "./../util/ElapsedTimer.h"
19
20//----------------------------------------------------------------------------------------
21
22/* ***************************************************************************************
23 * Namespace
24 */
25namespace ufm::hw {
26 class PulseTimer;
27} // namespace ufm::hw
28
29/* ***************************************************************************************
30 * Class/Interface/Struct/Enum
31 */
32
42 /* *************************************************************************************
43 * Class/Interface/Struct/Enum - Flag
44 */
45 public:
46 union Flag {
47 struct {
48 bool handle : 1;
49 bool direct : 1;
50 bool skip : 1;
51 } bits;
52 uint8 value;
53 };
54
55 /* *************************************************************************************
56 * Class/Interface/Struct/Enum - Event
57 */
58 public:
64 struct Event {
65 /* ***********************************************************************************
66 * Method
67 */
68
76 virtual void onHighDuration(uint32 microscronds) abstract;
77
85 virtual void onLowDuration(uint32 microscronds) abstract;
86 };
87
88 /* *************************************************************************************
89 * Class/Interface/Struct/Enum - State
90 */
91
98 enum class State : uint8 {
99 RISE,
100 FALL,
101 NONE
102 };
103
104 /* *************************************************************************************
105 * Variable
106 */
107 public:
110 uint32 vDebounce;
111 uint32 vRecode;
116 /* *************************************************************************************
117 * Abstract Method
118 */
119
120 /* *************************************************************************************
121 * Construct Method
122 */
123 public:
133 PulseTimer(uint32 debounce = 1000, Event* event = nullptr);
134
139 virtual ~PulseTimer(void) override;
140
141 /* *************************************************************************************
142 * Operator Method
143 */
144
145 /* *************************************************************************************
146 * Override - hal::digital::EdgeTrigger::Event
147 */
148 public:
155 virtual void onEdgeRise(void) override;
156
163 virtual void onEdgeFall(void) override;
164
165 /* *************************************************************************************
166 * Override - ufm::lang::Updatable
167 */
168 public:
175 virtual void update(void) override;
176
177 /* *************************************************************************************
178 * Public Method
179 */
180 public:
186 inline void setDebounce(uint32 micros) {
187 this->vDebounce = micros;
188 return;
189 }
190
196 inline void setEvent(Event* event) {
197 this->vEvent = event;
198 return;
199 }
200
206 inline State getState(void) {
207 return this->vState;
208 }
209
216 inline bool isRise(void) {
217 return (this->vState == State::RISE);
218 }
219
226 inline bool isFall(void) {
227 return (this->vState == State::FALL);
228 }
229
235 inline uint32 getDuration(void) {
236 return this->vRecode + static_cast<uint32>(this->vElapsedTimer.elapsed());
237 }
238
239 /* *************************************************************************************
240 * Protected Method
241 */
242
243 /* *************************************************************************************
244 * Private Method
245 */
246 public:
247 void handle(bool direct);
248
249 /* *************************************************************************************
250 * Static Variable
251 */
252
253 /* *************************************************************************************
254 * Static Method
255 */
256};
257
258/* ***************************************************************************************
259 * End of file
260 */
261
262#endif /* MFRAME_7F782700_B98A_43B9_8DE2_E02B6973E8FD */
脈衝計時器類
Definition PulseTimer.h:41
State vState
Definition PulseTimer.h:114
virtual void update(void) override
更新方法
uint32 vDebounce
Definition PulseTimer.h:110
uint32 getDuration(void)
取得持續時間。
Definition PulseTimer.h:235
State getState(void)
取得當前高低電平狀態。
Definition PulseTimer.h:206
ufm::util::ElapsedTimer vElapsedTimer
Definition PulseTimer.h:108
bool isFall(void)
判斷當前狀態是否為低電平。
Definition PulseTimer.h:226
virtual ~PulseTimer(void) override
Destroy the object.
uint32 vRecode
Definition PulseTimer.h:111
Flag vFlag
Definition PulseTimer.h:113
void setDebounce(uint32 micros)
設定去彈跳時間。
Definition PulseTimer.h:186
void setEvent(Event *event)
設定邊緣觸發事件物件。
Definition PulseTimer.h:196
State
高低電平狀態枚舉。
Definition PulseTimer.h:98
bool isRise(void)
判斷當前狀態是否為高電平。
Definition PulseTimer.h:216
virtual void onEdgeFall(void) override
邊緣觸發事件處理方法。
Event * vEvent
Definition PulseTimer.h:112
virtual void onEdgeRise(void) override
邊緣觸發事件處理方法。
PulseTimer(uint32 debounce=1000, Event *event=nullptr)
Construct a new Pulse Timer object.
物件基底類別
Definition Object.h:63
Definition ElapsedTimer.h:29
uint64 elapsed(void) const
獲取從計時器啟動到現在的經過時間
Definition Ammeter.h:22
[Interface] 邊緣觸發事件處理介面。
Definition EdgeTrigger.h:102
[Interface] 高低電平持續時間事件處理介面。
Definition PulseTimer.h:64
virtual void onLowDuration(uint32 microscronds) override
處理低電平持續時間事件。
virtual void onHighDuration(uint32 microscronds) override
處理高電平持續時間事件。
[Interface] 定義可更新的物件介面
Definition Updatable.h:38
Definition PulseTimer.h:46