#pragma once #include "AP_HAL_Namespace.h" #include #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; };