- /* Public Interface - May be used in end-application: */\r
- /* Macros: */\r
- /** Raises a given event name, with the specified parameters. For events with no parameters the\r
- * only argument to the macro is the event name, events with parameters list the parameter values\r
- * after the name as a comma seperated list.\r
- *\r
- * When a given event is fired, its corresponding event handler code is executed.\r
- *\r
- * Usage Examples:\r
- * \code\r
- * // Raise the USB_VBUSChange event, which takes no parameters\r
- * RAISE_EVENT(USB_VBUSChange);\r
- *\r
- * // Raise the USB_UnhandledControlPacket event which takes two parameters\r
- * RAISE_EVENT(USB_UnhandledControlPacket, 0, 1);\r
- * \endcode\r
- *\r
- * \see RAISES_EVENT()\r
- */\r
- #define RAISE_EVENT(e, ...) Event_ ## e (__VA_ARGS__)\r
-\r
- /** Indicates that a given module can raise a given event. This is the equivelent of putting the\r
- * event function's prototype into the module, but in a cleaner way. Each event which may be\r
- * fired via the RAISE_EVENT macro in the module should have an accompanying RAISES_EVENT\r
- * prototype in the module's header file.\r
- *\r
- * Usage Examples:\r
- * \code\r
- * // Module can raise the USB_VBUSChange event\r
- * RAISES_EVENT(USB_VBUSChange);\r
- *\r
- * // ...\r
- * // Inside a block of code in a function of the module, raise the USB_VBUSChange event\r
- * RAISE_EVENT(USB_VBUSChange);\r
- * \endcode\r
- *\r
- * \see RAISE_EVENT()\r
- */\r
- #define RAISES_EVENT(e) HANDLES_EVENT(e)\r
-\r
- /** Defines an event handler for the given event. Event handlers should be short in length, as they\r
- * may be raised from inside an ISR. The user application can react to each event as it sees fit,\r
- * such as logging the event, indicating the change to the user or performing some other action.\r
- *\r
- * Only one event handler may be defined in any user project for each individual event. Events may\r
- * or may not have parameters - for each event, refer to its documentation elsewhere in this module\r
- * to determine the presense and purpose of any event parameters.\r
- *\r
- * Usage Example:\r
- * \code\r
- * // Create an event handler for the USB_VBUSChange event\r
- * EVENT_HANDLER(USB_VBUSChange)\r
- * {\r
- * // Code to execute when the VBUS level changes\r
- * }\r
- * \endcode\r
- *\r
- * \see HANDLES_EVENT()\r
- */\r
- #define EVENT_HANDLER(e) void Event_ ## e e ## _P\r
- \r
- /** Indicates that a given module handles an event. This is the equivelent of putting the\r
- * event function's prototype into the module, but in a cleaner way. Each event which may be\r
- * handled via the EVENT_HANDLER macro in the module should have an accompanying HANDLES_EVENT\r
- * prototype in the module's header file.\r
- *\r
- * Usage Examples:\r
- * \code\r
- * // Module handles the USB_VBUSChange event\r
- * HANDLES_EVENT(USB_VBUSChange);\r
- *\r
- * // Create the USB_VBUSChange event handler\r
- * EVENT_HANDLER(USB_VBUSChange)\r
- * {\r
- * // Event handler code here\r
- * }\r
- * \endcode\r
- *\r
- * \see EVENT_HANDLER()\r
- */\r
- #define HANDLES_EVENT(e) EVENT_HANDLER(e)\r
- \r
- /* Psudo-Functions for Doxygen: */\r
- #if defined(__DOXYGEN__)\r