// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*- /// @file AP_Semaphore.h /// @brief class to ensure conflicts over shared resources are avoided #ifndef AP_SEMAPHORE #define AP_SEMAPHORE #include #include #include // ArduPilot Mega Vector/Matrix math Library // the callback type for call_on_release. They are passed in a pointer to the semaphore typedef void (*ap_semaphore_callback)(); /// @class AP_Semaphore class AP_Semaphore { public: // Constructor AP_Semaphore(); // get - to claim ownership of the semaphore virtual bool get(void* caller); // release - to give up ownership of the semaphore virtual bool release(void* caller); // call_on_release - returns true if caller successfully added to the queue to be called back virtual bool call_on_release(void* caller, ap_semaphore_callback callback_fn); protected: bool _taken; void* _owner; void* _waiting_owner; ap_semaphore_callback _waiting_callback; // call back procedure of process waiting for sempahore }; // some global semaphores extern AP_Semaphore AP_Semaphore_spi3; #endif // AP_SEMAPHORE