mirror of
https://github.com/ArduPilot/ardupilot.git
synced 2026-11-09 16:41:21 +08:00
HAL_ChibiOS: add EventSource HAL
This commit is contained in:
1 parent
265e9b8cc6
commit
7929efec0d
2 files changed
+59
No files matched your search
@@ -0,0 +1,34 @@
|
||||
#include "EventSource.h"
|
||||
#include <AP_HAL/AP_HAL.h>
|
||||
|
||||
using namespace ChibiOS;
|
||||
|
||||
#if CH_CFG_USE_EVENTS == TRUE
|
||||
|
||||
bool EventSource::wait(uint64_t duration, AP_HAL::EventHandle *evt_handle)
|
||||
{
|
||||
chibios_rt::EventListener evt_listener;
|
||||
eventmask_t evt_mask = evt_handle->get_evt_mask();
|
||||
msg_t ret = msg_t();
|
||||
ch_evt_src_.registerMask(&evt_listener, evt_mask);
|
||||
if (duration == 0) {
|
||||
ret = chEvtWaitAnyTimeout(evt_mask, TIME_IMMEDIATE);
|
||||
} else {
|
||||
ret = chEvtWaitAnyTimeout(evt_mask, chTimeUS2I(duration));
|
||||
}
|
||||
ch_evt_src_.unregister(&evt_listener);
|
||||
return ret == MSG_OK;
|
||||
}
|
||||
|
||||
void EventSource::signal(uint32_t evt_mask)
|
||||
{
|
||||
ch_evt_src_.broadcastFlags(evt_mask);
|
||||
}
|
||||
|
||||
void EventSource::signalI(uint32_t evt_mask)
|
||||
{
|
||||
chSysLockFromISR();
|
||||
ch_evt_src_.broadcastFlagsI(evt_mask);
|
||||
chSysUnlockFromISR();
|
||||
}
|
||||
#endif
|
||||
Reference in new issue
Block a user