From ab0845f042b8df2fb38af85e0f1d37f8bb780deb Mon Sep 17 00:00:00 2001 From: baobrien Date: Wed, 20 Sep 2017 11:35:52 +0000 Subject: [PATCH] Further work on TDMA RX git-svn-id: https://svn.code.sf.net/p/freetel/code@3371 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2-dev/src/freedv_vhf_framing.c | 4 ++-- codec2-dev/src/freedv_vhf_framing.h | 2 +- codec2-dev/src/tdma.c | 5 +++-- codec2-dev/src/tdma.h | 14 ++++++++------ 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/codec2-dev/src/freedv_vhf_framing.c b/codec2-dev/src/freedv_vhf_framing.c index 8eae3fe4..c83de450 100644 --- a/codec2-dev/src/freedv_vhf_framing.c +++ b/codec2-dev/src/freedv_vhf_framing.c @@ -401,14 +401,14 @@ int fvhff_synchronized(struct freedv_vhf_deframer * def){ /* Search for a complete UW in a buffer of bits */ size_t fvhff_search_uw(const uint8_t bits[],size_t nbits, const uint8_t uw[], size_t uw_len, - size_t * delta_out){ + size_t * delta_out, size_t bits_per_sym){ size_t ibits,iuw; size_t delta_min = uw_len; size_t delta; size_t offset_min = 0; /* Walk through buffer bits */ - for(ibits = 0; ibits < nbits-uw_len; ibits++){ + for(ibits = 0; ibits < nbits-uw_len; ibits+=bits_per_sym){ delta = 0; for(iuw = 0; iuw < uw_len; iuw++){ if(bits[ibits+iuw] != uw[iuw]) delta++; diff --git a/codec2-dev/src/freedv_vhf_framing.h b/codec2-dev/src/freedv_vhf_framing.h index d73ee1b2..1693efe5 100644 --- a/codec2-dev/src/freedv_vhf_framing.h +++ b/codec2-dev/src/freedv_vhf_framing.h @@ -93,6 +93,6 @@ int fvhff_synchronized(struct freedv_vhf_deframer * def); /* Search for a complete UW in a buffer of bits */ size_t fvhff_search_uw(const uint8_t bits[],size_t nbits, const uint8_t uw[], size_t uw_len, - size_t * delta_out); + size_t * delta_out, size_t bits_per_sym); #endif //_FREEDV_VHF_FRAMING_H diff --git a/codec2-dev/src/tdma.c b/codec2-dev/src/tdma.c index 3dc72971..0caabee5 100644 --- a/codec2-dev/src/tdma.c +++ b/codec2-dev/src/tdma.c @@ -211,7 +211,7 @@ int tdma_demod_end_slot(tdma_t * tdma,u32 slot_idx, u8 * bit_buf){ fsk_demod(fsk,bit_buf,frame_samps); i32 delta,off; - off = fvhff_search_uw(bit_buf,nbits,TDMA_UW_V,16,&delta); + off = fvhff_search_uw(bit_buf,nbits,TDMA_UW_V,16,&delta,bits_per_sym); i32 f_start = off- (frame_bits-16)/2; int f_valid = 0; /* Flag indicating wether or not we've found a UW; @@ -294,7 +294,7 @@ void tdma_rx_pilot_sync(tdma_t * tdma){ fsk_demod(fsk,bit_buf,frame_samps); size_t delta,off; - off = fvhff_search_uw(bit_buf,nbits,TDMA_UW_V,16,&delta); + off = fvhff_search_uw(bit_buf,nbits,TDMA_UW_V,16,&delta,bits_per_sym); i32 f_start = off- (frame_bits-16)/2; int f_valid = 0; /* Flag indicating wether or not we've found a UW */ @@ -334,6 +334,7 @@ void tdma_rx_pilot_sync(tdma_t * tdma){ fprintf(stderr,"Slot %d: sunk\n",tdma->slot_cur); if(!f_valid){ /* on bad UW, increment bad uw count and possibly unsync */ slot->bad_uw_count++; + fprintf(stderr,"----BAD UW COUNT %d TOL %d----\n",slot->bad_uw_count,tdma->settings.frame_sync_baduw_tol); if(slot->bad_uw_count >= tdma->settings.frame_sync_baduw_tol){ slot->state = rx_no_sync; fprintf(stderr,"----DESYNCING----\n"); diff --git a/codec2-dev/src/tdma.h b/codec2-dev/src/tdma.h index 15ef9869..f3f5fa29 100644 --- a/codec2-dev/src/tdma.h +++ b/codec2-dev/src/tdma.h @@ -42,11 +42,6 @@ typedef int32_t i32; typedef uint8_t u8; typedef float f32; -/* Callback typedef that just returns the bits of the frame */ -/* TODO: write this a bit better */ -typedef void (*tdma_cb_rx_frame)(u8* frame_bits,u32 slot); - - /* The state for an individual slot */ enum slot_state { rx_no_sync = 0, /* Not synched */ @@ -121,6 +116,7 @@ struct TDMA_MODEM { uint64_t timestamp; /* Timestamp of oldest sample in samp buffer */ uint32_t slot_cur; /* Current slot coming in */ tdma_cb_rx_frame rx_callback; + void * rx_cb_data; }; typedef struct TDMA_MODEM tdma_t; @@ -144,6 +140,12 @@ void tdma_rx(tdma_t * tdma, COMP * samps,u64 timestamp); void tdma_print_stuff(tdma_t * tdma); /* Set the RX callback function */ -void tdma_set_rx_cb(tdma_t * tdma,tdma_cb_rx_frame rx_callback); +void tdma_set_rx_cb(tdma_t * tdma,tdma_cb_rx_frame rx_callback,void * cb_data); + + +/* Callback typedef that just returns the bits of the frame */ +/* TODO: write this a bit better */ +typedef void (*tdma_cb_rx_frame)(u8* frame_bits,u32 slot_i, slot_t * slot, tdma_t * tdma, void * cb_data); + #endif -- 2.25.1