1#ifndef _SSTVENC_SEQUENCE_H
2#define _SSTVENC_SEQUENCE_H
45#define SSTVENC_SEQ_STATE_INIT (0x00)
53#define SSTVENC_SEQ_STATE_BEGIN_SILENCE (0x10)
60#define SSTVENC_SEQ_STATE_GEN_SILENCE (0x17)
67#define SSTVENC_SEQ_STATE_GEN_INF_SILENCE (0x18)
79#define SSTVENC_SEQ_STATE_END_SILENCE (0x1f)
87#define SSTVENC_SEQ_STATE_BEGIN_TONE (0x20)
95#define SSTVENC_SEQ_STATE_GEN_TONE (0x27)
104#define SSTVENC_SEQ_STATE_GEN_INF_TONE (0x28)
115#define SSTVENC_SEQ_STATE_END_TONE (0x2f)
122#define SSTVENC_SEQ_STATE_BEGIN_CW (0x30)
129#define SSTVENC_SEQ_STATE_GEN_CW (0x37)
140#define SSTVENC_SEQ_STATE_END_CW (0x3f)
147#define SSTVENC_SEQ_STATE_BEGIN_IMAGE (0x40)
154#define SSTVENC_SEQ_STATE_GEN_IMAGE (0x47)
165#define SSTVENC_SEQ_STATE_END_IMAGE (0x4f)
170#define SSTVENC_SEQ_STATE_DONE (0xff)
190#define SSTVENC_SEQ_STEP_TYPE_END (0x00)
195#define SSTVENC_SEQ_STEP_TYPE_SET_TS_UNIT (0x10)
200#define SSTVENC_SEQ_STEP_TYPE_SET_REGISTER (0x20)
205#define SSTVENC_SEQ_STEP_TYPE_INC_REGISTER (0x22)
210#define SSTVENC_SEQ_STEP_TYPE_DEC_REGISTER (0x23)
215#define SSTVENC_SEQ_STEP_TYPE_MUL_REGISTER (0x24)
220#define SSTVENC_SEQ_STEP_TYPE_DIV_REGISTER (0x25)
226#define SSTVENC_SEQ_STEP_TYPE_IDEC_REGISTER (0x2b)
231#define SSTVENC_SEQ_STEP_TYPE_IDIV_REGISTER (0x2d)
236#define SSTVENC_SEQ_STEP_TYPE_EMIT_SILENCE (0x30)
241#define SSTVENC_SEQ_STEP_TYPE_EMIT_TONE (0x40)
246#define SSTVENC_SEQ_STEP_TYPE_EMIT_CW (0x50)
251#define SSTVENC_SEQ_STEP_TYPE_EMIT_IMAGE (0x60)
265#define SSTVENC_SEQ_REG_AMPLITUDE (0)
270#define SSTVENC_SEQ_REG_FREQUENCY (1)
275#define SSTVENC_SEQ_REG_PHASE (2)
280#define SSTVENC_SEQ_REG_PULSE_RISE (3)
285#define SSTVENC_SEQ_REG_PULSE_FALL (4)
290#define SSTVENC_SEQ_REG_DIT_PERIOD (5)
295#define SSTVENC_SEQ_NUM_REGS (5)
309#define SSTVENC_SEQ_SLOPE_NONE (0)
310#define SSTVENC_SEQ_SLOPE_RISING (1)
311#define SSTVENC_SEQ_SLOPE_FALLING (2)
312#define SSTVENC_SEQ_SLOPE_BOTH (3)
508 uint8_t reg,
double value);
519 uint8_t reg,
double value);
530 uint8_t reg,
double value);
542 uint8_t reg,
double value);
553 uint8_t reg,
double value);
600 double duration, uint8_t slopes);
623 const uint8_t* framebuffer,
648 const void* event_cb_ctx, uint32_t sample_rate);
687 double* buffer,
size_t buffer_sz);
#define SSTVENC_SEQ_NUM_REGS
sstvenc_sequencer_event_cb * event_cb
void sstvenc_sequencer_event_cb(struct sstvenc_sequencer *const enc)
void sstvenc_sequencer_step_dec_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
void sstvenc_sequencer_step_mul_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
const void * event_cb_ctx
void sstvenc_sequencer_step_tone(struct sstvenc_sequencer_step *const step, double duration, uint8_t slopes)
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_duration duration
const uint8_t * framebuffer
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_reg reg
union sstvenc_sequencer::sstvenc_sequencer_vars vars
void sstvenc_sequencer_step_inc_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
struct sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_silence silence
const struct sstvenc_mode * mode
void sstvenc_sequencer_step_div_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
void sstvenc_sequencer_step_set_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
void sstvenc_sequencer_step_end(struct sstvenc_sequencer_step *const step)
union sstvenc_sequencer_step::sstvenc_sequence_step_args args
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_cw cw
void sstvenc_sequencer_step_idiv_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
struct sstvenc_pulseshape ps
void sstvenc_sequencer_step_image(struct sstvenc_sequencer_step *const step, const struct sstvenc_mode *const mode, const uint8_t *framebuffer, const char *fsk_id)
const struct sstvenc_sequencer_step * steps
struct sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_tone tone
void sstvenc_sequencer_step_cw(struct sstvenc_sequencer_step *const step, const char *text)
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_ts_unit ts
void sstvenc_sequencer_step_set_timescale(struct sstvenc_sequencer_step *const step, uint8_t time_unit, _Bool convert)
void sstvenc_sequencer_step_idec_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
double regs[SSTVENC_SEQ_NUM_REGS]
void sstvenc_sequencer_step_silence(struct sstvenc_sequencer_step *const step, double duration)
size_t sstvenc_sequencer_fill_buffer(struct sstvenc_sequencer *const seq, double *buffer, size_t buffer_sz)
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_image image
void sstvenc_sequencer_advance(struct sstvenc_sequencer *const seq)
void sstvenc_sequencer_reset(struct sstvenc_sequencer *const seq)
struct sstvenc_oscillator osc
void sstvenc_sequencer_init(struct sstvenc_sequencer *const seq, const struct sstvenc_sequencer_step *steps, sstvenc_sequencer_event_cb *event_cb, const void *event_cb_ctx, uint32_t sample_rate)
void sstvenc_sequencer_compute(struct sstvenc_sequencer *const seq)