/* 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++;
/* 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
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;
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 */
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");
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 */
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;
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