8 changed files with 91 additions and 1 deletions
@ -0,0 +1,33 @@
@@ -0,0 +1,33 @@
|
||||
#include "EventHandle.h" |
||||
#include <AP_HAL/AP_HAL.h> |
||||
|
||||
|
||||
bool AP_HAL::EventHandle::register_event(uint32_t evt_mask) |
||||
{ |
||||
WITH_SEMAPHORE(sem); |
||||
evt_mask_ |= evt_mask; |
||||
return true; |
||||
} |
||||
|
||||
bool AP_HAL::EventHandle::unregister_event(uint32_t evt_mask) |
||||
{ |
||||
WITH_SEMAPHORE(sem); |
||||
evt_mask_ &= ~evt_mask; |
||||
return true; |
||||
} |
||||
|
||||
bool AP_HAL::EventHandle::wait(uint64_t duration) |
||||
{ |
||||
if (evt_src_ == nullptr) { |
||||
return false; |
||||
} |
||||
return evt_src_->wait(duration, this); |
||||
} |
||||
|
||||
bool AP_HAL::EventHandle::set_source(AP_HAL::EventSource* src) |
||||
{ |
||||
WITH_SEMAPHORE(sem); |
||||
evt_src_ = src; |
||||
evt_mask_ = 0; |
||||
return true; |
||||
} |
@ -0,0 +1,44 @@
@@ -0,0 +1,44 @@
|
||||
#pragma once |
||||
|
||||
#include "AP_HAL_Namespace.h" |
||||
#include <stdint.h> |
||||
#include "AP_HAL_Boards.h" |
||||
|
||||
class AP_HAL::EventSource { |
||||
public: |
||||
// generate event from thread context
|
||||
virtual void signal(uint32_t evt_mask) = 0; |
||||
|
||||
// generate event from interrupt context
|
||||
virtual void signalI(uint32_t evt_mask) { signal(evt_mask); } |
||||
|
||||
|
||||
// Wait on an Event handle, method for internal use by EventHandle
|
||||
virtual bool wait(uint64_t duration, AP_HAL::EventHandle* evt_handle) = 0; |
||||
}; |
||||
|
||||
class AP_HAL::EventHandle { |
||||
public: |
||||
//Set event source
|
||||
virtual bool set_source(AP_HAL::EventSource* src); |
||||
|
||||
AP_HAL::EventSource* get_source() { return evt_src_; } |
||||
|
||||
// return true if event type was successfully registered
|
||||
virtual bool register_event(uint32_t evt_mask); |
||||
|
||||
// return true if event type was successfully unregistered
|
||||
virtual bool unregister_event(uint32_t evt_mask); |
||||
|
||||
// return true if event was triggered within the duration
|
||||
virtual bool wait(uint64_t duration); |
||||
|
||||
virtual uint32_t get_evt_mask() const { return evt_mask_; } |
||||
|
||||
private: |
||||
// Mask of events to be handeled,
|
||||
// Max 32 events can be handled per event handle
|
||||
uint32_t evt_mask_; |
||||
AP_HAL::EventSource *evt_src_; |
||||
HAL_Semaphore sem; |
||||
}; |
Loading…
Reference in new issue