diff options
author | Andreas Eversberg <jolly@eversberg.eu> | 2019-09-01 15:38:16 +0200 |
---|---|---|
committer | Andreas Eversberg <jolly@eversberg.eu> | 2019-11-29 15:58:32 +0100 |
commit | 6dcc8baad448d000ef355abc6d9abf7a3490a800 (patch) | |
tree | d46e472ec720c369071e49398783630d16f47bb2 /src/bnetz | |
parent | 360729d27034a3fe684b4a2ddea516d027dab935 (diff) |
Split FSK modem code into separate modulator and demodulator
Diffstat (limited to 'src/bnetz')
-rw-r--r-- | src/bnetz/bnetz.h | 3 | ||||
-rw-r--r-- | src/bnetz/dialer.c | 10 | ||||
-rw-r--r-- | src/bnetz/dsp.c | 15 |
3 files changed, 17 insertions, 11 deletions
diff --git a/src/bnetz/bnetz.h b/src/bnetz/bnetz.h index c520902..38aa078 100644 --- a/src/bnetz/bnetz.h +++ b/src/bnetz/bnetz.h @@ -87,7 +87,8 @@ typedef struct bnetz { /* dsp states */ enum dsp_mode dsp_mode; /* current mode: audio, durable tone 0 or 1, "Telegramm" */ - fsk_t fsk; /* fsk modem instance */ + fsk_mod_t fsk_mod; /* fsk modem instance */ + fsk_demod_t fsk_demod; uint16_t rx_telegramm; /* rx shift register for receiveing telegramm */ double rx_telegramm_quality[16];/* quality of each bit in telegramm */ double rx_telegramm_level[16]; /* level of each bit in telegramm */ diff --git a/src/bnetz/dialer.c b/src/bnetz/dialer.c index 05195e3..e44ddf5 100644 --- a/src/bnetz/dialer.c +++ b/src/bnetz/dialer.c @@ -61,7 +61,7 @@ int tx_telegramm_pos = 0; int latspl; /* instances */ -fsk_t fsk; +fsk_mod_t fsk_mod; #ifdef HAVE_ALSA void *audio = NULL; #endif @@ -226,7 +226,7 @@ again: break; case TX_MODE_FSK: /* send FSK until it stops, then fill with silence */ - count = fsk_send(&fsk, samples, length, 0); + count = fsk_mod_send(&fsk_mod, samples, length, 0); samples += count; length -= count; if (length) @@ -286,7 +286,7 @@ int main(int argc, char *argv[]) /* init */ bnetz_init_telegramm(); - memset(&fsk, 0, sizeof(fsk)); + memset(&fsk_mod, 0, sizeof(fsk_mod)); /* latency of send buffer in samples */ latspl = samplerate * latency / 1000; @@ -340,7 +340,7 @@ int main(int argc, char *argv[]) sprintf(funkwahl, "wwww%c%s%se%c%s%se", start_digit, station_id, dialing + 1, start_digit, station_id, dialing + 1); /* init fsk */ - if (fsk_init(&fsk, NULL, fsk_send_bit, NULL, samplerate, BIT_RATE, F0, F1, 1.0, 0, 0) < 0) { + if (fsk_mod_init(&fsk_mod, NULL, fsk_send_bit, samplerate, BIT_RATE, F0, F1, 1.0, 0) < 0) { PDEBUG(DDSP, DEBUG_ERROR, "FSK init failed!\n"); goto exit; } @@ -389,7 +389,7 @@ exit: #endif /* exit fsk */ - fsk_cleanup(&fsk); + fsk_mod_cleanup(&fsk_mod); return 0; } diff --git a/src/bnetz/dsp.c b/src/bnetz/dsp.c index e05973a..e2928ba 100644 --- a/src/bnetz/dsp.c +++ b/src/bnetz/dsp.c @@ -96,7 +96,11 @@ int dsp_init_sender(bnetz_t *bnetz, double squelch_db) PDEBUG(DDSP, DEBUG_DEBUG, "Using FSK level of %.3f (%.3f KHz deviation @ 2000 Hz)\n", TX_PEAK_FSK, 4.0); /* init fsk */ - if (fsk_init(&bnetz->fsk, bnetz, fsk_send_bit, fsk_receive_bit, bnetz->sender.samplerate, BIT_RATE, F0, F1, TX_PEAK_FSK, 0, BIT_ADJUST) < 0) { + if (fsk_mod_init(&bnetz->fsk_mod, bnetz, fsk_send_bit, bnetz->sender.samplerate, BIT_RATE, F0, F1, TX_PEAK_FSK, 0) < 0) { + PDEBUG_CHAN(DDSP, DEBUG_ERROR, "FSK init failed!\n"); + return -EINVAL; + } + if (fsk_demod_init(&bnetz->fsk_demod, bnetz, fsk_receive_bit, bnetz->sender.samplerate, BIT_RATE, F0, F1, BIT_ADJUST) < 0) { PDEBUG_CHAN(DDSP, DEBUG_ERROR, "FSK init failed!\n"); return -EINVAL; } @@ -121,7 +125,8 @@ void dsp_cleanup_sender(bnetz_t *bnetz) { PDEBUG_CHAN(DDSP, DEBUG_DEBUG, "Cleanup DSP for 'Sender'.\n"); - fsk_cleanup(&bnetz->fsk); + fsk_mod_cleanup(&bnetz->fsk_mod); + fsk_demod_cleanup(&bnetz->fsk_demod); } /* If good tone is received, we just set this tone, if not already and reset counters. @@ -270,7 +275,7 @@ void sender_receive(sender_t *sender, sample_t *samples, int length, double rf_l int i; /* fsk/tone signal */ - fsk_receive(&bnetz->fsk, samples, length); + fsk_demod_receive(&bnetz->fsk_demod, samples, length); /* process signal mute/loss, without signalling tone / FSK frames */ switch (squelch(&bnetz->squelch, rf_level_db, (double)length / (double)bnetz->sender.samplerate)) { @@ -375,7 +380,7 @@ again: case DSP_MODE_TELEGRAMM: /* Encode tone/frame into audio stream. If frames have * stopped, process again for rest of stream. */ - count = fsk_send(&bnetz->fsk, samples, length, 0); + count = fsk_mod_send(&bnetz->fsk_mod, samples, length, 0); samples += count; length -= count; if (length) @@ -412,7 +417,7 @@ void bnetz_set_dsp_mode(bnetz_t *bnetz, enum dsp_mode mode) /* reset telegramm */ if (mode == DSP_MODE_TELEGRAMM && bnetz->dsp_mode != mode) { bnetz->tx_telegramm = 0; - fsk_tx_reset(&bnetz->fsk); + fsk_mod_tx_reset(&bnetz->fsk_mod); } PDEBUG_CHAN(DDSP, DEBUG_DEBUG, "DSP mode %s -> %s\n", bnetz_dsp_mode_name(bnetz->dsp_mode), bnetz_dsp_mode_name(mode)); |