aboutsummaryrefslogtreecommitdiff
path: root/drivers/mailbox/include/mailbox.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mailbox/include/mailbox.hpp')
-rw-r--r--drivers/mailbox/include/mailbox.hpp46
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);