diff options
Diffstat (limited to 'src/r2000')
-rw-r--r-- | src/r2000/dsp.c | 32 | ||||
-rw-r--r-- | src/r2000/r2000.h | 6 |
2 files changed, 25 insertions, 13 deletions
diff --git a/src/r2000/dsp.c b/src/r2000/dsp.c index fd438e4..d52e8eb 100644 --- a/src/r2000/dsp.c +++ b/src/r2000/dsp.c @@ -85,7 +85,11 @@ int dsp_init_sender(r2000_t *r2000) PDEBUG(DDSP, DEBUG_DEBUG, "Using FSK level of %.3f\n", TX_PEAK_FSK); /* init fsk */ - if (fsk_init(&r2000->fsk, r2000, fsk_send_bit, fsk_receive_bit, r2000->sender.samplerate, FSK_BIT_RATE, FSK_F0, FSK_F1, TX_PEAK_FSK, 1, FSK_BIT_ADJUST) < 0) { + if (fsk_mod_init(&r2000->fsk_mod, r2000, fsk_send_bit, r2000->sender.samplerate, FSK_BIT_RATE, FSK_F0, FSK_F1, TX_PEAK_FSK, 1) < 0) { + PDEBUG_CHAN(DDSP, DEBUG_ERROR, "FSK init failed!\n"); + return -EINVAL; + } + if (fsk_demod_init(&r2000->fsk_demod, r2000, fsk_receive_bit, r2000->sender.samplerate, FSK_BIT_RATE, FSK_F0, FSK_F1, FSK_BIT_ADJUST) < 0) { PDEBUG_CHAN(DDSP, DEBUG_ERROR, "FSK init failed!\n"); return -EINVAL; } @@ -95,7 +99,11 @@ int dsp_init_sender(r2000_t *r2000) r2000->rx_max = 144; /* init supervisorty fsk */ - if (fsk_init(&r2000->super_fsk, r2000, super_send_bit, super_receive_bit, r2000->sender.samplerate, SUPER_BIT_RATE, SUPER_F0, SUPER_F1, TX_PEAK_SUPER, 0, SUPER_BIT_ADJUST) < 0) { + if (fsk_mod_init(&r2000->super_fsk_mod, r2000, super_send_bit, r2000->sender.samplerate, SUPER_BIT_RATE, SUPER_F0, SUPER_F1, TX_PEAK_SUPER, 0) < 0) { + PDEBUG_CHAN(DDSP, DEBUG_ERROR, "FSK init failed!\n"); + return -EINVAL; + } + if (fsk_demod_init(&r2000->super_fsk_demod, r2000, super_receive_bit, r2000->sender.samplerate, SUPER_BIT_RATE, SUPER_F0, SUPER_F1, SUPER_BIT_ADJUST) < 0) { PDEBUG_CHAN(DDSP, DEBUG_ERROR, "FSK init failed!\n"); return -EINVAL; } @@ -122,8 +130,10 @@ void dsp_cleanup_sender(r2000_t *r2000) { PDEBUG_CHAN(DDSP, DEBUG_DEBUG, "Cleanup DSP for Transceiver.\n"); - fsk_cleanup(&r2000->fsk); - fsk_cleanup(&r2000->super_fsk); + fsk_mod_cleanup(&r2000->fsk_mod); + fsk_demod_cleanup(&r2000->fsk_demod); + fsk_mod_cleanup(&r2000->super_fsk_mod); + fsk_demod_cleanup(&r2000->super_fsk_demod); } /* Check for SYNC bits, then collect data bits */ @@ -254,14 +264,14 @@ void sender_receive(sender_t *sender, sample_t *samples, int length, double __at if (r2000->dsp_mode == DSP_MODE_AUDIO_TX || r2000->dsp_mode == DSP_MODE_AUDIO_TX_RX || r2000->sender.loopback) - fsk_receive(&r2000->super_fsk, samples, length); + fsk_demod_receive(&r2000->super_fsk_demod, samples, length); /* do de-emphasis */ if (r2000->de_emphasis) de_emphasis(&r2000->estate, samples, length); /* fsk signal */ - fsk_receive(&r2000->fsk, samples, length); + fsk_demod_receive(&r2000->fsk_demod, samples, length); /* we must have audio mode for both ways and a call */ if (r2000->dsp_mode == DSP_MODE_AUDIO_TX_RX @@ -342,19 +352,19 @@ again: if (r2000->pre_emphasis) pre_emphasis(&r2000->estate, samples, length); /* add supervisory to sample buffer */ - fsk_send(&r2000->super_fsk, samples, length, 1); + fsk_mod_send(&r2000->super_fsk_mod, samples, length, 1); break; case DSP_MODE_FRAME: /* Encode frame into audio stream. If frames have * stopped, process again for rest of stream. */ - count = fsk_send(&r2000->fsk, samples, length, 0); + count = fsk_mod_send(&r2000->fsk_mod, samples, length, 0); /* do pre-emphasis */ if (r2000->pre_emphasis) pre_emphasis(&r2000->estate, samples, count); /* special case: add supervisory signal to frame at loop test */ if (r2000->sender.loopback) { /* add supervisory to sample buffer */ - fsk_send(&r2000->super_fsk, samples, count, 1); + fsk_mod_send(&r2000->super_fsk_mod, samples, count, 1); } memset(power, 1, count); samples += count; @@ -390,12 +400,12 @@ void r2000_set_dsp_mode(r2000_t *r2000, enum dsp_mode mode, int super) /* reset telegramm */ if (mode == DSP_MODE_FRAME && r2000->dsp_mode != mode) { r2000->tx_frame_length = 0; - fsk_tx_reset(&r2000->fsk); + fsk_mod_tx_reset(&r2000->fsk_mod); } if ((mode == DSP_MODE_AUDIO_TX || mode == DSP_MODE_AUDIO_TX_RX) && (r2000->dsp_mode != DSP_MODE_AUDIO_TX && r2000->dsp_mode != DSP_MODE_AUDIO_TX_RX)) { r2000->super_tx_word_length = 0; - fsk_tx_reset(&r2000->super_fsk); + fsk_mod_tx_reset(&r2000->super_fsk_mod); } if (super >= 0) { diff --git a/src/r2000/r2000.h b/src/r2000/r2000.h index 2efd3f3..edfdffe 100644 --- a/src/r2000/r2000.h +++ b/src/r2000/r2000.h @@ -85,7 +85,8 @@ typedef struct r2000 { /* dsp states */ enum dsp_mode dsp_mode; /* current mode: audio, durable tone 0 or 1, paging */ - fsk_t fsk; /* fsk processing */ + fsk_mod_t fsk_mod; /* fsk processing */ + fsk_demod_t fsk_demod; char tx_frame[208]; /* carries bits of one frame to transmit */ int tx_frame_length; int tx_frame_pos; @@ -102,7 +103,8 @@ typedef struct r2000 { uint64_t rx_bits_count_last; /* sample counter of last frame */ /* supervisory dsp states */ - fsk_t super_fsk; /* fsk processing */ + fsk_mod_t super_fsk_mod; /* fsk processing */ + fsk_demod_t super_fsk_demod; uint32_t super_tx_word; /* supervisory info to transmit */ int super_tx_word_length; int super_tx_word_pos; |