41 cfg.sample_rate = info.sample_rate;
42 cfg.channels = info.channels;
43 cfg.bits_per_sample = info.bits_per_sample;
49 using audio_tools::AudioEncoder::begin;
59 if (!
cfg.isValid())
return false;
60 if (
cfg.bits_per_sample != 16) {
61 LOGE(
"AX25Encoder: bits_per_sample must be 16, not %d",
62 (
int)
cfg.bits_per_sample);
65 if (
cfg.channels < 1) {
66 LOGE(
"AX25Encoder: invalid number of channels: %d", (
int)
cfg.channels);
84 size_t write(
const uint8_t* data,
size_t len)
override {
86 for (
size_t j = 0; j < len; j++) {
117 if (silence_samples)
tones.tone(0, silence_samples);
131 for (
size_t j = 0; j < n; j++) {
172 if (ch ==
'\r')
return;
232 int n = ms *
cfg.baud_rate / 8000;
234 for (
int j = 0; j < n; j++) {
248 LOGW(
"AX25Encoder: frame is too long for FX.25");
253 for (
int k = 0; k < 8; k++)
sendBits((value >> (8 * k)) & 0xFF);
254 for (
int j = 0; j < block_len; j++)
sendBits(block[j]);
270 for (
int j = 0; j < n; j++)
sendRawByte(encoded[j]);
273 LOGW(
"AX25Encoder: frame can't be encoded with IL2P");
280 for (
int b = 0; b < 8; b++)
sendBit((value >> b) & 1);
285 for (
int b = 7; b >= 0; b--) {
293 for (
int b = 0; b < 8; b++)
sendBit((0x7E >> b) & 1);
298 for (
int b = 0; b < 8; b++) {
299 int bit = (value >> b) & 1;
KissState kiss_state
Definition AX25Encoder.h:168
void sendBits(uint8_t value)
least significant bit first without bit stuffing (NRZI)
Definition AX25Encoder.h:279
AX25Encoder(Print &out)
Definition AX25Encoder.h:30
size_t write(const uint8_t *data, size_t len) override
Provide the frames as text lines or KISS frames.
Definition AX25Encoder.h:84
size_t frames
Definition AX25Encoder.h:163
int input_len
Definition AX25Encoder.h:166
bool begin(AX25Config config)
Starts the processing with the indicated configuration.
Definition AX25Encoder.h:52
size_t frameCount()
Number of sent frames.
Definition AX25Encoder.h:147
void setAudioInfo(audio_tools::AudioInfo info) override
Defines the sample rate and number of channels of the generated audio.
Definition AX25Encoder.h:40
bool transmitting
Definition AX25Encoder.h:158
bool begin() override
Definition AX25Encoder.h:57
bool nrzi_tone
Definition AX25Encoder.h:161
bool writeFX25(const uint8_t *frame, size_t len)
FX.25: correlation tag and Reed-Solomon code word (NRZI, no stuffing).
Definition AX25Encoder.h:243
void addKiss(uint8_t ch)
Definition AX25Encoder.h:218
AX25Config defaultConfig()
Provides a default configuration: APRS (1200 baud AFSK).
Definition AX25Encoder.h:33
void sendPreamble(int ms)
Flags (IL2P: 0x55) for the indicated time.
Definition AX25Encoder.h:231
int ones
Definition AX25Encoder.h:162
bool writeIL2P(const uint8_t *frame, size_t len)
IL2P: preamble, sync word and the encoded frame (no NRZI).
Definition AX25Encoder.h:261
KissState
Definition AX25Encoder.h:155
@ COMMAND
Definition AX25Encoder.h:155
@ IDLE
Definition AX25Encoder.h:155
@ ESCAPE
Definition AX25Encoder.h:155
@ DATA
Definition AX25Encoder.h:155
bool writeFrame(const uint8_t *frame, size_t len)
Sends a frame (without FCS).
Definition AX25Encoder.h:96
uint8_t frame[AX25Frame::MAX_FRAME]
Definition AX25Encoder.h:167
bool is_active
Definition AX25Encoder.h:157
audio_tools::AudioInfo audioInfo() override
Definition AX25Encoder.h:47
double samples_per_bit
Definition AX25Encoder.h:159
bool kiss_data_frame
Definition AX25Encoder.h:169
void end() override
Definition AX25Encoder.h:78
bool endTransmission(size_t silence_samples=0) override
Definition AX25Encoder.h:114
void sendFlag()
0x7E without bit stuffing
Definition AX25Encoder.h:292
void sendTone()
sends the current tone for one bit
Definition AX25Encoder.h:319
void sendByte(uint8_t value)
least significant bit first with bit stuffing
Definition AX25Encoder.h:297
void sendBit(int bit)
NRZI: a 0 changes the tone, a 1 keeps it.
Definition AX25Encoder.h:313
void startTransmission()
Definition AX25Encoder.h:222
void writeKiss(uint8_t ch)
Definition AX25Encoder.h:187
void sendRawByte(uint8_t value)
most significant bit first without NRZI: 1 = mark
Definition AX25Encoder.h:284
float symbolRate() override
Bits per second.
Definition AX25Encoder.h:144
bool writeIdle(size_t nsamples) override
Sends flags for the indicated number of samples.
Definition AX25Encoder.h:123
void writeText(uint8_t ch)
Definition AX25Encoder.h:171
uint64_t bit_index
Definition AX25Encoder.h:160
AX25Config cfg
Definition AX25Encoder.h:156
char input[AX25Frame::MAX_FRAME+100]
Definition AX25Encoder.h:165
AX25Config & config()
The configuration which was provided in begin().
Definition AX25Encoder.h:150
bool isTransmitting() override
true between the first frame and endTransmission()
Definition AX25Encoder.h:141
static constexpr uint8_t KISS_FESC
Definition AX25.h:146
static uint16_t fcs(const uint8_t *data, size_t len)
AX.25 frame check sequence: CRC-16-CCITT with reflected bits.
Definition AX25.h:151
static constexpr uint8_t KISS_TFEND
Definition AX25.h:147
static constexpr uint8_t KISS_FEND
Definition AX25.h:145
static constexpr uint8_t KISS_TFESC
Definition AX25.h:148
static int fromText(const char *text, size_t len, uint8_t *frame)
Definition AX25.h:163
static constexpr int MAX_FRAME
Definition AX25.h:143
static constexpr int MIN_FRAME
Definition AX25.h:144
static const Tag & tag(int index)
The tag 1 - 11.
Definition AX25FEC.h:39
static constexpr int BLOCK_SIZE
Definition AX25FEC.h:31
static int encode(const uint8_t *frame, int len, int check_bytes, uint8_t *block, int &block_len)
Definition AX25FEC.h:80
static constexpr uint8_t PREAMBLE
Definition AX25FEC.h:216
static constexpr int HEADER_PARITY
Definition AX25FEC.h:219
static int encode(const uint8_t *frame, int len, bool max_fec, uint8_t *out)
Definition AX25FEC.h:226
static constexpr uint32_t SYNC_WORD
Definition AX25FEC.h:217
static constexpr int HEADER_SIZE
Definition AX25FEC.h:218
Common API of the modulators (FSKEncoder, MFSKEncoder): the written data is converted to 16 bit PCM a...
Definition ModemBase.h:286
void setOutput(Print &out) override
Definition ModemBase.h:288
ToneOutput tones
Definition ModemBase.h:334
TinyModem: software audio modems and packets with error correction.
Definition AX25.h:11
@ KISS
Definition AX25.h:20
@ IL2P
IL2P: Improved Layer 2 Protocol with Reed-Solomon FEC.
Definition AX25.h:31
@ FX25
FX.25: HDLC frame with Reed-Solomon FEC (compatible with AX.25).
Definition AX25.h:29
Configuration of the AX.25 packet radio modem (AX25Encoder, AX25Decoder): Bell 202 AFSK with 1200 bau...
Definition AX25.h:44
bool setMode(const char *mode)
Definition AX25.h:78
uint64_t value
Definition AX25FEC.h:24