crashtest-r0ket/firmware/basic/idle.h

45 lines
931 B
C

#ifndef __BASICIDLE_H_
#define __BASICIDLE_H_
#define MAXQENTRIES 8
#define QT_NORMAL 0
#define QT_PLUS 1
#define QS_START 0x0
#define QS_END 0x7f
typedef struct {
union {
void (*callback)(void);
uint8_t (*callbackplus)(uint8_t);
} u;
unsigned type :1;
unsigned state :7;
} QENTRY;
typedef struct {
int qstart;
int qend;
QENTRY queue[MAXQENTRIES];
} QUEUE;
extern QUEUE the_queue;
extern volatile uint32_t _timectr;
void work_queue(void);
uint8_t work_queue_minimal(void);
void delayms_queue(uint32_t);
uint8_t delayms_queue_plus(uint32_t, uint8_t);
void delayms_power(uint32_t);
int push_queue(void (*qnew)(void));
int push_queue_plus(uint8_t (*qnew)(uint8_t));
// Note:
// Our time implementation will fail after 497 days of continous uptime.
// ( 2^32 / 1000 * SYSTICKSPEED ) seconds
#define incTimer(void) do{_timectr++;}while(0);
#define getTimer() (_timectr)
#endif