libsstvenc
Asynchronous Analogue SSTV encoder
Loading...
Searching...
No Matches
sequence.h
Go to the documentation of this file.
1#ifndef _SSTVENC_SEQUENCE_H
2#define _SSTVENC_SEQUENCE_H
3
14/*
15 * © Stuart Longland VK4MSL
16 * SPDX-License-Identifier: MIT
17 */
18
19#include <libsstvenc/cw.h>
20#include <libsstvenc/sstvmod.h>
21#include <stdbool.h>
22#include <stdint.h>
23#include <string.h>
24
45#define SSTVENC_SEQ_STATE_INIT (0x00)
46
53#define SSTVENC_SEQ_STATE_BEGIN_SILENCE (0x10)
54
60#define SSTVENC_SEQ_STATE_GEN_SILENCE (0x17)
61
67#define SSTVENC_SEQ_STATE_GEN_INF_SILENCE (0x18)
68
79#define SSTVENC_SEQ_STATE_END_SILENCE (0x1f)
80
87#define SSTVENC_SEQ_STATE_BEGIN_TONE (0x20)
88
95#define SSTVENC_SEQ_STATE_GEN_TONE (0x27)
96
104#define SSTVENC_SEQ_STATE_GEN_INF_TONE (0x28)
105
115#define SSTVENC_SEQ_STATE_END_TONE (0x2f)
116
122#define SSTVENC_SEQ_STATE_BEGIN_CW (0x30)
123
129#define SSTVENC_SEQ_STATE_GEN_CW (0x37)
130
140#define SSTVENC_SEQ_STATE_END_CW (0x3f)
141
147#define SSTVENC_SEQ_STATE_BEGIN_IMAGE (0x40)
148
154#define SSTVENC_SEQ_STATE_GEN_IMAGE (0x47)
155
165#define SSTVENC_SEQ_STATE_END_IMAGE (0x4f)
166
170#define SSTVENC_SEQ_STATE_DONE (0xff)
171
190#define SSTVENC_SEQ_STEP_TYPE_END (0x00)
191
195#define SSTVENC_SEQ_STEP_TYPE_SET_TS_UNIT (0x10)
196
200#define SSTVENC_SEQ_STEP_TYPE_SET_REGISTER (0x20)
201
205#define SSTVENC_SEQ_STEP_TYPE_INC_REGISTER (0x22)
206
210#define SSTVENC_SEQ_STEP_TYPE_DEC_REGISTER (0x23)
211
215#define SSTVENC_SEQ_STEP_TYPE_MUL_REGISTER (0x24)
216
220#define SSTVENC_SEQ_STEP_TYPE_DIV_REGISTER (0x25)
221
226#define SSTVENC_SEQ_STEP_TYPE_IDEC_REGISTER (0x2b)
227
231#define SSTVENC_SEQ_STEP_TYPE_IDIV_REGISTER (0x2d)
232
236#define SSTVENC_SEQ_STEP_TYPE_EMIT_SILENCE (0x30)
237
241#define SSTVENC_SEQ_STEP_TYPE_EMIT_TONE (0x40)
242
246#define SSTVENC_SEQ_STEP_TYPE_EMIT_CW (0x50)
247
251#define SSTVENC_SEQ_STEP_TYPE_EMIT_IMAGE (0x60)
252
265#define SSTVENC_SEQ_REG_AMPLITUDE (0)
266
270#define SSTVENC_SEQ_REG_FREQUENCY (1)
271
275#define SSTVENC_SEQ_REG_PHASE (2)
276
280#define SSTVENC_SEQ_REG_PULSE_RISE (3)
281
285#define SSTVENC_SEQ_REG_PULSE_FALL (4)
286
290#define SSTVENC_SEQ_REG_DIT_PERIOD (5)
291
295#define SSTVENC_SEQ_NUM_REGS (5)
296
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)
318struct sstvenc_sequencer;
320
327typedef void sstvenc_sequencer_event_cb(struct sstvenc_sequencer* const enc);
328
399
487
496 struct sstvenc_sequencer_step* const step, uint8_t time_unit,
497 _Bool convert);
498
508 uint8_t reg, double value);
509
519 uint8_t reg, double value);
520
530 uint8_t reg, double value);
531
542 uint8_t reg, double value);
543
553 uint8_t reg, double value);
554
564 struct sstvenc_sequencer_step* const step, uint8_t reg, double value);
565
575 struct sstvenc_sequencer_step* const step, uint8_t reg, double value);
576
586 double duration);
587
600 double duration, uint8_t slopes);
601
609 const char* text);
610
622 const struct sstvenc_mode* const mode,
623 const uint8_t* framebuffer,
624 const char* fsk_id);
625
632
645void sstvenc_sequencer_init(struct sstvenc_sequencer* const seq,
646 const struct sstvenc_sequencer_step* steps,
648 const void* event_cb_ctx, uint32_t sample_rate);
649
653void sstvenc_sequencer_reset(struct sstvenc_sequencer* const seq);
654
663void sstvenc_sequencer_advance(struct sstvenc_sequencer* const seq);
664
672void sstvenc_sequencer_compute(struct sstvenc_sequencer* const seq);
673
686size_t sstvenc_sequencer_fill_buffer(struct sstvenc_sequencer* const seq,
687 double* buffer, size_t buffer_sz);
688
689#endif
#define SSTVENC_SEQ_NUM_REGS
Definition sequence.h:295
sstvenc_sequencer_event_cb * event_cb
Definition sequence.h:338
void sstvenc_sequencer_event_cb(struct sstvenc_sequencer *const enc)
Definition sequence.h:327
void sstvenc_sequencer_step_dec_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
Definition sequence.c:49
void sstvenc_sequencer_step_mul_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
Definition sequence.c:55
const void * event_cb_ctx
Definition sequence.h:341
void sstvenc_sequencer_step_tone(struct sstvenc_sequencer_step *const step, double duration, uint8_t slopes)
Definition sequence.c:98
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_duration duration
uint32_t sample_rate
Definition sequence.h:385
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)
Definition sequence.c:43
uint8_t time_unit
Definition sequence.h:394
struct sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_silence silence
void sstvenc_sequencer_step_div_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
Definition sequence.c:61
void sstvenc_sequencer_step_set_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
Definition sequence.c:37
void sstvenc_sequencer_step_end(struct sstvenc_sequencer_step *const step)
Definition sequence.c:121
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)
Definition sequence.c:73
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)
Definition sequence.c:111
const struct sstvenc_sequencer_step * steps
Definition sequence.h:335
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)
Definition sequence.c:105
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)
Definition sequence.c:13
void sstvenc_sequencer_step_idec_reg(struct sstvenc_sequencer_step *const step, uint8_t reg, double value)
Definition sequence.c:67
double regs[SSTVENC_SEQ_NUM_REGS]
Definition sequence.h:380
void sstvenc_sequencer_step_silence(struct sstvenc_sequencer_step *const step, double duration)
Definition sequence.c:92
size_t sstvenc_sequencer_fill_buffer(struct sstvenc_sequencer *const seq, double *buffer, size_t buffer_sz)
Definition sequence.c:453
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_image image
void sstvenc_sequencer_advance(struct sstvenc_sequencer *const seq)
Definition sequence.c:373
void sstvenc_sequencer_reset(struct sstvenc_sequencer *const seq)
Definition sequence.c:361
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)
Definition sequence.c:125
void sstvenc_sequencer_compute(struct sstvenc_sequencer *const seq)
Definition sequence.c:388