libsstvenc
Asynchronous Analogue SSTV encoder
|
Topics | |
Transmission sequencer states | |
Sequencer step types. | |
Sequencer registers. | |
Tone slopes | |
Typedefs | |
typedef void | sstvenc_sequencer_event_cb(struct sstvenc_sequencer *const enc) |
Functions | |
void | sstvenc_sequencer_step_set_timescale (struct sstvenc_sequencer_step *const step, uint8_t time_unit, _Bool convert) |
void | sstvenc_sequencer_step_set_reg (struct sstvenc_sequencer_step *const step, uint8_t reg, double value) |
void | sstvenc_sequencer_step_inc_reg (struct sstvenc_sequencer_step *const step, uint8_t reg, double value) |
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) |
void | sstvenc_sequencer_step_div_reg (struct sstvenc_sequencer_step *const step, uint8_t reg, double value) |
void | sstvenc_sequencer_step_idec_reg (struct sstvenc_sequencer_step *const step, uint8_t reg, double value) |
void | sstvenc_sequencer_step_idiv_reg (struct sstvenc_sequencer_step *const step, uint8_t reg, double value) |
void | sstvenc_sequencer_step_silence (struct sstvenc_sequencer_step *const step, double duration) |
void | sstvenc_sequencer_step_tone (struct sstvenc_sequencer_step *const step, double duration, uint8_t slopes) |
void | sstvenc_sequencer_step_cw (struct sstvenc_sequencer_step *const step, const char *text) |
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) |
void | sstvenc_sequencer_step_end (struct sstvenc_sequencer_step *const step) |
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_reset (struct sstvenc_sequencer *const seq) |
void | sstvenc_sequencer_advance (struct sstvenc_sequencer *const seq) |
void | sstvenc_sequencer_compute (struct sstvenc_sequencer *const seq) |
size_t | sstvenc_sequencer_fill_buffer (struct sstvenc_sequencer *const seq, double *buffer, size_t buffer_sz) |
static void | sstvenc_sequencer_step_update_reg (struct sstvenc_sequencer_step *const step, uint8_t type, uint8_t reg, double value) |
static void | sstvenc_sequencer_step_duration (struct sstvenc_sequencer_step *const step, uint8_t type, double duration) |
static void | sstvenc_sequencer_next_step (struct sstvenc_sequencer *const seq, _Bool notify) |
static void | sstvenc_sequencer_next_state (struct sstvenc_sequencer *const seq, uint8_t state, _Bool notify) |
static void | sstvenc_sequencer_exec_set_ts (struct sstvenc_sequencer *const seq, const struct sstvenc_sequencer_step *const step) |
static void | sstvenc_sequencer_exec_update_reg (struct sstvenc_sequencer *const seq, const struct sstvenc_sequencer_step *const step) |
static void | sstvenc_sequencer_begin_silence (struct sstvenc_sequencer *const seq, const struct sstvenc_sequencer_step *const step) |
static void | sstvenc_sequencer_begin_tone (struct sstvenc_sequencer *const seq, const struct sstvenc_sequencer_step *const step) |
static void | sstvenc_sequencer_begin_cw (struct sstvenc_sequencer *const seq, const struct sstvenc_sequencer_step *const step) |
static void | sstvenc_sequencer_begin_image (struct sstvenc_sequencer *const seq, const struct sstvenc_sequencer_step *const step) |
static void | sstvenc_sequencer_end (struct sstvenc_sequencer *const seq) |
static void | sstvenc_sequencer_exec_step (struct sstvenc_sequencer *const seq) |
This module aids in combining a SSTV (or in fact, multiple if desired) with arbitrary tone generation and the CW modulator to enable adding of CW IDs to meet regulatory requirements and to enable triggering of VOX circuits or SSTV repeaters.
struct sstvenc_sequencer |
SSTV transmission sequencer data structure. This stores a record of the sequence being transmitted and the current step.
Definition at line 333 of file sequence.h.
Data Fields | ||
---|---|---|
sstvenc_sequencer_event_cb * | event_cb |
Event call-back, called on each state transition |
const void * | event_cb_ctx |
Optional event callback context |
double | output |
Output sample |
double | regs[SSTVENC_SEQ_NUM_REGS] |
SSTV sequencer register parameters. The indices are |
uint32_t | sample_rate |
Sample rate in hertz. |
uint8_t | state |
Sequencer state machine state, see Transmission sequencer states |
uint16_t | step |
The current step being executed. This is an index into sstvenc_sequencer::steps. |
const struct sstvenc_sequencer_step * | steps |
The list of sequence steps to be carried out. |
uint8_t | time_unit |
Time scale unit of measure |
union sstvenc_sequencer_vars | vars |
union sstvenc_sequencer::sstvenc_sequencer_vars |
Sequencer state machine variables
Definition at line 347 of file sequence.h.
Data Fields | ||
---|---|---|
struct sstvenc_cw_mod | cw |
State machine for CW transmission states. |
struct sstvenc_sequencer_vars_silence | silence | |
struct sstvenc_mod | sstv |
State machine for SSTV transmission states. |
struct sstvenc_sequencer_vars_tone | tone |
struct sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_silence |
State machine logic for the "silence" states.
Definition at line 351 of file sequence.h.
Data Fields | ||
---|---|---|
uint32_t | remaining |
Number of samples remaining of silence |
struct sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_tone |
State machine for tone states.
Definition at line 359 of file sequence.h.
Data Fields | ||
---|---|---|
struct sstvenc_oscillator | osc |
Oscillator state machine |
struct sstvenc_pulseshape | ps |
Pulse Shaper state machine |
struct sstvenc_sequencer_step |
A sequencer step is a single instruction. Some instructions alter the current state of the state machine, others just adjust parameters.
Definition at line 404 of file sequence.h.
Data Fields | ||
---|---|---|
union sstvenc_sequence_step_args | args | |
uint8_t | type |
The type of sequencer step. See Sequencer step types. |
union sstvenc_sequencer_step::sstvenc_sequence_step_args |
Definition at line 405 of file sequence.h.
Data Fields | ||
---|---|---|
struct sstvenc_sequence_step_cw | cw | |
struct sstvenc_sequence_step_duration | duration | |
struct sstvenc_sequence_step_image | image | |
struct sstvenc_sequence_step_set_reg | reg | |
struct sstvenc_sequence_step_set_ts_unit | ts |
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_ts_unit |
Setting of the time-scale unit. sstvenc_sequencer_step::type is set to SSTVENC_SEQ_STEP_TYPE_SET_TS_UNIT.
Definition at line 410 of file sequence.h.
Data Fields | ||
---|---|---|
_Bool | convert |
Convert fields to the new unit? |
uint8_t | time_unit |
The new time-scale unit |
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_reg |
Set a register to a new value. sstvenc_sequencer_step::type is set to one of:
Definition at line 429 of file sequence.h.
Data Fields | ||
---|---|---|
uint8_t | reg |
The register being updated |
double | value |
The new register value / operand value |
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_duration |
Emit silence or a tone for the specified time period. sstvenc_sequencer_step::type is set to one of:
Definition at line 443 of file sequence.h.
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_cw |
Send a CW message. sstvenc_sequencer_step::type is set to SSTVENC_SEQ_STEP_TYPE_EMIT_CW.
Definition at line 463 of file sequence.h.
Data Fields | ||
---|---|---|
const char * | text |
The CW string to emit |
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_image |
Send a SSTV image. sstvenc_sequencer_step::type is set to SSTVENC_SEQ_STEP_TYPE_EMIT_IMAGE.
Definition at line 472 of file sequence.h.
Data Fields | ||
---|---|---|
const uint8_t * | framebuffer |
The image framebuffer |
const char * | fsk_id |
The FSK ID |
const struct sstvenc_mode * | mode |
The SSTV image mode to use for transmission |
typedef void sstvenc_sequencer_event_cb(struct sstvenc_sequencer *const enc) |
Callback routine for sequencer events. This is called at the start of each sequencer step, and finally at the end. The callback should not block the state machine for lengthy periods as this will cause delays in the transmission.
Definition at line 327 of file sequence.h.
void sstvenc_sequencer_advance | ( | struct sstvenc_sequencer *const | seq | ) |
Advance the state of the state machine when generating infinite tones or silence. This does nothing unless the state machine is in one of the following states:
Definition at line 373 of file sequence.c.
References sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_tone::ps, sstvenc_ps_advance(), SSTVENC_SEQ_STATE_END_SILENCE, SSTVENC_SEQ_STATE_GEN_INF_SILENCE, SSTVENC_SEQ_STATE_GEN_INF_TONE, sstvenc_sequencer_next_state(), sstvenc_sequencer_next_step(), sstvenc_sequencer::state, sstvenc_sequencer::sstvenc_sequencer_vars::tone, and sstvenc_sequencer::vars.
|
static |
Definition at line 289 of file sequence.c.
References sstvenc_sequencer_step::args, sstvenc_sequencer::sstvenc_sequencer_vars::cw, sstvenc_sequencer_step::sstvenc_sequence_step_args::cw, sstvenc_sequencer::regs, sstvenc_sequencer::sample_rate, sstvenc_cw_init(), SSTVENC_SEQ_REG_AMPLITUDE, SSTVENC_SEQ_REG_DIT_PERIOD, SSTVENC_SEQ_REG_FREQUENCY, SSTVENC_SEQ_REG_PULSE_RISE, SSTVENC_SEQ_STATE_BEGIN_CW, SSTVENC_SEQ_STATE_GEN_CW, sstvenc_sequencer_next_state(), sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_cw::text, sstvenc_sequencer::time_unit, and sstvenc_sequencer::vars.
Referenced by sstvenc_sequencer_exec_step().
|
static |
Definition at line 303 of file sequence.c.
References sstvenc_pulseshape::amplitude, sstvenc_sequencer_step::args, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_image::framebuffer, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_image::fsk_id, sstvenc_sequencer_step::sstvenc_sequence_step_args::image, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_image::mode, sstvenc_mod::ps, sstvenc_sequencer::regs, sstvenc_sequencer::sample_rate, sstvenc_sequencer::sstvenc_sequencer_vars::sstv, sstvenc_modulator_init(), SSTVENC_SEQ_REG_AMPLITUDE, SSTVENC_SEQ_REG_DIT_PERIOD, SSTVENC_SEQ_REG_PULSE_RISE, SSTVENC_SEQ_STATE_BEGIN_IMAGE, SSTVENC_SEQ_STATE_GEN_IMAGE, sstvenc_sequencer_next_state(), sstvenc_sequencer::time_unit, and sstvenc_sequencer::vars.
Referenced by sstvenc_sequencer_exec_step().
|
static |
Initialise the state machine for a run of silence.
Definition at line 231 of file sequence.c.
References sstvenc_sequencer_step::args, sstvenc_sequencer_step::sstvenc_sequence_step_args::duration, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_duration::duration, sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_silence::remaining, sstvenc_sequencer::sample_rate, sstvenc_sequencer::sstvenc_sequencer_vars::silence, SSTVENC_SEQ_STATE_BEGIN_SILENCE, SSTVENC_SEQ_STATE_GEN_INF_SILENCE, SSTVENC_SEQ_STATE_GEN_SILENCE, sstvenc_sequencer_next_state(), sstvenc_ts_unit_to_samples(), sstvenc_sequencer::time_unit, and sstvenc_sequencer::vars.
Referenced by sstvenc_sequencer_exec_step().
|
static |
Definition at line 249 of file sequence.c.
References sstvenc_sequencer_step::args, sstvenc_sequencer_step::sstvenc_sequence_step_args::duration, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_duration::duration, sstvenc_oscillator::offset, sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_tone::osc, sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_tone::ps, sstvenc_sequencer::regs, sstvenc_sequencer::sample_rate, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_duration::slopes, sstvenc_osc_init(), sstvenc_osc_set_frequency(), sstvenc_ps_init(), SSTVENC_SEQ_REG_AMPLITUDE, SSTVENC_SEQ_REG_FREQUENCY, SSTVENC_SEQ_REG_PHASE, SSTVENC_SEQ_REG_PULSE_FALL, SSTVENC_SEQ_REG_PULSE_RISE, SSTVENC_SEQ_SLOPE_FALLING, SSTVENC_SEQ_SLOPE_RISING, SSTVENC_SEQ_STATE_BEGIN_SILENCE, SSTVENC_SEQ_STATE_END_TONE, SSTVENC_SEQ_STATE_GEN_INF_TONE, SSTVENC_SEQ_STATE_GEN_TONE, sstvenc_sequencer_next_state(), sstvenc_sequencer::state, sstvenc_sequencer::time_unit, sstvenc_sequencer::sstvenc_sequencer_vars::tone, and sstvenc_sequencer::vars.
Referenced by sstvenc_sequencer_exec_step().
void sstvenc_sequencer_compute | ( | struct sstvenc_sequencer *const | seq | ) |
Compute the next sample to be emitted by the sequencer. The result will be stored in sstvenc_sequencer::output.
This should be called until sstvenc_sequencer::state reaches the value SSTVENC_SEQ_STATE_DONE.
Definition at line 388 of file sequence.c.
References sstvenc_oscillator::amplitude, sstvenc_sequencer::sstvenc_sequencer_vars::cw, sstvenc_mod::osc, sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_tone::osc, sstvenc_cw_mod::output, sstvenc_oscillator::output, sstvenc_pulseshape::output, sstvenc_sequencer::output, sstvenc_pulseshape::phase, sstvenc_mod::ps, sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_tone::ps, sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_silence::remaining, sstvenc_sequencer::sstvenc_sequencer_vars::silence, sstvenc_sequencer::sstvenc_sequencer_vars::sstv, sstvenc_cw_compute(), SSTVENC_CW_MOD_STATE_DONE, sstvenc_modulator_compute(), sstvenc_osc_compute(), sstvenc_ps_compute(), SSTVENC_PS_PHASE_DONE, SSTVENC_SEQ_STATE_BEGIN_CW, SSTVENC_SEQ_STATE_BEGIN_IMAGE, SSTVENC_SEQ_STATE_BEGIN_SILENCE, SSTVENC_SEQ_STATE_BEGIN_TONE, SSTVENC_SEQ_STATE_DONE, SSTVENC_SEQ_STATE_END_CW, SSTVENC_SEQ_STATE_END_IMAGE, SSTVENC_SEQ_STATE_END_SILENCE, SSTVENC_SEQ_STATE_END_TONE, SSTVENC_SEQ_STATE_GEN_CW, SSTVENC_SEQ_STATE_GEN_IMAGE, SSTVENC_SEQ_STATE_GEN_INF_SILENCE, SSTVENC_SEQ_STATE_GEN_INF_TONE, SSTVENC_SEQ_STATE_GEN_SILENCE, SSTVENC_SEQ_STATE_GEN_TONE, SSTVENC_SEQ_STATE_INIT, sstvenc_sequencer_exec_step(), sstvenc_sequencer_next_state(), sstvenc_cw_mod::state, sstvenc_sequencer::state, sstvenc_sequencer::sstvenc_sequencer_vars::tone, and sstvenc_sequencer::vars.
Referenced by sstvenc_sequencer_fill_buffer().
|
static |
Definition at line 320 of file sequence.c.
References SSTVENC_SEQ_STATE_DONE, and sstvenc_sequencer_next_state().
Referenced by sstvenc_sequencer_exec_step().
|
static |
Execute a SET_TS instruction.
Definition at line 166 of file sequence.c.
References sstvenc_sequencer_step::args, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_ts_unit::convert, sstvenc_sequencer::regs, SSTVENC_SEQ_NUM_REGS, sstvenc_sequencer_next_step(), sstvenc_ts_unit_scale(), sstvenc_sequencer::time_unit, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_ts_unit::time_unit, and sstvenc_sequencer_step::sstvenc_sequence_step_args::ts.
Referenced by sstvenc_sequencer_exec_step().
|
static |
Execute the step pointed to by sstvenc_sequencer::step.
Definition at line 327 of file sequence.c.
References SSTVENC_SEQ_STEP_TYPE_DEC_REGISTER, SSTVENC_SEQ_STEP_TYPE_DIV_REGISTER, SSTVENC_SEQ_STEP_TYPE_EMIT_CW, SSTVENC_SEQ_STEP_TYPE_EMIT_IMAGE, SSTVENC_SEQ_STEP_TYPE_EMIT_SILENCE, SSTVENC_SEQ_STEP_TYPE_EMIT_TONE, SSTVENC_SEQ_STEP_TYPE_END, SSTVENC_SEQ_STEP_TYPE_IDEC_REGISTER, SSTVENC_SEQ_STEP_TYPE_IDIV_REGISTER, SSTVENC_SEQ_STEP_TYPE_INC_REGISTER, SSTVENC_SEQ_STEP_TYPE_MUL_REGISTER, SSTVENC_SEQ_STEP_TYPE_SET_REGISTER, SSTVENC_SEQ_STEP_TYPE_SET_TS_UNIT, sstvenc_sequencer_begin_cw(), sstvenc_sequencer_begin_image(), sstvenc_sequencer_begin_silence(), sstvenc_sequencer_begin_tone(), sstvenc_sequencer_end(), sstvenc_sequencer_exec_set_ts(), sstvenc_sequencer_exec_update_reg(), sstvenc_sequencer::step, sstvenc_sequencer::steps, and sstvenc_sequencer_step::type.
Referenced by sstvenc_sequencer_compute().
|
static |
Execute a register manipulation instruction.
Definition at line 192 of file sequence.c.
References sstvenc_sequencer_step::args, sstvenc_sequencer_step::sstvenc_sequence_step_args::reg, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_reg::reg, sstvenc_sequencer::regs, SSTVENC_SEQ_NUM_REGS, SSTVENC_SEQ_STEP_TYPE_DEC_REGISTER, SSTVENC_SEQ_STEP_TYPE_DIV_REGISTER, SSTVENC_SEQ_STEP_TYPE_IDEC_REGISTER, SSTVENC_SEQ_STEP_TYPE_IDIV_REGISTER, SSTVENC_SEQ_STEP_TYPE_INC_REGISTER, SSTVENC_SEQ_STEP_TYPE_MUL_REGISTER, SSTVENC_SEQ_STEP_TYPE_SET_REGISTER, sstvenc_sequencer_next_step(), sstvenc_sequencer_step::type, and sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_reg::value.
Referenced by sstvenc_sequencer_exec_step().
size_t sstvenc_sequencer_fill_buffer | ( | struct sstvenc_sequencer *const | seq, |
double * | buffer, | ||
size_t | buffer_sz ) |
Fill the given buffer with audio samples from the sequencer. Stop if we run out of buffer space or if the sequencer state machine finishes. Return the number of samples generated.
[in,out] | seq | Sequencer state machine to pull samples from. |
[out] | buffer | Audio buffer to write samples to. |
[in] | buffer_sz | Size of the audio buffer in samples. |
Definition at line 453 of file sequence.c.
References sstvenc_sequencer::output, SSTVENC_SEQ_STATE_DONE, sstvenc_sequencer_compute(), and sstvenc_sequencer::state.
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 ) |
Initialise the sequencer with the given sequencer steps.
[in,out] | seq | Sequencer to initialise |
[in] | steps | Sequencer steps, the last step MUST have sstvenc_sequence_step#type set to SSTVENC_SEQ_STEP_TYPE_END. |
[in] | event_cb | Optional event callback, set to NULL for no callback. |
[in] | event_cb_ctx | Optional event callback context. |
[in] | sample_rate | Sample rate in hertz. |
Definition at line 125 of file sequence.c.
References sstvenc_sequencer::event_cb, sstvenc_sequencer::event_cb_ctx, sstvenc_sequencer_reset(), and sstvenc_sequencer::steps.
|
static |
Enter a new state in the state machine. Optionally call the callback routine if it is defined.
Definition at line 152 of file sequence.c.
References sstvenc_sequencer::event_cb, and sstvenc_sequencer::state.
Referenced by sstvenc_sequencer_advance(), sstvenc_sequencer_begin_cw(), sstvenc_sequencer_begin_image(), sstvenc_sequencer_begin_silence(), sstvenc_sequencer_begin_tone(), sstvenc_sequencer_compute(), and sstvenc_sequencer_end().
|
static |
Advance to the next step in the sequence. Optionally call the callback routine if it is defined.
Definition at line 139 of file sequence.c.
References sstvenc_sequencer::event_cb, and sstvenc_sequencer::step.
Referenced by sstvenc_sequencer_advance(), sstvenc_sequencer_exec_set_ts(), and sstvenc_sequencer_exec_update_reg().
void sstvenc_sequencer_reset | ( | struct sstvenc_sequencer *const | seq | ) |
Reset the state machine back to the initial state.
Definition at line 361 of file sequence.c.
References sstvenc_sequencer::regs, SSTVENC_SEQ_REG_AMPLITUDE, SSTVENC_SEQ_REG_DIT_PERIOD, SSTVENC_SEQ_REG_FREQUENCY, SSTVENC_SEQ_REG_PHASE, SSTVENC_SEQ_REG_PULSE_FALL, SSTVENC_SEQ_REG_PULSE_RISE, SSTVENC_SEQ_STATE_INIT, SSTVENC_TS_UNIT_SECONDS, sstvenc_sequencer::state, sstvenc_sequencer::step, and sstvenc_sequencer::time_unit.
Referenced by sstvenc_sequencer_init().
void sstvenc_sequencer_step_cw | ( | struct sstvenc_sequencer_step *const | step, |
const char * | text ) |
Configure a step that emits CW text.
[out] | step | Sequencer step |
[in] | text | The CW text to emit. |
Definition at line 105 of file sequence.c.
References sstvenc_sequencer_step::args, sstvenc_sequencer_step::sstvenc_sequence_step_args::cw, SSTVENC_SEQ_STEP_TYPE_EMIT_CW, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_cw::text, and sstvenc_sequencer_step::type.
void sstvenc_sequencer_step_dec_reg | ( | struct sstvenc_sequencer_step *const | step, |
uint8_t | reg, | ||
double | value ) |
Configure a step that sets the register to old_value - value
.
[out] | step | Sequencer step |
[in] | reg | Register to adjust (see Sequencer registers.) |
[in] | value | Amount to subtract from the register |
Definition at line 49 of file sequence.c.
References SSTVENC_SEQ_STEP_TYPE_DEC_REGISTER, and sstvenc_sequencer_step_update_reg().
void sstvenc_sequencer_step_div_reg | ( | struct sstvenc_sequencer_step *const | step, |
uint8_t | reg, | ||
double | value ) |
Configure a step that sets the register to old_value / value
.
[out] | step | Sequencer step |
[in] | reg | Register to adjust (see Sequencer registers.) |
[in] | value | Amount to divide the register value by |
Definition at line 61 of file sequence.c.
References SSTVENC_SEQ_STEP_TYPE_DIV_REGISTER, and sstvenc_sequencer_step_update_reg().
|
static |
Configure a sequencer step that sets up an operation for a given duration.
[out] | step | Sequencer step |
[in] | duration | Operation duration |
Definition at line 86 of file sequence.c.
References sstvenc_sequencer_step::args, sstvenc_sequencer_step::sstvenc_sequence_step_args::duration, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_duration::duration, and sstvenc_sequencer_step::type.
Referenced by sstvenc_sequencer_step_silence(), and sstvenc_sequencer_step_tone().
void sstvenc_sequencer_step_end | ( | struct sstvenc_sequencer_step *const | step | ) |
Configure the final step in the sequence.
[out] | step | Sequencer step |
Definition at line 121 of file sequence.c.
References SSTVENC_SEQ_STEP_TYPE_END, and sstvenc_sequencer_step::type.
void sstvenc_sequencer_step_idec_reg | ( | struct sstvenc_sequencer_step *const | step, |
uint8_t | reg, | ||
double | value ) |
Configure a step that sets the register to value - old_value
.
[out] | step | Sequencer step |
[in] | reg | Register to adjust (see Sequencer registers.) |
[in] | value | Amount to add to the register value |
Definition at line 67 of file sequence.c.
References SSTVENC_SEQ_STEP_TYPE_IDEC_REGISTER, and sstvenc_sequencer_step_update_reg().
void sstvenc_sequencer_step_idiv_reg | ( | struct sstvenc_sequencer_step *const | step, |
uint8_t | reg, | ||
double | value ) |
Configure a step that sets the register to value / old_value
.
[out] | step | Sequencer step |
[in] | reg | Register to adjust (see Sequencer registers.) |
[in] | value | Amount to subtract from the register |
Definition at line 73 of file sequence.c.
References SSTVENC_SEQ_STEP_TYPE_IDIV_REGISTER, and sstvenc_sequencer_step_update_reg().
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 ) |
Configure a step that emits a SSTV image.
[out] | step | Sequencer step |
[in] | mode | The SSTV mode to use. |
[in] | framebuffer | The framebuffer containing the SSTV image. The image must be in the correct colourspace format and dimensions for the SSTV mode selected. |
Definition at line 111 of file sequence.c.
References sstvenc_sequencer_step::args, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_image::framebuffer, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_image::fsk_id, sstvenc_sequencer_step::sstvenc_sequence_step_args::image, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_image::mode, SSTVENC_SEQ_STEP_TYPE_EMIT_IMAGE, and sstvenc_sequencer_step::type.
void sstvenc_sequencer_step_inc_reg | ( | struct sstvenc_sequencer_step *const | step, |
uint8_t | reg, | ||
double | value ) |
Configure a step that sets the register to old_value + value
.
[out] | step | Sequencer step |
[in] | reg | Register to adjust (see Sequencer registers.) |
[in] | value | Amount to add to the register value |
Definition at line 43 of file sequence.c.
References SSTVENC_SEQ_STEP_TYPE_INC_REGISTER, and sstvenc_sequencer_step_update_reg().
void sstvenc_sequencer_step_mul_reg | ( | struct sstvenc_sequencer_step *const | step, |
uint8_t | reg, | ||
double | value ) |
Configure a step that sets the register to old_value * value
.
[out] | step | Sequencer step |
[in] | reg | Register to adjust (see Sequencer registers.) |
[in] | value | Amount to multiply the register value by |
Definition at line 55 of file sequence.c.
References SSTVENC_SEQ_STEP_TYPE_MUL_REGISTER, and sstvenc_sequencer_step_update_reg().
void sstvenc_sequencer_step_set_reg | ( | struct sstvenc_sequencer_step *const | step, |
uint8_t | reg, | ||
double | value ) |
Configure a step that sets a register to a new value.
[out] | step | Sequencer step |
[in] | reg | Register to adjust (see Sequencer registers.) |
[in] | value | New register value |
Definition at line 37 of file sequence.c.
References SSTVENC_SEQ_STEP_TYPE_SET_REGISTER, and sstvenc_sequencer_step_update_reg().
void sstvenc_sequencer_step_set_timescale | ( | struct sstvenc_sequencer_step *const | step, |
uint8_t | time_unit, | ||
_Bool | convert ) |
Configure a step that sets the timescale unit.
[out] | step | Sequencer step |
[in] | time_unit | Timescale unit |
[in] | convert | Convert existing registers? |
Definition at line 13 of file sequence.c.
References sstvenc_sequencer_step::args, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_ts_unit::convert, SSTVENC_SEQ_STEP_TYPE_SET_TS_UNIT, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_ts_unit::time_unit, sstvenc_sequencer_step::sstvenc_sequence_step_args::ts, and sstvenc_sequencer_step::type.
void sstvenc_sequencer_step_silence | ( | struct sstvenc_sequencer_step *const | step, |
double | duration ) |
Configure a step that emits silence.
[out] | step | Sequencer step |
[in] | duration | The length of time to emit silence. Use INFINITY for indefinite time periods. |
Definition at line 92 of file sequence.c.
References SSTVENC_SEQ_STEP_TYPE_EMIT_SILENCE, and sstvenc_sequencer_step_duration().
void sstvenc_sequencer_step_tone | ( | struct sstvenc_sequencer_step *const | step, |
double | duration, | ||
uint8_t | slopes ) |
Configure a step that emits a tone. The frequency and phase information is set by whatever frequency is configured in the frequency register.
[out] | step | Sequencer step |
[in] | duration | The length of time to emit a tone. Use INFINITY for indefinite time |
[in] | slopes | Which slopes to enable (see Tone slopes) periods. |
Definition at line 98 of file sequence.c.
References sstvenc_sequencer_step::args, sstvenc_sequencer_step::sstvenc_sequence_step_args::duration, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_duration::slopes, SSTVENC_SEQ_STEP_TYPE_EMIT_TONE, and sstvenc_sequencer_step_duration().
|
static |
Configure a step that manipulates a register.
[out] | step | Sequencer step |
[in] | type | Instruction type |
[in] | reg | Register to adjust (see Sequencer registers.) |
[in] | value | New register value |
Definition at line 30 of file sequence.c.
References sstvenc_sequencer_step::args, sstvenc_sequencer_step::sstvenc_sequence_step_args::reg, sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_reg::reg, sstvenc_sequencer_step::type, and sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_reg::value.
Referenced by sstvenc_sequencer_step_dec_reg(), sstvenc_sequencer_step_div_reg(), sstvenc_sequencer_step_idec_reg(), sstvenc_sequencer_step_idiv_reg(), sstvenc_sequencer_step_inc_reg(), sstvenc_sequencer_step_mul_reg(), and sstvenc_sequencer_step_set_reg().
union sstvenc_sequencer_step::sstvenc_sequence_step_args sstvenc_sequencer_step::args |
Referenced by sstvenc_sequencer_begin_cw(), sstvenc_sequencer_begin_image(), sstvenc_sequencer_begin_silence(), sstvenc_sequencer_begin_tone(), sstvenc_sequencer_exec_set_ts(), sstvenc_sequencer_exec_update_reg(), sstvenc_sequencer_step_cw(), sstvenc_sequencer_step_duration(), sstvenc_sequencer_step_image(), sstvenc_sequencer_step_set_timescale(), sstvenc_sequencer_step_tone(), and sstvenc_sequencer_step_update_reg().
_Bool sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_ts_unit::convert |
Convert fields to the new unit?
Definition at line 414 of file sequence.h.
Referenced by sstvenc_sequencer_exec_set_ts(), and sstvenc_sequencer_step_set_timescale().
struct sstvenc_cw_mod sstvenc_sequencer::sstvenc_sequencer_vars::cw |
State machine for CW transmission states.
Definition at line 369 of file sequence.h.
Referenced by sstvenc_sequencer_begin_cw(), and sstvenc_sequencer_compute().
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_cw sstvenc_sequencer_step::sstvenc_sequence_step_args::cw |
Referenced by sstvenc_sequencer_begin_cw(), and sstvenc_sequencer_step_cw().
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_duration sstvenc_sequencer_step::sstvenc_sequence_step_args::duration |
double sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_duration::duration |
The number of time units (set by sstvenc_sequencer_regs#time_unit) that we should be emitting silence or a tone for. Set to INFINITY for an infinite time period.
Definition at line 450 of file sequence.h.
Referenced by sstvenc_sequencer_begin_silence(), sstvenc_sequencer_begin_tone(), and sstvenc_sequencer_step_duration().
sstvenc_sequencer_event_cb* sstvenc_sequencer::event_cb |
Event call-back, called on each state transition
Definition at line 338 of file sequence.h.
Referenced by sstvenc_sequencer_init(), sstvenc_sequencer_next_state(), and sstvenc_sequencer_next_step().
const void* sstvenc_sequencer::event_cb_ctx |
Optional event callback context
Definition at line 341 of file sequence.h.
Referenced by sstvenc_sequencer_init().
const uint8_t* sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_image::framebuffer |
The image framebuffer
Definition at line 476 of file sequence.h.
Referenced by sstvenc_sequencer_begin_image(), and sstvenc_sequencer_step_image().
const char* sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_image::fsk_id |
The FSK ID
Definition at line 478 of file sequence.h.
Referenced by sstvenc_sequencer_begin_image(), and sstvenc_sequencer_step_image().
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_image sstvenc_sequencer_step::sstvenc_sequence_step_args::image |
Referenced by sstvenc_sequencer_begin_image(), and sstvenc_sequencer_step_image().
const struct sstvenc_mode* sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_image::mode |
The SSTV image mode to use for transmission
Definition at line 474 of file sequence.h.
Referenced by sstvenc_sequencer_begin_image(), and sstvenc_sequencer_step_image().
struct sstvenc_oscillator sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_tone::osc |
Oscillator state machine
Definition at line 361 of file sequence.h.
Referenced by sstvenc_sequencer_begin_tone(), and sstvenc_sequencer_compute().
double sstvenc_sequencer::output |
Output sample
Definition at line 344 of file sequence.h.
Referenced by sstvenc_sequencer_compute(), and sstvenc_sequencer_fill_buffer().
struct sstvenc_pulseshape sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_tone::ps |
Pulse Shaper state machine
Definition at line 363 of file sequence.h.
Referenced by sstvenc_sequencer_advance(), sstvenc_sequencer_begin_tone(), and sstvenc_sequencer_compute().
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_reg sstvenc_sequencer_step::sstvenc_sequence_step_args::reg |
Referenced by sstvenc_sequencer_exec_update_reg(), and sstvenc_sequencer_step_update_reg().
uint8_t sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_reg::reg |
The register being updated
Definition at line 433 of file sequence.h.
Referenced by sstvenc_sequencer_exec_update_reg(), and sstvenc_sequencer_step_update_reg().
double sstvenc_sequencer::regs[SSTVENC_SEQ_NUM_REGS] |
SSTV sequencer register parameters. The indices are
Definition at line 380 of file sequence.h.
Referenced by sstvenc_sequencer_begin_cw(), sstvenc_sequencer_begin_image(), sstvenc_sequencer_begin_tone(), sstvenc_sequencer_exec_set_ts(), sstvenc_sequencer_exec_update_reg(), and sstvenc_sequencer_reset().
uint32_t sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_silence::remaining |
Number of samples remaining of silence
Definition at line 353 of file sequence.h.
Referenced by sstvenc_sequencer_begin_silence(), and sstvenc_sequencer_compute().
uint32_t sstvenc_sequencer::sample_rate |
Sample rate in hertz.
Definition at line 385 of file sequence.h.
Referenced by sstvenc_sequencer_begin_cw(), sstvenc_sequencer_begin_image(), sstvenc_sequencer_begin_silence(), and sstvenc_sequencer_begin_tone().
struct sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_silence sstvenc_sequencer::sstvenc_sequencer_vars::silence |
Referenced by sstvenc_sequencer_begin_silence(), and sstvenc_sequencer_compute().
uint8_t sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_duration::slopes |
Slopes enabled. Whether or not we enable the rising or falling slopes on the pulse. Not used for silences.
Definition at line 456 of file sequence.h.
Referenced by sstvenc_sequencer_begin_tone(), and sstvenc_sequencer_step_tone().
struct sstvenc_mod sstvenc_sequencer::sstvenc_sequencer_vars::sstv |
State machine for SSTV transmission states.
Definition at line 374 of file sequence.h.
Referenced by sstvenc_sequencer_begin_image(), and sstvenc_sequencer_compute().
uint8_t sstvenc_sequencer::state |
Sequencer state machine state, see Transmission sequencer states
Definition at line 397 of file sequence.h.
Referenced by sstvenc_sequencer_advance(), sstvenc_sequencer_begin_tone(), sstvenc_sequencer_compute(), sstvenc_sequencer_fill_buffer(), sstvenc_sequencer_next_state(), and sstvenc_sequencer_reset().
uint16_t sstvenc_sequencer::step |
The current step being executed. This is an index into sstvenc_sequencer::steps.
Definition at line 391 of file sequence.h.
Referenced by sstvenc_sequencer_exec_step(), sstvenc_sequencer_next_step(), and sstvenc_sequencer_reset().
const struct sstvenc_sequencer_step* sstvenc_sequencer::steps |
The list of sequence steps to be carried out.
Definition at line 335 of file sequence.h.
Referenced by sstvenc_sequencer_exec_step(), and sstvenc_sequencer_init().
const char* sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_cw::text |
The CW string to emit
Definition at line 465 of file sequence.h.
Referenced by sstvenc_sequencer_begin_cw(), and sstvenc_sequencer_step_cw().
uint8_t sstvenc_sequencer::time_unit |
Time scale unit of measure
Definition at line 394 of file sequence.h.
Referenced by sstvenc_sequencer_begin_cw(), sstvenc_sequencer_begin_image(), sstvenc_sequencer_begin_silence(), sstvenc_sequencer_begin_tone(), sstvenc_sequencer_exec_set_ts(), and sstvenc_sequencer_reset().
uint8_t sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_ts_unit::time_unit |
The new time-scale unit
Definition at line 412 of file sequence.h.
Referenced by sstvenc_sequencer_exec_set_ts(), and sstvenc_sequencer_step_set_timescale().
struct sstvenc_sequencer::sstvenc_sequencer_vars::sstvenc_sequencer_vars_tone sstvenc_sequencer::sstvenc_sequencer_vars::tone |
Referenced by sstvenc_sequencer_advance(), sstvenc_sequencer_begin_tone(), and sstvenc_sequencer_compute().
struct sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_ts_unit sstvenc_sequencer_step::sstvenc_sequence_step_args::ts |
Referenced by sstvenc_sequencer_exec_set_ts(), and sstvenc_sequencer_step_set_timescale().
uint8_t sstvenc_sequencer_step::type |
The type of sequencer step. See Sequencer step types.
Definition at line 485 of file sequence.h.
Referenced by sstvenc_sequencer_exec_step(), sstvenc_sequencer_exec_update_reg(), sstvenc_sequencer_step_cw(), sstvenc_sequencer_step_duration(), sstvenc_sequencer_step_end(), sstvenc_sequencer_step_image(), sstvenc_sequencer_step_set_timescale(), and sstvenc_sequencer_step_update_reg().
double sstvenc_sequencer_step::sstvenc_sequence_step_args::sstvenc_sequence_step_set_reg::value |
The new register value / operand value
Definition at line 431 of file sequence.h.
Referenced by sstvenc_sequencer_exec_update_reg(), and sstvenc_sequencer_step_update_reg().
union sstvenc_sequencer::sstvenc_sequencer_vars sstvenc_sequencer::vars |