TinyModem
Header-only software audio modem library
Loading...
Searching...
No Matches
tinymodem::BasicModemStream< Encoder, Decoder, Config > Class Template Reference

Arduino Stream API for a modem (encoder and decoder): the written characters are modulated to the audio output and the audio input is demodulated into characters that can be read. You can use only the output (transmit only), only the input (receive only) or both. More...

#include <ModemStream.h>

Inheritance diagram for tinymodem::BasicModemStream< Encoder, Decoder, Config >:
Collaboration diagram for tinymodem::BasicModemStream< Encoder, Decoder, Config >:

Public Types

using ConfigType = Config

Public Member Functions

 BasicModemStream ()=default
 BasicModemStream (Print &audio_out)
 transmit only
 BasicModemStream (Print &audio_out, Stream &audio_in)
 transmit and receive with separate output and input
 BasicModemStream (Stream &audio, audio_tools::RxTxMode mode)
void setOutput (Print &audio_out)
 Defines the audio output (transmitter).
void setInput (Stream &audio_in)
 Defines the audio input (receiver).
void setStatusOutput (Print &out)
 Defines the output for the ### CARRIER / ### NOCARRIER messages.
Config defaultConfig ()
bool begin (Config cfg, int rx_buffer_size=256)
void end ()
size_t write (uint8_t ch) override
size_t write (const uint8_t *data, size_t len) override
void flush () override
 Sends the trailer: call this at the end of a message.
int available () override
int read () override
int peek () override
size_t readBytes (uint8_t *data, size_t len)
 Reads the available data (does not wait for more data).
size_t readBytes (char *data, size_t len)
size_t update ()
bool isCarrier ()
 true while a carrier is detected
Encoder & getEncoder ()
Decoder & getDecoder ()

Protected Types

using ReceiveQueue = ByteQueue

Protected Member Functions

size_t readInput ()
 Reads the available audio input and feeds it to the decoder.

Protected Attributes

Print * p_audio_out = nullptr
Stream * p_audio_in = nullptr
Encoder encoder
Decoder decoder
ReceiveQueue rx_queue
int rx_limit = 256
uint8_t copy_buffer [256]

Detailed Description

template<class Encoder, class Decoder, class Config>
class tinymodem::BasicModemStream< Encoder, Decoder, Config >

Arduino Stream API for a modem (encoder and decoder): the written characters are modulated to the audio output and the audio input is demodulated into characters that can be read. You can use only the output (transmit only), only the input (receive only) or both.

The received data is only processed when you call available(), read(), peek() or update(), so call one of them regularly in your loop(). No decoded data is lost: the input is only read while less than rx_buffer_size bytes are waiting to be read.

Member Typedef Documentation

◆ ConfigType

template<class Encoder, class Decoder, class Config>
using tinymodem::BasicModemStream< Encoder, Decoder, Config >::ConfigType = Config

◆ ReceiveQueue

template<class Encoder, class Decoder, class Config>
using tinymodem::BasicModemStream< Encoder, Decoder, Config >::ReceiveQueue = ByteQueue
protected

Constructor & Destructor Documentation

◆ BasicModemStream() [1/4]

template<class Encoder, class Decoder, class Config>
tinymodem::BasicModemStream< Encoder, Decoder, Config >::BasicModemStream ( )
default

◆ BasicModemStream() [2/4]

template<class Encoder, class Decoder, class Config>
tinymodem::BasicModemStream< Encoder, Decoder, Config >::BasicModemStream ( Print & audio_out)
inline

transmit only

◆ BasicModemStream() [3/4]

template<class Encoder, class Decoder, class Config>
tinymodem::BasicModemStream< Encoder, Decoder, Config >::BasicModemStream ( Print & audio_out,
Stream & audio_in )
inline

transmit and receive with separate output and input

◆ BasicModemStream() [4/4]

template<class Encoder, class Decoder, class Config>
tinymodem::BasicModemStream< Encoder, Decoder, Config >::BasicModemStream ( Stream & audio,
audio_tools::RxTxMode mode )
inline

use the same audio stream: TX_MODE (transmit only), RX_MODE (receive only) or RXTX_MODE (both)

Member Function Documentation

◆ available()

template<class Encoder, class Decoder, class Config>
int tinymodem::BasicModemStream< Encoder, Decoder, Config >::available ( )
inlineoverride

◆ begin()

template<class Encoder, class Decoder, class Config>
bool tinymodem::BasicModemStream< Encoder, Decoder, Config >::begin ( Config cfg,
int rx_buffer_size = 256 )
inline

Starts the modem: the input is only read while less than rx_buffer_size decoded bytes are waiting to be read

◆ defaultConfig()

template<class Encoder, class Decoder, class Config>
Config tinymodem::BasicModemStream< Encoder, Decoder, Config >::defaultConfig ( )
inline

◆ end()

template<class Encoder, class Decoder, class Config>
void tinymodem::BasicModemStream< Encoder, Decoder, Config >::end ( )
inline

◆ flush()

template<class Encoder, class Decoder, class Config>
void tinymodem::BasicModemStream< Encoder, Decoder, Config >::flush ( )
inlineoverride

Sends the trailer: call this at the end of a message.

◆ getDecoder()

template<class Encoder, class Decoder, class Config>
Decoder & tinymodem::BasicModemStream< Encoder, Decoder, Config >::getDecoder ( )
inline

◆ getEncoder()

template<class Encoder, class Decoder, class Config>
Encoder & tinymodem::BasicModemStream< Encoder, Decoder, Config >::getEncoder ( )
inline

◆ isCarrier()

template<class Encoder, class Decoder, class Config>
bool tinymodem::BasicModemStream< Encoder, Decoder, Config >::isCarrier ( )
inline

true while a carrier is detected

◆ peek()

template<class Encoder, class Decoder, class Config>
int tinymodem::BasicModemStream< Encoder, Decoder, Config >::peek ( )
inlineoverride

◆ read()

template<class Encoder, class Decoder, class Config>
int tinymodem::BasicModemStream< Encoder, Decoder, Config >::read ( )
inlineoverride

◆ readBytes() [1/2]

template<class Encoder, class Decoder, class Config>
size_t tinymodem::BasicModemStream< Encoder, Decoder, Config >::readBytes ( char * data,
size_t len )
inline

◆ readBytes() [2/2]

template<class Encoder, class Decoder, class Config>
size_t tinymodem::BasicModemStream< Encoder, Decoder, Config >::readBytes ( uint8_t * data,
size_t len )
inline

Reads the available data (does not wait for more data).

◆ readInput()

template<class Encoder, class Decoder, class Config>
size_t tinymodem::BasicModemStream< Encoder, Decoder, Config >::readInput ( )
inlineprotected

Reads the available audio input and feeds it to the decoder.

◆ setInput()

template<class Encoder, class Decoder, class Config>
void tinymodem::BasicModemStream< Encoder, Decoder, Config >::setInput ( Stream & audio_in)
inline

Defines the audio input (receiver).

◆ setOutput()

template<class Encoder, class Decoder, class Config>
void tinymodem::BasicModemStream< Encoder, Decoder, Config >::setOutput ( Print & audio_out)
inline

Defines the audio output (transmitter).

◆ setStatusOutput()

template<class Encoder, class Decoder, class Config>
void tinymodem::BasicModemStream< Encoder, Decoder, Config >::setStatusOutput ( Print & out)
inline

Defines the output for the ### CARRIER / ### NOCARRIER messages.

◆ update()

template<class Encoder, class Decoder, class Config>
size_t tinymodem::BasicModemStream< Encoder, Decoder, Config >::update ( )
inline

Reads the available audio input and feeds it to the decoder: returns the number of processed bytes

◆ write() [1/2]

template<class Encoder, class Decoder, class Config>
size_t tinymodem::BasicModemStream< Encoder, Decoder, Config >::write ( const uint8_t * data,
size_t len )
inlineoverride

◆ write() [2/2]

template<class Encoder, class Decoder, class Config>
size_t tinymodem::BasicModemStream< Encoder, Decoder, Config >::write ( uint8_t ch)
inlineoverride

Member Data Documentation

◆ copy_buffer

template<class Encoder, class Decoder, class Config>
uint8_t tinymodem::BasicModemStream< Encoder, Decoder, Config >::copy_buffer[256]
protected

◆ decoder

template<class Encoder, class Decoder, class Config>
Decoder tinymodem::BasicModemStream< Encoder, Decoder, Config >::decoder
protected

◆ encoder

template<class Encoder, class Decoder, class Config>
Encoder tinymodem::BasicModemStream< Encoder, Decoder, Config >::encoder
protected

◆ p_audio_in

template<class Encoder, class Decoder, class Config>
Stream* tinymodem::BasicModemStream< Encoder, Decoder, Config >::p_audio_in = nullptr
protected

◆ p_audio_out

template<class Encoder, class Decoder, class Config>
Print* tinymodem::BasicModemStream< Encoder, Decoder, Config >::p_audio_out = nullptr
protected

◆ rx_limit

template<class Encoder, class Decoder, class Config>
int tinymodem::BasicModemStream< Encoder, Decoder, Config >::rx_limit = 256
protected

◆ rx_queue

template<class Encoder, class Decoder, class Config>
ReceiveQueue tinymodem::BasicModemStream< Encoder, Decoder, Config >::rx_queue
protected

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