aboutsummaryrefslogtreecommitdiffstats
path: root/src/bnetz
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2019-09-01 15:38:16 +0200
committerAndreas Eversberg <jolly@eversberg.eu>2019-11-29 15:58:32 +0100
commit6dcc8baad448d000ef355abc6d9abf7a3490a800 (patch)
treed46e472ec720c369071e49398783630d16f47bb2 /src/bnetz
parent360729d27034a3fe684b4a2ddea516d027dab935 (diff)
Split FSK modem code into separate modulator and demodulator
Diffstat (limited to 'src/bnetz')
-rw-r--r--src/bnetz/bnetz.h3
-rw-r--r--src/bnetz/dialer.c10
-rw-r--r--src/bnetz/dsp.c15
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));