Applied Jeroen's second 800XA data channel patch
authorbaobrien <baobrien@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 10 May 2016 02:49:58 +0000 (02:49 +0000)
committerbaobrien <baobrien@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 10 May 2016 02:49:58 +0000 (02:49 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@2800 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/src/freedv_api.c
codec2-dev/src/freedv_data_channel.c
codec2-dev/src/freedv_vhf_framing.c
codec2-dev/unittest/test_cohpsk_ch.c
codec2-dev/unittest/tfdmdv.c
codec2-dev/unittest/tfreedv_data_channel.c

index 53b75983f9599275a8867ea2b6ae2aff8d7f453e..af28fdd18ca8664d4b1e88b1a953004839f8274f 100644 (file)
@@ -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; i<nin; i++) {
             rx_float[i] = ((float)demod_in[i]);
         }
@@ -1362,9 +1363,11 @@ int freedv_get_version(void)
 
 void freedv_set_callback_txt(struct freedv *f, freedv_callback_rx rx, freedv_callback_tx tx, void *state)
 {
-    f->freedv_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)
index 32ba6eb7c9b7849fc856d28f386a622f0d5bc65b..810ed5072f53aec31dd58894043f348748a562af 100644 (file)
@@ -305,6 +305,8 @@ void freedv_data_set_header(struct freedv_data_channel *fdc, unsigned char *head
 \r
 int freedv_data_get_n_tx_frames(struct freedv_data_channel *fdc, size_t size)\r
 {\r
+    if (fdc->packet_tx_size == 0)\r
+        return 0;\r
     /* packet will be send in 'size' byte frames */\r
-    return (fdc->packet_tx_size + size-1) / size;\r
+    return (fdc->packet_tx_size - fdc->packet_tx_cnt + size-1) / size;\r
 }\r
index 11d59945a0f4870281de26c3d1da4df0cedcb5ff..7ead03430191bcca8357ec034370127140dab135 100644 (file)
@@ -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);
         }
     }
 }
index c77a28f3953e257b1637662cdac45ca8dd9208fa..fe2f90fd53cc3f71b0652515af6fa43056cdf427 100644 (file)
@@ -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) {
index 9fbdfdff73c1294133948cd6255bdc8e141a3ea5..686a2dd488208002b371e12603552760e19c5fcc 100644 (file)
@@ -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<FRAMES; f++) {
 
index b67fe9e662cd8175cfa62968c11a8d42315769f9..631feb8cf2d92f0da2a86deb623759244f80a95f 100644 (file)
@@ -222,6 +222,7 @@ int main(int argc, char **argv)
         int i;
         size_t check_size;
         unsigned char flags;
+        int nr_frames;
        
         freedv_data_channel_tx_frame(fdc, frame, frame_size, &from, &bcast, &crc, &end);
 
@@ -252,14 +253,28 @@ int main(int argc, char **argv)
 
         frame_data_pos += frame_size;
 
+        nr_frames = freedv_data_get_n_tx_frames(fdc, frame_size);
+
         if (frame_data_pos >= 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++;
+            }
         }
     }