TinyModem
Header-only software audio modem library
Loading...
Searching...
No Matches
tinymodem::FSKEncoder Class Reference

FSK modulator: converts the written characters into 16 bit PCM audio which is written to the defined output. The generated signal is compatible with minimodem –rx. More...

#include <FSKEncoder.h>

Inheritance diagram for tinymodem::FSKEncoder:
Collaboration diagram for tinymodem::FSKEncoder:

Public Member Functions

 FSKEncoder ()=default
 FSKEncoder (Print &out)
 FSKEncoder (audio_tools::SoundGenerator< int16_t > &generator)
 FSKEncoder (Print &out, audio_tools::SoundGenerator< int16_t > &generator)
ModemConfig defaultConfig ()
 Provides a default configuration for a 1200 baud Bell 202 modem.
void setAudioInfo (audio_tools::AudioInfo info) override
 Defines the sample rate and number of channels of the generated audio.
audio_tools::AudioInfo audioInfo () override
bool begin (ModemConfig config)
 Starts the processing with the indicated modem configuration.
bool begin () override
void end () override
size_t write (const uint8_t *data, size_t len) override
 Modulates the characters.
bool endTransmission (size_t silence_samples=0) override
bool writeIdle (size_t nsamples) override
 Sends the idle (mark) tone for the indicated number of samples.
bool isTransmitting () override
 true between the first character and endTransmission()
float symbolRate () override
 Bits per second.
size_t bitSamples ()
 Number of samples of one bit.
ModemConfig & config ()
const ModemConfig & activeConfig () const
 The active configuration with all derived values (e.g. frequencies).
 operator bool () override
Public Member Functions inherited from tinymodem::ModemEncoder
void setOutput (Print &out) override
void setGenerator (audio_tools::SoundGenerator< int16_t > &generator)
audio_tools::SoundGenerator< int16_t > & getGenerator ()
 Provides the active tone generator.
void writeSilence (size_t nsamples)
 Writes the indicated number of samples of silence.
void writeTone (float freq, size_t nsamples)
 Writes a tone for the indicated number of samples.
void flush ()
 Ends the transmission.
const char * mime () override

Protected Member Functions

float idleFreq ()
void startTransmission ()
void writeChar (uint8_t ch)
void transmitFrame (uint64_t bits, bool msb_first)
void tone (float freq, size_t nsamples)

Protected Attributes

ModemConfig cfg
ModemConfig active_cfg
AsciiCodec ascii
BaudotCodec baudot
DataCodec * p_codec = &ascii
size_t bit_nsamples = 0
int transmitting = 0
bool is_active = false
Protected Attributes inherited from tinymodem::ModemEncoder
ToneOutput tones

Detailed Description

FSK modulator: converts the written characters into 16 bit PCM audio which is written to the defined output. The generated signal is compatible with minimodem –rx.

The tones are produced by a SoundGenerator<int16_t>. By default this is a FSKToneGenerator, which reproduces minimodem's signal. You can replace it with setGenerator(): the generator must change the frequency immediately and keep the phase continuous in setFrequency() - e.g. the AudioTools FastIntSineGenerator, which needs no floating point and is a good choice for MCUs without FPU. FloatSineGenerator, FastSineGenerator and SineFromTable are not suited. The generator's amplitude is full scale: ModemConfig::volume is applied by the encoder.

A transmission starts with leader (mark) bits, followed by the optional sync bytes and the data frames. Call endTransmission() (or flush()) to send the trailer bits when there is no more data to send.

Constructor & Destructor Documentation

◆ FSKEncoder() [1/4]

tinymodem::FSKEncoder::FSKEncoder ( )
default

◆ FSKEncoder() [2/4]

tinymodem::FSKEncoder::FSKEncoder ( Print & out)
inline

◆ FSKEncoder() [3/4]

tinymodem::FSKEncoder::FSKEncoder ( audio_tools::SoundGenerator< int16_t > & generator)
inline

◆ FSKEncoder() [4/4]

tinymodem::FSKEncoder::FSKEncoder ( Print & out,
audio_tools::SoundGenerator< int16_t > & generator )
inline

Member Function Documentation

◆ activeConfig()

const ModemConfig & tinymodem::FSKEncoder::activeConfig ( ) const
inline

The active configuration with all derived values (e.g. frequencies).

◆ audioInfo()

audio_tools::AudioInfo tinymodem::FSKEncoder::audioInfo ( )
inlineoverride

◆ begin() [1/2]

bool tinymodem::FSKEncoder::begin ( )
inlineoverride

◆ begin() [2/2]

bool tinymodem::FSKEncoder::begin ( ModemConfig config)
inline

Starts the processing with the indicated modem configuration.

◆ bitSamples()

size_t tinymodem::FSKEncoder::bitSamples ( )
inline

Number of samples of one bit.

◆ config()

ModemConfig & tinymodem::FSKEncoder::config ( )
inline

The configuration which was provided in begin(): you can change it and call begin() again

◆ defaultConfig()

ModemConfig tinymodem::FSKEncoder::defaultConfig ( )
inline

Provides a default configuration for a 1200 baud Bell 202 modem.

◆ end()

void tinymodem::FSKEncoder::end ( )
inlineoverride

◆ endTransmission()

bool tinymodem::FSKEncoder::endTransmission ( size_t silence_samples = 0)
inlineoverridevirtual

Sends the trailer bits (and optional silence) if we are transmitting: returns true if a transmission was ended.

Implements tinymodem::ModemEncoder.

◆ idleFreq()

float tinymodem::FSKEncoder::idleFreq ( )
inlineprotected

◆ isTransmitting()

bool tinymodem::FSKEncoder::isTransmitting ( )
inlineoverridevirtual

true between the first character and endTransmission()

Implements tinymodem::ModemEncoder.

◆ operator bool()

tinymodem::FSKEncoder::operator bool ( )
inlineoverride

◆ setAudioInfo()

void tinymodem::FSKEncoder::setAudioInfo ( audio_tools::AudioInfo info)
inlineoverride

Defines the sample rate and number of channels of the generated audio.

◆ startTransmission()

void tinymodem::FSKEncoder::startTransmission ( )
inlineprotected

◆ symbolRate()

float tinymodem::FSKEncoder::symbolRate ( )
inlineoverridevirtual

Bits per second.

Implements tinymodem::ModemEncoder.

◆ tone()

void tinymodem::FSKEncoder::tone ( float freq,
size_t nsamples )
inlineprotected

◆ transmitFrame()

void tinymodem::FSKEncoder::transmitFrame ( uint64_t bits,
bool msb_first )
inlineprotected

◆ write()

size_t tinymodem::FSKEncoder::write ( const uint8_t * data,
size_t len )
inlineoverride

Modulates the characters.

◆ writeChar()

void tinymodem::FSKEncoder::writeChar ( uint8_t ch)
inlineprotected

◆ writeIdle()

bool tinymodem::FSKEncoder::writeIdle ( size_t nsamples)
inlineoverridevirtual

Sends the idle (mark) tone for the indicated number of samples.

Reimplemented from tinymodem::ModemEncoder.

Member Data Documentation

◆ active_cfg

ModemConfig tinymodem::FSKEncoder::active_cfg
protected

◆ ascii

AsciiCodec tinymodem::FSKEncoder::ascii
protected

◆ baudot

BaudotCodec tinymodem::FSKEncoder::baudot
protected

◆ bit_nsamples

size_t tinymodem::FSKEncoder::bit_nsamples = 0
protected

◆ cfg

ModemConfig tinymodem::FSKEncoder::cfg
protected

◆ is_active

bool tinymodem::FSKEncoder::is_active = false
protected

◆ p_codec

DataCodec* tinymodem::FSKEncoder::p_codec = &ascii
protected

◆ transmitting

int tinymodem::FSKEncoder::transmitting = 0
protected

The documentation for this class was generated from the following file: