Further work on TDMA RX
authorbaobrien <baobrien@01035d8c-6547-0410-b346-abe4f91aad63>
Wed, 20 Sep 2017 11:35:52 +0000 (11:35 +0000)
committerbaobrien <baobrien@01035d8c-6547-0410-b346-abe4f91aad63>
Wed, 20 Sep 2017 11:35:52 +0000 (11:35 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@3371 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/src/freedv_vhf_framing.c
codec2-dev/src/freedv_vhf_framing.h
codec2-dev/src/tdma.c
codec2-dev/src/tdma.h

index 8eae3fe4cc406aa563958dba9d21e7670fecc104..c83de450eeb2a34baa27eded9f54de7c82f67c09 100644 (file)
@@ -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++;
index d73ee1b2d6412108d4d98b595f47b7e1f73f62ee..1693efe5931f2d03e34f1a05e1a982ab949c944d 100644 (file)
@@ -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
index 3dc729716d62fb7b7e3a094386333e6a98e6aca2..0caabee5c10d7b7e0fa49bc567a700f6e2b9c080 100644 (file)
@@ -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");
index 15ef98699ff88bb8a4505d6149f715eb5c52b31c..f3f5fa29c296e8f8a0449602570877b36eda159b 100644 (file)
@@ -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