Skip to content

File syn_sequencer.h

FileList > sched > syn_sequencer.h

Go to the source code of this file

Timed action sequencer — choreograph steps with delays. More...

  • #include "../port/syn_port_system.h"
  • #include <stdbool.h>
  • #include <stddef.h>
  • #include <stdint.h>

Classes

Type Name
struct SYN_SeqStep
struct SYN_Sequencer
Sequencer runtime context.

Public Types

Type Name
typedef void(* SYN_SeqAction
typedef void(* SYN_SeqCompleteCallback
Completion callback function signature.
enum SYN_SeqState
Action sequencer execution states.

Public Functions

Type Name
void syn_seq_init (SYN_Sequencer * seq, const SYN_SeqStep * steps, uint16_t count)
Initialize a sequencer.
void syn_seq_on_complete (SYN_Sequencer * seq, SYN_SeqCompleteCallback cb, void * ctx)
Set completion callback.
void syn_seq_set_loop (SYN_Sequencer * seq, bool loop)
Enable looping (auto-restart on completion).
void syn_seq_start (SYN_Sequencer * seq)
Start the sequence from the beginning.
void syn_seq_stop (SYN_Sequencer * seq)
Stop the sequence.
bool syn_seq_update (SYN_Sequencer * seq)
Update the sequencer — call from main loop.

Public Static Functions

Type Name
uint16_t syn_seq_current_step (const SYN_Sequencer * seq)
Get current step index.
bool syn_seq_is_done (const SYN_Sequencer * seq)
Check if done.
uint16_t syn_seq_loops (const SYN_Sequencer * seq)
Get loop iteration count.

Detailed Description

Execute a sequence of actions with configurable delays between them. Non-blocking — call update() from your main loop.

** **

void relay_on(void *ctx) { syn_gpio_write(RELAY_PIN, SYN_GPIO_HIGH); }
void relay_off(void *ctx) { syn_gpio_write(RELAY_PIN, SYN_GPIO_LOW); }
void read_sensor(void *ctx) { *(int*)ctx = adc_read(); }

static const SYN_SeqStep steps[] = {
    { relay_on,     NULL,  0 },      // step 0: relay on, no delay
    { NULL,         NULL,  200 },     // step 1: wait 200ms
    { read_sensor,  &val,  0 },      // step 2: read sensor
    { relay_off,    NULL,  100 },     // step 3: relay off, then wait 100ms
};

SYN_Sequencer seq;
syn_seq_init(&seq, steps, 4);
syn_seq_start(&seq);

while (!syn_seq_is_done(&seq)) {
    syn_seq_update(&seq);
}

Public Types Documentation

typedef SYN_SeqAction

typedef void(* SYN_SeqAction) (void *ctx);

Action function called for each step.


typedef SYN_SeqCompleteCallback

Completion callback function signature.

typedef void(* SYN_SeqCompleteCallback) (struct SYN_Sequencer *seq, void *ctx);

Parameters:

  • seq Pointer to the completed sequencer context.
  • ctx User context associated with the completion handler.

enum SYN_SeqState

Action sequencer execution states.

enum SYN_SeqState {
    SYN_SEQ_IDLE = 0,
    SYN_SEQ_RUNNING = 1,
    SYN_SEQ_WAITING = 2,
    SYN_SEQ_DONE = 3
};


Public Functions Documentation

function syn_seq_init

Initialize a sequencer.

void syn_seq_init (
    SYN_Sequencer * seq,
    const SYN_SeqStep * steps,
    uint16_t count
) 

Parameters:

  • seq Sequencer instance.
  • steps Array of step descriptors (must persist).
  • count Number of steps.

function syn_seq_on_complete

Set completion callback.

void syn_seq_on_complete (
    SYN_Sequencer * seq,
    SYN_SeqCompleteCallback cb,
    void * ctx
) 

Parameters:

  • seq Sequencer instance.
  • cb Callback function invoked on sequence end.
  • ctx Callback context data pointer.

function syn_seq_set_loop

Enable looping (auto-restart on completion).

void syn_seq_set_loop (
    SYN_Sequencer * seq,
    bool loop
) 

Parameters:

  • seq Sequencer instance.
  • loop True to loop sequence indefinitely, false for single run.

function syn_seq_start

Start the sequence from the beginning.

void syn_seq_start (
    SYN_Sequencer * seq
) 

Parameters:

  • seq Sequencer instance.

function syn_seq_stop

Stop the sequence.

void syn_seq_stop (
    SYN_Sequencer * seq
) 

Parameters:

  • seq Sequencer instance.

function syn_seq_update

Update the sequencer — call from main loop.

bool syn_seq_update (
    SYN_Sequencer * seq
) 

Executes actions and manages delays non-blockingly.

Parameters:

  • seq Sequencer instance.

Returns:

true if the sequence completed this call.


Public Static Functions Documentation

function syn_seq_current_step

Get current step index.

static inline uint16_t syn_seq_current_step (
    const SYN_Sequencer * seq
) 

Parameters:

  • seq Sequencer instance.

Returns:

Index of the currently executing/waiting step.


function syn_seq_is_done

Check if done.

static inline bool syn_seq_is_done (
    const SYN_Sequencer * seq
) 

Parameters:

  • seq Sequencer instance.

Returns:

True if in IDLE or DONE state.


function syn_seq_loops

Get loop iteration count.

static inline uint16_t syn_seq_loops (
    const SYN_Sequencer * seq
) 

Parameters:

  • seq Sequencer instance.

Returns:

Number of times the sequence has finished (if looping is enabled).



The documentation for this class was generated from the following file src/syntropic/sched/syn_sequencer.h