altos: Make profiling Viterbi decoder more useful
[fw/altos] / src / drivers / ao_cc1120.c
index c974613e0a49f2cb60280446f54cd0bb277d7a60..1d28148ba2b4a74366a87c345cad72e6f9ebb02d 100644 (file)
@@ -605,8 +605,10 @@ ao_radio_rx_isr(void)
                        rx_data[rx_data_cur++] = d;
                if (rx_waiting && rx_data_cur - rx_data_consumed >= AO_FEC_DECODE_BLOCK) {
 #if AO_PROFILE
-                       if (rx_data_consumed == 0)
+                       if (!rx_packet_tick)
                                rx_packet_tick = ao_profile_tick();
+                       if (rx_data_cur < rx_data_count)
+                               return;
 #endif
                        rx_waiting = 0;
                        ao_wakeup(&ao_radio_wake);
@@ -630,6 +632,9 @@ ao_radio_rx_wait(void)
        if (ao_radio_abort)
                return 0;
        rx_data_consumed += AO_FEC_DECODE_BLOCK;
+#if AO_PROFILE
+       return rx_data_cur - rx_data_consumed;
+#endif
        return AO_FEC_DECODE_BLOCK;
 }
 
@@ -649,6 +654,7 @@ ao_radio_recv(__xdata void *d, uint8_t size)
        }
 #if AO_PROFILE
        rx_start_tick = ao_profile_tick();
+       rx_packet_tick = 0;
 #endif
        len = size + 2;                 /* CRC bytes */
        len += 1 + ~(len & 1);          /* 1 or two pad bytes */
@@ -690,12 +696,7 @@ ao_radio_recv(__xdata void *d, uint8_t size)
 
        ao_radio_put();
 
-       /* Construct final packet */
-
-       if (ret && ((uint8_t *) d)[size] == 0 && ((uint8_t *)d)[size+1] == 0)
-               ((uint8_t *) d)[size + 1] = 0x80;
-       else
-               ((uint8_t *) d)[size + 1] = 0x00;
+       /* Store the received RSSI value; the crc-OK byte is already done */
 
        ((uint8_t *) d)[size] = (uint8_t) rssi;