hexagram/include/hexagram/schedule.h
XANTRONIX Development 80cc0f663d Less bonkers
2023-12-27 14:13:00 -05:00

53 lines
1.3 KiB
C

#ifndef _HEXAGRAM_SCHEDULE_H
#define _HEXAGRAM_SCHEDULE_H
#include <stdint.h>
#include <sys/types.h>
#include <sys/time.h>
#include <time.h>
#include <signal.h>
#include <hexagram/can.h>
typedef int (*hexagram_schedule_handler)(struct can_frame *, void *);
typedef struct _hexagram_schedule_table_entry {
time_t interval_us;
struct can_frame frame;
hexagram_schedule_handler handler;
} hexagram_schedule_table_entry;
typedef struct _hexagram_schedule_slot {
time_t interval_us;
hexagram_schedule_table_entry *entry;
} hexagram_schedule_slot;
typedef struct _hexagram_schedule {
struct sigevent ev;
struct itimerspec ts;
timer_t timer;
size_t current,
count;
hexagram_schedule_table_entry *table;
void *ctx;
int error;
} hexagram_schedule;
hexagram_schedule *hexagram_schedule_create(hexagram_schedule_table_entry *table,
size_t count,
void *ctx);
void hexagram_schedule_destroy(hexagram_schedule *schedule);
void hexagram_schedule_reset(hexagram_schedule *schedule);
int hexagram_schedule_run(hexagram_schedule *schedule);
int hexagram_schedule_stop(hexagram_schedule *schedule);
int hexagram_schedule_error(hexagram_schedule *schedule);
#endif /* _HEXAGRAM_SCHEDULE_H */