From: baobrien Date: Tue, 10 May 2016 02:49:58 +0000 (+0000) Subject: Applied Jeroen's second 800XA data channel patch X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=84934f08027f5a1cc6241b768529f306b7a3b319;p=freetel-svn-tracking.git Applied Jeroen's second 800XA data channel patch git-svn-id: https://svn.code.sf.net/p/freetel/code@2800 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/codec2-dev/src/freedv_api.c b/codec2-dev/src/freedv_api.c index 53b75983..af28fdd1 100644 --- a/codec2-dev/src/freedv_api.c +++ b/codec2-dev/src/freedv_api.c @@ -730,18 +730,19 @@ void freedv_codectx(struct freedv *f, short mod_out[], unsigned char *packed_cod memcpy(f->packed_codec_bits, packed_codec_bits, bytes_per_codec_frame * codec_frames); switch(f->mode) { - case FREEDV_MODE_1600: - freedv_comptx_fdmdv_1600(f, tx_fdm); - break; + case FREEDV_MODE_1600: + freedv_comptx_fdmdv_1600(f, tx_fdm); + break; #ifndef CORTEX_M4 - case FREEDV_MODE_700: - case FREEDV_MODE_700B: - freedv_comptx_fdmdv_700(f, tx_fdm); - break; - case FREEDV_MODE_2400A: - case FREEDV_MODE_2400B: - freedv_tx_fsk_voice(f, mod_out); - return; /* output is already real */ + case FREEDV_MODE_700: + case FREEDV_MODE_700B: + freedv_comptx_fdmdv_700(f, tx_fdm); + break; + case FREEDV_MODE_2400A: + case FREEDV_MODE_2400B: + case FREEDV_MODE_800XA: + freedv_tx_fsk_voice(f, mod_out); + return; /* output is already real */ #endif } /* convert complex to real */ @@ -752,7 +753,7 @@ void freedv_codectx(struct freedv *f, short mod_out[], unsigned char *packed_cod void freedv_datatx (struct freedv *f, short mod_out[]){ assert(f != NULL); #ifndef CORTEX_M4 - if (f->mode == FREEDV_MODE_2400A || f->mode == FREEDV_MODE_2400B) { + if (f->mode == FREEDV_MODE_2400A || f->mode == FREEDV_MODE_2400B || f->mode == FREEDV_MODE_800XA) { freedv_tx_fsk_data(f, mod_out); } #endif @@ -1289,7 +1290,7 @@ int freedv_codecrx(struct freedv *f, unsigned char *packed_codec_bits, short dem #ifndef CORTEX_M4 /* 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) ){ + if( (f->mode == FREEDV_MODE_2400A) || (f->mode == FREEDV_MODE_2400B) || (f->mode == FREEDV_MODE_800XA)){ for(i=0; ifreedv_put_next_rx_char = rx; - f->freedv_get_next_tx_char = tx; - f->callback_state = state; + if (f->mode != FREEDV_MODE_800XA) { + f->freedv_put_next_rx_char = rx; + f->freedv_get_next_tx_char = tx; + f->callback_state = state; + } } /*---------------------------------------------------------------------------*\ @@ -1384,9 +1387,11 @@ void freedv_set_callback_txt(struct freedv *f, freedv_callback_rx rx, freedv_cal \*---------------------------------------------------------------------------*/ void freedv_set_callback_protocol(struct freedv *f, freedv_callback_protorx rx, freedv_callback_prototx tx, void *callback_state){ - f->freedv_put_next_proto = rx; - f->freedv_get_next_proto = tx; - f->proto_callback_state = callback_state; + if (f->mode != FREEDV_MODE_800XA) { + f->freedv_put_next_proto = rx; + f->freedv_get_next_proto = tx; + f->proto_callback_state = callback_state; + } } /*---------------------------------------------------------------------------*\ @@ -1404,7 +1409,7 @@ void freedv_set_callback_protocol(struct freedv *f, freedv_callback_protorx rx, \*---------------------------------------------------------------------------*/ #ifndef CORTEX_M4 void freedv_set_callback_data(struct freedv *f, freedv_callback_datarx datarx, freedv_callback_datatx datatx, void *callback_state) { - if ((f->mode == FREEDV_MODE_2400A) || (f->mode == FREEDV_MODE_2400B)){ + if ((f->mode == FREEDV_MODE_2400A) || (f->mode == FREEDV_MODE_2400B) || (f->mode == FREEDV_MODE_800XA)){ if (!f->deframer->fdc) f->deframer->fdc = freedv_data_channel_create(); if (!f->deframer->fdc) @@ -1430,7 +1435,7 @@ void freedv_set_callback_data(struct freedv *f, freedv_callback_datarx datarx, f #ifndef CORTEX_M4 void freedv_set_data_header(struct freedv *f, unsigned char *header) { - if ((f->mode == FREEDV_MODE_2400A) || (f->mode == FREEDV_MODE_2400B)){ + if ((f->mode == FREEDV_MODE_2400A) || (f->mode == FREEDV_MODE_2400B) || (f->mode == FREEDV_MODE_800XA)){ if (!f->deframer->fdc) f->deframer->fdc = freedv_data_channel_create(); if (!f->deframer->fdc) diff --git a/codec2-dev/src/freedv_data_channel.c b/codec2-dev/src/freedv_data_channel.c index 32ba6eb7..810ed507 100644 --- a/codec2-dev/src/freedv_data_channel.c +++ b/codec2-dev/src/freedv_data_channel.c @@ -305,6 +305,8 @@ void freedv_data_set_header(struct freedv_data_channel *fdc, unsigned char *head int freedv_data_get_n_tx_frames(struct freedv_data_channel *fdc, size_t size) { + if (fdc->packet_tx_size == 0) + return 0; /* packet will be send in 'size' byte frames */ - return (fdc->packet_tx_size + size-1) / size; + return (fdc->packet_tx_size - fdc->packet_tx_cnt + size-1) / size; } diff --git a/codec2-dev/src/freedv_vhf_framing.c b/codec2-dev/src/freedv_vhf_framing.c index 11d59945..7ead0343 100644 --- a/codec2-dev/src/freedv_vhf_framing.c +++ b/codec2-dev/src/freedv_vhf_framing.c @@ -585,7 +585,7 @@ static void fvhff_extract_frame_data(struct freedv_vhf_deframer * def,uint8_t bi } if (def->fdc) { - freedv_data_channel_rx_frame(def->fdc, data, 7, from_bit, bcast_bit, crc_bit, end_bits); + freedv_data_channel_rx_frame(def->fdc, data, 6, from_bit, bcast_bit, crc_bit, end_bits); } } } diff --git a/codec2-dev/unittest/test_cohpsk_ch.c b/codec2-dev/unittest/test_cohpsk_ch.c index c77a28f3..fe2f90fd 100644 --- a/codec2-dev/unittest/test_cohpsk_ch.c +++ b/codec2-dev/unittest/test_cohpsk_ch.c @@ -132,6 +132,9 @@ int main(int argc, char *argv[]) tx_pwr = rx_pwr = noise_pwr = 0.0; + nerrors = 0; + nbits = 0; + /* init HF fading model */ if (fading_en) { diff --git a/codec2-dev/unittest/tfdmdv.c b/codec2-dev/unittest/tfdmdv.c index 9fbdfdff..686a2dd4 100644 --- a/codec2-dev/unittest/tfdmdv.c +++ b/codec2-dev/unittest/tfdmdv.c @@ -102,7 +102,7 @@ int main(int argc, char *argv[]) rx_baseband_log_col_index = 0; rx_filt_log_col_index = 0; - printf("sizeof FDMDV states: %d bytes\n", sizeof(struct FDMDV)); + printf("sizeof FDMDV states: %zd bytes\n", sizeof(struct FDMDV)); for(f=0; f= testvec[vector].frame_data_size) { - vector++; - frame_data_pos = 0; - if (!rx_done) { - printf("FAIL: RX callback not executed\n"); - ret++; - } - rx_done = 0; + if (nr_frames) { + printf("FAIL: nr_frames is not zero: %d\n", nr_frames); + ret++; + } + vector++; + frame_data_pos = 0; + if (!rx_done) { + printf("FAIL: RX callback not executed\n"); + ret++; + } + rx_done = 0; + } else { + int vec_frames = (testvec[vector].frame_data_size - frame_data_pos); + vec_frames /= frame_size; + vec_frames++; + if (nr_frames != vec_frames) { + printf("FAIL: nr_frames != vec_frames: %d != %d\n", nr_frames, vec_frames); + ret++; + } } }