From 6cdb21cf55c6b1234a6e7854e426fee584d158e4 Mon Sep 17 00:00:00 2001 From: baobrien Date: Thu, 7 Jul 2016 00:56:50 +0000 Subject: [PATCH] Fixed bug in callback function setup git-svn-id: https://svn.code.sf.net/p/freetel/code@2837 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2-dev/src/freedv_api.c | 30 ++++++++++++++++++++---------- codec2-dev/src/freedv_api.h | 1 + 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/codec2-dev/src/freedv_api.c b/codec2-dev/src/freedv_api.c index 0be6396d..84a40a24 100644 --- a/codec2-dev/src/freedv_api.c +++ b/codec2-dev/src/freedv_api.c @@ -33,6 +33,7 @@ #include #include +#include #include "fsk.h" #include "fmfsk.h" @@ -293,7 +294,8 @@ struct freedv *freedv_open(int mode) { f->varicode_bit_index = 0; f->freedv_get_next_tx_char = NULL; f->freedv_put_next_rx_char = NULL; - + f->freedv_put_next_proto = NULL; + f->freedv_get_next_proto = NULL; f->total_bit_errors = 0; return f; @@ -322,11 +324,15 @@ void freedv_close(struct freedv *freedv) { if (freedv->mode == FREEDV_MODE_700) cohpsk_destroy(freedv->cohpsk); #endif - if (freedv->mode == FREEDV_MODE_2400A) + if (freedv->mode == FREEDV_MODE_2400A || freedv->mode == FREEDV_MODE_800XA){ fsk_destroy(freedv->fsk); + fvhff_destroy_deframer(freedv->deframer); + } - if (freedv->mode == FREEDV_MODE_2400B) + if (freedv->mode == FREEDV_MODE_2400B){ fmfsk_destroy(freedv->fmfsk); + fvhff_destroy_deframer(freedv->deframer); + } codec2_destroy(freedv->codec2); if (freedv->ptFilter8000to7500) { @@ -821,15 +827,14 @@ int freedv_nin(struct freedv *f) { int freedv_rx(struct freedv *f, short speech_out[], short demod_in[]) { assert(f != NULL); - COMP rx_fdm[f->n_max_modem_samples]; int i; int nin = freedv_nin(f); assert(nin <= f->n_max_modem_samples); - float rx_float[f->n_max_modem_samples]; /* FSK RX happens in real floats, so convert to those and call their demod here */ if( (f->mode == FREEDV_MODE_2400A) || (f->mode == FREEDV_MODE_2400B) || (f->mode == FREEDV_MODE_800XA) ){ + float rx_float[f->n_max_modem_samples]; for(i=0; imode == FREEDV_MODE_1600) || (f->mode == FREEDV_MODE_700) || (f->mode == FREEDV_MODE_700B)){ /* FDM RX happens with complex samps, so do that */ + COMP rx_fdm[f->n_max_modem_samples]; for(i=0; in_max_modem_samples]; int i; int nin = freedv_nin(f); @@ -906,22 +911,23 @@ int freedv_floatrx(struct freedv *f, short speech_out[], float demod_in[]) { if (valid == 0) for (i = 0; i < nout; i++) speech_out[i] = 0; - else if (valid < 0) + else if (valid < 0){ for (i = 0; i < nout; i++) - speech_out[i] = demod_in[i]; - else { + speech_out[i] = demod_in[i]; + }else { int bits_per_codec_frame = codec2_bits_per_frame(f->codec2); int bytes_per_codec_frame = (bits_per_codec_frame + 7) / 8; int frames = f->n_codec_bits / bits_per_codec_frame; for (i = 0; i < frames; i++) { codec2_decode(f->codec2, speech_out, f->packed_codec_bits + i * bytes_per_codec_frame); - speech_out += codec2_samples_per_frame(f->codec2); + //speech_out += codec2_samples_per_frame(f->codec2); } } return f->n_speech_samples; } if( (f->mode == FREEDV_MODE_1600) || (f->mode == FREEDV_MODE_700) || (f->mode == FREEDV_MODE_700B)){ + COMP rx_fdm[f->n_max_modem_samples]; for(i=0; ifsk; +} + /*---------------------------------------------------------------------------*\ FUNCTIONS...: freedv_get_* diff --git a/codec2-dev/src/freedv_api.h b/codec2-dev/src/freedv_api.h index 775f32ae..593e8621 100644 --- a/codec2-dev/src/freedv_api.h +++ b/codec2-dev/src/freedv_api.h @@ -112,6 +112,7 @@ int freedv_get_n_nom_modem_samples (struct freedv *freedv); int freedv_get_total_bits (struct freedv *freedv); int freedv_get_total_bit_errors (struct freedv *freedv); int freedv_get_sync (struct freedv *freedv); +struct FSK * freedv_get_fsk(struct freedv *f); struct CODEC2 *freedv_get_codec2 (struct freedv *freedv); int freedv_get_n_codec_bits (struct freedv *freedv); int freedv_get_sz_error_pattern (struct freedv *freedv); -- 2.25.1