File syn_sequencer.h¶
File List > sched > syn_sequencer.h
Go to the documentation of this file
#ifndef SYN_SEQUENCER_H
#define SYN_SEQUENCER_H
#include "../port/syn_port_system.h"
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/* ── Step action ────────────────────────────────────────────────────────── */
typedef void (*SYN_SeqAction)(void *ctx);
typedef struct {
SYN_SeqAction action;
void *ctx;
uint32_t delay_ms;
} SYN_SeqStep;
/* ── Sequencer state ────────────────────────────────────────────────────── */
typedef enum {
SYN_SEQ_IDLE = 0,
SYN_SEQ_RUNNING = 1,
SYN_SEQ_WAITING = 2,
SYN_SEQ_DONE = 3,
} SYN_SeqState;
/* ── Completion callback ────────────────────────────────────────────────── */
struct SYN_Sequencer;
typedef void (*SYN_SeqCompleteCallback)(struct SYN_Sequencer *seq, void *ctx);
typedef struct SYN_Sequencer {
const SYN_SeqStep *steps;
uint16_t step_count;
uint16_t current;
SYN_SeqState state;
uint32_t wait_start;
bool loop;
uint16_t loop_count;
SYN_SeqCompleteCallback on_complete;
void *on_complete_ctx;
} SYN_Sequencer;
/* ── API ────────────────────────────────────────────────────────────────── */
void syn_seq_init(SYN_Sequencer *seq, const SYN_SeqStep *steps, uint16_t count);
void syn_seq_on_complete(SYN_Sequencer *seq, SYN_SeqCompleteCallback cb, void *ctx);
void syn_seq_set_loop(SYN_Sequencer *seq, bool loop);
void syn_seq_start(SYN_Sequencer *seq);
void syn_seq_stop(SYN_Sequencer *seq);
bool syn_seq_update(SYN_Sequencer *seq);
static inline bool syn_seq_is_done(const SYN_Sequencer *seq)
{
return seq->state == SYN_SEQ_DONE || seq->state == SYN_SEQ_IDLE;
}
static inline uint16_t syn_seq_current_step(const SYN_Sequencer *seq)
{
return seq->current;
}
static inline uint16_t syn_seq_loops(const SYN_Sequencer *seq)
{
return seq->loop_count;
}
#ifdef __cplusplus
}
#endif
#endif /* SYN_SEQUENCER_H */