85 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /******************************************************************************/
 | |
| /* FILENAME	: xf.h                                                            */
 | |
| /*----------------------------------------------------------------------------*/
 | |
| /* GOAL		  : Offers the femto XF functions                                   */
 | |
| /*----------------------------------------------------------------------------*/
 | |
| /* AUTHOR   : Medard Rieder / Pascal Sartoretti                               */
 | |
| /*----------------------------------------------------------------------------*/
 | |
| /* DATE:    : original (Medard Rieder 08.2011)                                */
 | |
| /*            corrections & simplified (Pascal Sartoretti 06.2016)            */
 | |
| /******************************************************************************/
 | |
| #ifndef XF_DEF
 | |
| #define XF_DEF
 | |
| 
 | |
| #include <stdint.h>         // usage of standard types
 | |
| #include <stdbool.h>        // usage of boolean types
 | |
| #include "../mcc_generated_files/mcc.h"
 | |
| #include "event.h"
 | |
| 
 | |
| #define  Time uint16_t      // time type
 | |
| #define  TimerID uint8_t    // identifier of timer (position in buffer)
 | |
| 
 | |
| typedef struct Timer_        // timer structure
 | |
| {
 | |
|     Time tm;                // time
 | |
|     Event ev;               // event to post
 | |
| } Timer;
 | |
| /*----------------------------------------------------------------------------*/
 | |
| /* depending on usage, change MAXTIMER and MAXEVENT                           */
 | |
| /*----------------------------------------------------------------------------*/
 | |
| #define MAXTIMER 8          // number of timers in our system
 | |
| #define MAXEVENT 20         // number of events in our system 
 | |
| 
 | |
| #define NULLTIMER 0         // no value for time
 | |
| #define TICKINTERVAL 10     // this is the ticktimers duration
 | |
| 
 | |
| 
 | |
| /*----------------------------------------------------------------------------*/
 | |
| typedef struct XF           // the XF structure
 | |
| {
 | |
|     Timer timerList[MAXTIMER];         // the timers
 | |
|     Event eventQueue[MAXEVENT];        // the events
 | |
|     uint8_t in;                        // the events in pointer
 | |
|     uint8_t out;                       // the events out pointer
 | |
| } XF;
 | |
| 
 | |
| /******************************************************************************/
 | |
| /* FUNCTION     : Init the XF structure                                       */
 | |
| /* INPUT        : -                                                           */
 | |
| /* OUTPUT       : -                                                           */
 | |
| /* COMMENTS     : Have to be called once                                      */
 | |
| /******************************************************************************/
 | |
| void XF_init();
 | |
| 
 | |
| /******************************************************************************/
 | |
| /* FUNCTION     : Remove a timer in timers queue                              */
 | |
| /* INPUT        : id - the timer id to remove                                 */
 | |
| /*                inISR - (true if called in an ISR, else false)              */
 | |
| /* OUTPUT       : -                                                           */
 | |
| /* COMMENTS     : -                                                           */
 | |
| /******************************************************************************/
 | |
| void XF_unscheduleTimer(TimerID id, bool inISR);
 | |
| /******************************************************************************/
 | |
| /* FUNCTION     : Decrement timers to post events if time elapsed             */
 | |
| /* INPUT        : -                                                           */
 | |
| /* OUTPUT       : -                                                           */
 | |
| /* COMMENTS     : This function has to be called from the timer ISR           */
 | |
| /******************************************************************************/
 | |
| void XF_decrementAndQueueTimers();
 | |
| 
 | |
| /********************************************************************************/
 | |
| /* FUNCTION     : POST an Event                                                 */
 | |
| /* INPUT        : target - the address of the object with the state machine     */
 | |
| /*                processEvent - function pointer of the state machine function */
 | |
| /*                id - the id of the event                                      */
 | |
| /*                delay - the delay if the event is a timeout event             */
 | |
| /*                data - user data                                              */
 | |
| /* OUTPUT       : TimerId - the id of the timeout if the event is a timeout     */
 | |
| /* COMMENTS     :                                                               */
 | |
| /********************************************************************************/
 | |
| TimerID POST(void* target, processEventT processEvent, uint8_t id, Time delay, int64_t data);
 | |
| 
 | |
| void XF_executeOnce();
 | |
| #endif
 | |
| 
 |