2011-11-12 23:02:24 -04:00
# ifndef __AP_TIMERPROCESS_H__
# define __AP_TIMERPROCESS_H__
# include "PeriodicProcess.h"
# include "../Arduino_Mega_ISR_Registry/Arduino_Mega_ISR_Registry.h"
2011-12-16 03:50:28 -04:00
// default to 1kHz timer interrupt
# define TIMERPROCESS_PER_DEFAULT (256-62) // 1kHz
2011-11-12 23:02:24 -04:00
2012-09-14 09:03:49 -03:00
# define AP_TIMERPROCESS_MAX_PROCS 5
2011-12-09 01:27:50 -04:00
2011-11-12 23:02:24 -04:00
class AP_TimerProcess : public AP_PeriodicProcess
{
2012-08-17 03:20:55 -03:00
public :
AP_TimerProcess ( uint8_t period = TIMERPROCESS_PER_DEFAULT ) ;
void init ( Arduino_Mega_ISR_Registry * isr_reg ) ;
void register_process ( ap_procedure proc ) ;
2012-09-06 02:07:29 -03:00
bool queue_process ( ap_procedure proc ) ; // queue process to run as soon as possible after any currently running ap_processes complete. returns true if it ran immediately
2012-08-17 03:20:55 -03:00
void set_failsafe ( ap_procedure proc ) ;
void suspend_timer ( void ) ;
void resume_timer ( void ) ;
2012-09-29 01:47:55 -03:00
bool running ( ) ;
2012-08-17 03:20:55 -03:00
static void run ( void ) ;
protected :
static uint8_t _period ;
static ap_procedure _proc [ AP_TIMERPROCESS_MAX_PROCS ] ;
static ap_procedure _failsafe ;
2012-09-06 02:07:29 -03:00
static ap_procedure _queued_proc ;
2012-08-17 03:20:55 -03:00
static uint8_t _pidx ;
static bool _in_timer_call ;
static bool _suspended ;
2011-11-12 23:02:24 -04:00
} ;
# endif // __AP_TIMERPROCESS_H__