Update flight algorithm based on data collected from SN-1 Flight 1
[fw/altos] / ao_adc.c
index 9cd3d46c79f1252efd42b15a8a0657ae67c7a912..639c5f6c3b9281f6096c3d3b7308a4c7cacf53b5 100644 (file)
--- a/ao_adc.c
+++ b/ao_adc.c
@@ -35,10 +35,7 @@ ao_adc_sleep(void)
 void
 ao_adc_get(__xdata struct ao_adc *packet)
 {
-       uint8_t i = ao_adc_head;
-       if (i == 0)
-               i = AO_ADC_RING;
-       i--;
+       uint8_t i = ao_adc_ring_prev(ao_adc_head);
        memcpy(packet, &ao_adc_ring[i], sizeof (struct ao_adc));
 }
 
@@ -58,13 +55,26 @@ ao_adc_isr(void) interrupt 1
        } else {
                /* record this conversion series */
                ao_adc_ring[ao_adc_head].tick = ao_time();
-               ao_adc_head++;
-               if (ao_adc_head == AO_ADC_RING)
-                       ao_adc_head = 0;
+               ao_adc_head = ao_adc_ring_next(ao_adc_head);
                ao_wakeup(ao_adc_ring);
        }
 }
 
+static void
+ao_adc_dump(void)
+{
+       __xdata struct ao_adc   packet;
+       ao_adc_get(&packet);
+       printf("tick: %5u accel: %4d pres: %4d temp: %4d batt: %4d drogue: %4d main: %4d\n",
+              packet.tick, packet.accel >> 4, packet.pres >> 4, packet.temp >> 4,
+              packet.sense_d >> 4, packet.sense_m >> 4);
+}
+
+__code struct ao_cmds ao_adc_cmds[] = {
+       { 'a',  ao_adc_dump,    "a                                  Display current ADC values" },
+       { 0,    ao_adc_dump, NULL },
+};
+
 void
 ao_adc_init(void)
 {
@@ -78,5 +88,6 @@ ao_adc_init(void)
        /* enable interrupts */
        ADCIF = 0;
        IEN0 |= IEN0_ADCIE;
+       ao_cmd_register(&ao_adc_cmds[0]);
 }