diff options
Diffstat (limited to 'drivers/mailbox/include')
-rw-r--r-- | drivers/mailbox/include/mailbox.hpp | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/drivers/mailbox/include/mailbox.hpp b/drivers/mailbox/include/mailbox.hpp index 465503e..f3a2dc4 100644 --- a/drivers/mailbox/include/mailbox.hpp +++ b/drivers/mailbox/include/mailbox.hpp @@ -25,19 +25,63 @@ namespace Mailbox { +/** + * The Mailbox parent class + * + * Intended to be implemented by a driver subclass, see MHU_v2 driver as example. + */ class Mailbox { public: + /** + * Constructor/Destructor + */ Mailbox(); virtual ~Mailbox(); - virtual bool sendMessage() = 0; + + /** + * Intended to trigger an interrupt to an external block + * MUST be implemented by subclass. + */ + virtual bool sendMessage() = 0; + + /** + * Intended to be called when Cortex M has received an + * interrupt/event from mailbox/mhu. If an interrupt needs to be cleared, + * this is a good place to do that. MUST call notify(). + * MUST be implemented by subclass. + */ virtual void handleMessage() = 0; + + /** + * Can be used to verify that hardware versions match expected versions + * CAN be implemented by subclass, optional. Default impl returns true. + */ virtual bool verifyHardware(); + + /** + * Function signature for callbacks + */ typedef void (*CallbackFptr)(void *userArg); + + /** + * Register a callback to be called when a message is received. + */ void registerCallback(CallbackFptr callback, void *userArg); + + /** + * Remove a specific callback from the callback list. + */ void deregisterCallback(CallbackFptr callback, void *userArg); protected: + /** + * Calls every registered callback when a message has been received. + */ void notify(); + + /** + * Helper functions + */ uint32_t read32(volatile uint32_t *baseAddr, const uint32_t offset); void write32(volatile uint32_t *baseAddr, const uint32_t offset, const uint32_t value); |