2015-09-02 11:42:24 +00:00
|
|
|
#ifndef MICROBIT_EVENT_H
|
|
|
|
#define MICROBIT_EVENT_H
|
2015-08-12 10:53:41 +00:00
|
|
|
|
2015-09-11 15:39:38 +00:00
|
|
|
#include "mbed.h"
|
2015-08-12 10:53:41 +00:00
|
|
|
|
2015-09-12 10:34:16 +00:00
|
|
|
enum MicroBitEventLaunchMode
|
|
|
|
{
|
|
|
|
CREATE_ONLY,
|
|
|
|
CREATE_AND_QUEUE,
|
|
|
|
CREATE_AND_FIRE
|
|
|
|
};
|
|
|
|
|
|
|
|
#define MICROBIT_EVENT_DEFAULT_LAUNCH_MODE CREATE_AND_QUEUE
|
|
|
|
|
2015-08-12 10:53:41 +00:00
|
|
|
/**
|
|
|
|
* Class definition for a MicrobitEvent
|
|
|
|
* It represents a common event that is generated by the various components on the MB.
|
|
|
|
*/
|
|
|
|
class MicroBitEvent
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
//These are public at the moment for backwards compatability with old code
|
|
|
|
//will be refactored in the future!
|
|
|
|
|
|
|
|
uint16_t source; // ID of the MicroBit Component that generated the event e.g. MICROBIT_ID_BUTTON_A.
|
|
|
|
uint16_t value; // Component specific code indicating the cause of the event.
|
|
|
|
uint32_t timestamp; // Time at which the event was generated. ms since power on.
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructor.
|
|
|
|
* @param src ID of the MicroBit Component that generated the event e.g. MICROBIT_ID_BUTTON_A.
|
|
|
|
* @param value Component specific code indicating the cause of the event.
|
2015-09-12 10:34:16 +00:00
|
|
|
* @param mode optional definition of how the event should be processed after construction (if at all):
|
|
|
|
*
|
|
|
|
* CREATE_ONLY: MicroBitEvent is initialised, and no further processing takes place.
|
|
|
|
* CREATE_AND_QUEUE: MicroBitEvent is initialised, and queued on the MicroBitMessageBus.
|
|
|
|
* CREATE_AND_FIRE: MicroBitEvent is initialised, and its event handlers are immediately fired (not suitable for use in interrupts!).
|
2015-08-12 10:53:41 +00:00
|
|
|
*
|
2015-09-12 10:34:16 +00:00
|
|
|
* Example: Create and launch an event using the default configuration
|
|
|
|
* @code
|
|
|
|
* MicrobitEvent evt(id,MICROBIT_BUTTON_EVT_CLICK);
|
|
|
|
* @endcode
|
|
|
|
*
|
|
|
|
* Example: Create and launch an event and process all registered event handlers immediately.
|
2015-08-12 10:53:41 +00:00
|
|
|
* @code
|
2015-09-12 10:34:16 +00:00
|
|
|
* MicrobitEvent evt(id,MICROBIT_BUTTON_EVT_CLICK,CREATE_AND_FIRE);
|
2015-08-12 10:53:41 +00:00
|
|
|
* @endcode
|
|
|
|
*/
|
2015-09-12 10:34:16 +00:00
|
|
|
|
|
|
|
MicroBitEvent(uint16_t source, uint16_t value, MicroBitEventLaunchMode mode = MICROBIT_EVENT_DEFAULT_LAUNCH_MODE);
|
2015-08-12 10:53:41 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Default constructor - initialises all values, and sets timestamp to the current time.
|
|
|
|
*/
|
|
|
|
MicroBitEvent();
|
|
|
|
|
|
|
|
/**
|
2015-09-12 10:34:16 +00:00
|
|
|
* Fires the represented event onto the message bus using the default configuration.
|
2015-08-12 10:53:41 +00:00
|
|
|
*/
|
|
|
|
void fire();
|
2015-09-12 10:34:16 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Fires the represented event onto the message bus.
|
|
|
|
* @param mode Configuration of how the event is processed.
|
|
|
|
*/
|
|
|
|
void fire(MicroBitEventLaunchMode mode);
|
2015-08-12 10:53:41 +00:00
|
|
|
};
|
|
|
|
|
2015-09-11 15:39:38 +00:00
|
|
|
/**
|
|
|
|
* Enclosing class to hold a chain of events.
|
|
|
|
*/
|
|
|
|
struct MicroBitEventQueueItem
|
|
|
|
{
|
|
|
|
MicroBitEvent evt;
|
|
|
|
MicroBitEventQueueItem *next;
|
2015-08-12 10:53:41 +00:00
|
|
|
|
2015-09-11 15:39:38 +00:00
|
|
|
/**
|
|
|
|
* Constructor.
|
|
|
|
* Creates a new MicroBitEventQueueItem.
|
|
|
|
* @param evt The event that is to be queued.
|
|
|
|
*/
|
|
|
|
MicroBitEventQueueItem(MicroBitEvent evt);
|
|
|
|
};
|
2015-08-12 10:53:41 +00:00
|
|
|
|
|
|
|
#endif
|
|
|
|
|