altos: Use stdbool true/false instead of TRUE/FALSE
authorKeith Packard <keithp@keithp.com>
Thu, 16 Aug 2018 02:17:19 +0000 (19:17 -0700)
committerKeith Packard <keithp@keithp.com>
Wed, 3 Oct 2018 21:51:57 +0000 (14:51 -0700)
Signed-off-by: Keith Packard <keithp@keithp.com>
30 files changed:
src/draw/ao_line.c
src/drivers/ao_fat.c
src/drivers/ao_hmc5883.c
src/drivers/ao_lco.h
src/drivers/ao_mpu6000.c
src/drivers/ao_mpu9250.c
src/drivers/ao_packet_slave.c
src/drivers/ao_trng_send.c
src/drivers/ao_watchdog.c
src/kernel/ao.h
src/kernel/ao_fake_flight.c
src/kernel/ao_power.c
src/kernel/ao_pyro.c
src/kernel/ao_sample.c
src/kernel/ao_sample.h
src/product/ao_telemetrum.c
src/product/ao_telemini.c
src/product/ao_telenano.c
src/product/ao_teleterra.c
src/stm-demo/ao_demo.c
src/stm/ao_i2c_stm.c
src/teleballoon-v2.0/ao_teleballoon.c
src/telemega-v0.1/ao_telemega.c
src/telemega-v1.0/ao_telemega.c
src/telemega-v2.0/ao_telemega.c
src/telemega-v3.0/ao_telemega.c
src/telemetrum-v2.0/ao_telemetrum.c
src/telemetrum-v3.0/ao_telemetrum.c
src/telemini-v3.0/ao_telemini.c
src/test/ao_flight_test.c

index ed1fc21c89b38c592f841543316816a6a34823e9..742b3aa3ec1cc46eca23f0aa634383c768acd74e 100644 (file)
@@ -159,28 +159,28 @@ ao_clip_line(struct ao_cc *c, struct ao_cbox *b)
        /* Clip major axis */
        if (c->major < b->maj1) {
                if (c->sign_major <= 0)
-                       return FALSE;
+                       return false;
                adjust_major = b->maj1 - c->major;
        } else if (c->major >= b->maj2) {
                if (c->sign_major >= 0)
-                       return FALSE;
+                       return false;
                adjust_major = c->major - (b->maj2-1);
        }
 
        /* Clip minor axis */
        if (c->minor < b->min1) {
                if (c->sign_minor <= 0)
-                       return FALSE;
+                       return false;
                adjust_minor = b->min1 - c->minor;
        } else if (c->minor >= b->min2) {
                if (c->sign_minor >= 0)
-                       return FALSE;
+                       return false;
                adjust_minor = c->minor - (b->min2-1);
        }
 
        /* If unclipped, we're done */
        if (adjust_major == 0 && adjust_minor == 0)
-               return TRUE;
+               return true;
 
        /* See how much minor adjustment would happen during
         * a major clip. This is a bit tricky because line drawing
@@ -208,7 +208,7 @@ ao_clip_line(struct ao_cc *c, struct ao_cbox *b)
        c->major += c->sign_major * adjust_major;
        c->minor += c->sign_minor * adjust_minor;
 
-       return TRUE;
+       return true;
 }
 
 void
@@ -276,8 +276,8 @@ ao_line(const struct ao_bitmap      *dst,
        e3 = e2 - e1;
        e = e - e1;
 
-       clip_1.first = TRUE;
-       clip_2.first = FALSE;
+       clip_1.first = true;
+       clip_2.first = false;
        clip_2.e = clip_1.e = e;
        clip_2.e1 = clip_1.e1 = e1;
        clip_2.e3 = clip_1.e3 = e3;
index 43e7df238c800eedf2face8c68ddb043273a1fd8..e9ff2789f2310a00b7bde2c772f82930493e5047 100644 (file)
@@ -990,7 +990,7 @@ ao_fat_sync(void)
 /*
  * ao_fat_full
  *
- * Returns TRUE if the filesystem cannot take
+ * Returns true if the filesystem cannot take
  * more data
  */
 
index c33aa536fde6578d8aaed0bac73454b181fcf93b..f470570829e82eebd6ae34a978acf9eee3a8a683 100644 (file)
@@ -35,7 +35,7 @@ ao_hmc5883_reg_write(uint8_t addr, uint8_t data)
        d[1] = data;
        ao_i2c_get(AO_HMC5883_I2C_INDEX);
        ao_i2c_start(AO_HMC5883_I2C_INDEX, HMC5883_ADDR_WRITE);
-       ao_i2c_send(d, 2, AO_HMC5883_I2C_INDEX, TRUE);
+       ao_i2c_send(d, 2, AO_HMC5883_I2C_INDEX, true);
        ao_i2c_put(AO_HMC5883_I2C_INDEX);
        ao_hmc5883_addr = addr + 1;
 }
@@ -46,10 +46,10 @@ ao_hmc5883_read(uint8_t addr, uint8_t *data, uint8_t len)
        ao_i2c_get(AO_HMC5883_I2C_INDEX);
        if (addr != ao_hmc5883_addr) {
                ao_i2c_start(AO_HMC5883_I2C_INDEX, HMC5883_ADDR_WRITE);
-               ao_i2c_send(&addr, 1, AO_HMC5883_I2C_INDEX, FALSE);
+               ao_i2c_send(&addr, 1, AO_HMC5883_I2C_INDEX, false);
        }
        ao_i2c_start(AO_HMC5883_I2C_INDEX, HMC5883_ADDR_READ);
-       ao_i2c_recv(data, len, AO_HMC5883_I2C_INDEX, TRUE);
+       ao_i2c_recv(data, len, AO_HMC5883_I2C_INDEX, true);
        ao_i2c_put(AO_HMC5883_I2C_INDEX);
        ao_hmc5883_addr = 0xff;
 }
@@ -103,7 +103,7 @@ ao_hmc5883_setup(void)
 
        ao_i2c_get(AO_HMC5883_I2C_INDEX);
        present = ao_i2c_start(AO_HMC5883_I2C_INDEX, HMC5883_ADDR_READ);
-       ao_i2c_recv(&d, 1, AO_HMC5883_I2C_INDEX, TRUE);
+       ao_i2c_recv(&d, 1, AO_HMC5883_I2C_INDEX, true);
        ao_i2c_put(AO_HMC5883_I2C_INDEX);
 
        if (!present)
index 2958fbccc33cae7ec874b1edfaa66dc63e5f4aaf..cdc19d3d76837a7d7627d5dd250eb431005733cf 100644 (file)
@@ -35,7 +35,7 @@ extern uint8_t        ao_lco_debug;
 #endif
 
 #if AO_LCO_DRAG
-extern uint8_t ao_lco_drag_race;       /* TRUE when drag race mode enabled */
+extern uint8_t ao_lco_drag_race;       /* true when drag race mode enabled */
 #endif
 
 extern uint8_t ao_lco_pad;             /* Currently selected pad */
index 81d3c16cc76479f3eb2298fb23292d0d3191714a..8c85ab01fd82c00041128a9147e3f6a26f2caa39 100644 (file)
@@ -55,7 +55,7 @@ _ao_mpu6000_reg_write(uint8_t addr, uint8_t value)
 #else
        ao_i2c_get(AO_MPU6000_I2C_INDEX);
        ao_i2c_start(AO_MPU6000_I2C_INDEX, MPU6000_ADDR_WRITE);
-       ao_i2c_send(d, 2, AO_MPU6000_I2C_INDEX, TRUE);
+       ao_i2c_send(d, 2, AO_MPU6000_I2C_INDEX, true);
        ao_i2c_put(AO_MPU6000_I2C_INDEX);
 #endif
 }
@@ -72,9 +72,9 @@ _ao_mpu6000_read(uint8_t addr, void *data, uint8_t len)
 #else
        ao_i2c_get(AO_MPU6000_I2C_INDEX);
        ao_i2c_start(AO_MPU6000_I2C_INDEX, MPU6000_ADDR_WRITE);
-       ao_i2c_send(&addr, 1, AO_MPU6000_I2C_INDEX, FALSE);
+       ao_i2c_send(&addr, 1, AO_MPU6000_I2C_INDEX, false);
        ao_i2c_start(AO_MPU6000_I2C_INDEX, MPU6000_ADDR_READ);
-       ao_i2c_recv(data, len, AO_MPU6000_I2C_INDEX, TRUE);
+       ao_i2c_recv(data, len, AO_MPU6000_I2C_INDEX, true);
        ao_i2c_put(AO_MPU6000_I2C_INDEX);
 #endif
 }
@@ -92,9 +92,9 @@ _ao_mpu6000_reg_read(uint8_t addr)
 #else
        ao_i2c_get(AO_MPU6000_I2C_INDEX);
        ao_i2c_start(AO_MPU6000_I2C_INDEX, MPU6000_ADDR_WRITE);
-       ao_i2c_send(&addr, 1, AO_MPU6000_I2C_INDEX, FALSE);
+       ao_i2c_send(&addr, 1, AO_MPU6000_I2C_INDEX, false);
        ao_i2c_start(AO_MPU6000_I2C_INDEX, MPU6000_ADDR_READ);
-       ao_i2c_recv(&value, 1, AO_MPU6000_I2C_INDEX, TRUE);
+       ao_i2c_recv(&value, 1, AO_MPU6000_I2C_INDEX, true);
        ao_i2c_put(AO_MPU6000_I2C_INDEX);
 #endif
        return value;
index 9dce9f1a5a0d4f79f241c50e2a238a09d2b2e906..74e444a9d0950ba21a4439d19a5adcc5999a0f3c 100644 (file)
@@ -63,7 +63,7 @@ _ao_mpu9250_reg_write(uint8_t addr, uint8_t value)
 #else
        ao_i2c_get(AO_MPU9250_I2C_INDEX);
        ao_i2c_start(AO_MPU9250_I2C_INDEX, MPU9250_ADDR_WRITE);
-       ao_i2c_send(d, 2, AO_MPU9250_I2C_INDEX, TRUE);
+       ao_i2c_send(d, 2, AO_MPU9250_I2C_INDEX, true);
        ao_i2c_put(AO_MPU9250_I2C_INDEX);
 #endif
 }
@@ -80,9 +80,9 @@ _ao_mpu9250_read(uint8_t addr, void *data, uint8_t len)
 #else
        ao_i2c_get(AO_MPU9250_I2C_INDEX);
        ao_i2c_start(AO_MPU9250_I2C_INDEX, MPU9250_ADDR_WRITE);
-       ao_i2c_send(&addr, 1, AO_MPU9250_I2C_INDEX, FALSE);
+       ao_i2c_send(&addr, 1, AO_MPU9250_I2C_INDEX, false);
        ao_i2c_start(AO_MPU9250_I2C_INDEX, MPU9250_ADDR_READ);
-       ao_i2c_recv(data, len, AO_MPU9250_I2C_INDEX, TRUE);
+       ao_i2c_recv(data, len, AO_MPU9250_I2C_INDEX, true);
        ao_i2c_put(AO_MPU9250_I2C_INDEX);
 #endif
 }
@@ -100,9 +100,9 @@ _ao_mpu9250_reg_read(uint8_t addr)
 #else
        ao_i2c_get(AO_MPU9250_I2C_INDEX);
        ao_i2c_start(AO_MPU9250_I2C_INDEX, MPU9250_ADDR_WRITE);
-       ao_i2c_send(&addr, 1, AO_MPU9250_I2C_INDEX, FALSE);
+       ao_i2c_send(&addr, 1, AO_MPU9250_I2C_INDEX, false);
        ao_i2c_start(AO_MPU9250_I2C_INDEX, MPU9250_ADDR_READ);
-       ao_i2c_recv(&value, 1, AO_MPU9250_I2C_INDEX, TRUE);
+       ao_i2c_recv(&value, 1, AO_MPU9250_I2C_INDEX, true);
        ao_i2c_put(AO_MPU9250_I2C_INDEX);
 #endif
        return value;
index b877128ab0ed78f1ed4da64702e87645b4ccd50c..3ae1138ce0df5cffeb2dffc6c6b65891100bdcee 100644 (file)
@@ -28,7 +28,7 @@ ao_packet_slave(void)
                if (ao_packet_recv(0)) {
                        ao_xmemcpy(&ao_tx_packet.callsign, &ao_rx_packet.packet.callsign, AO_MAX_CALLSIGN);
 #if HAS_FLIGHT
-                       ao_flight_force_idle = TRUE;
+                       ao_flight_force_idle = true;
 #endif
                        ao_packet_send();
                }
index 4e02c0ce75d8c1bd04f68b3527c9e9e6dee42624..e8df4cea8e69f25861a73a81acfedcc5f372dfad 100644 (file)
@@ -48,7 +48,7 @@ ao_trng_start(void)
                         * aren't of poor quality
                         */
                        ao_delay(delay);
-                       trng_running = TRUE;
+                       trng_running = true;
                }
                ao_mutex_put(&random_mutex);
        }
@@ -213,7 +213,7 @@ static void ao_trng_suspend(void *arg)
 #ifdef AO_TRNG_ENABLE_PORT
        ao_gpio_set(AO_TRNG_ENABLE_PORT, AO_TRNG_ENABLE_BIT, AO_TRNG_ENABLE_PIN, 0);
 #endif
-       trng_running = FALSE;
+       trng_running = false;
 }
 
 static void ao_trng_resume(void *arg)
index c0582c12cbc1cd1ff4dc48e5d2b478aaf115f7b8..4d774c3ae2d5bbdda3ecb6dc07c1da53d0482f32 100644 (file)
@@ -18,7 +18,7 @@
 
 #include <ao.h>
 
-static int     ao_watchdog_enabled = TRUE;
+static int     ao_watchdog_enabled = true;
 
 static void
 ao_watchdog(void)
index 3beeb8800ded9d83b23d48677004507cd29dcbdc..cdcdadc34d8bc1f71f62f603b60d2ddf2404cca2 100644 (file)
@@ -23,6 +23,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <stddef.h>
+#include <stdbool.h>
 #include <ao_pins.h>
 #include <ao_arch.h>
 
@@ -35,9 +36,6 @@
 extern int ao_putchar(char c);
 extern char ao_getchar(void);
 
-#define TRUE 1
-#define FALSE 0
-
 #ifndef HAS_TASK
 #define HAS_TASK       1
 #endif
index 8da0141c4883afffd2417817200f446f335e8f08..ec8691e9ad13425f014a13473442284561e28b94 100644 (file)
@@ -54,7 +54,7 @@ ao_fake_data_read(void)
        uint8_t *d = (void *) &ao_fake_next;
 
        if (getchar() == 0)
-               return FALSE;
+               return false;
        for (i = 0; i < sizeof (struct ao_data); i++)
                *d++ = getchar();
        if (!ao_fake_has_offset) {
@@ -64,7 +64,7 @@ ao_fake_data_read(void)
        } else
                ao_fake_next.tick += ao_fake_tick_offset;
        ao_fake_has_next = 1;
-       return TRUE;
+       return true;
 }
 
 static void
@@ -118,10 +118,10 @@ ao_fake_calib_read(void)
                ) {
                printf ("Calibration data major version mismatch %d.%d <= %d.%d\n",
                        ao_calib.major, ao_calib.minor, AO_FAKE_CALIB_MAJOR, AO_FAKE_CALIB_MINOR);
-               return FALSE;
+               return false;
        }
        ao_fake_calib_set(&ao_calib);
-       return TRUE;
+       return true;
 }
 
 static void
index bf59ab5396503fbe5db1fc1b408db767c26921d6..8c490604decffcc9ed30cca213c841aeda9b0ca5 100644 (file)
@@ -26,7 +26,7 @@ ao_power_register(struct ao_power *power)
 {
        if (power->registered)
                return;
-       power->registered = TRUE;
+       power->registered = true;
        if (tail) {
                tail->next = power;
                power->prev = tail;
@@ -44,7 +44,7 @@ ao_power_unregister(struct ao_power *power)
 {
        if (!power->registered)
                return;
-       power->registered = FALSE;
+       power->registered = false;
        if (power->prev)
                power->prev->next = power->next;
        else
index 173cf8a3254f4b523d1633b2aa295fca08792a43..c01c951216c8db71d0d05025b4e4664174392abe 100644 (file)
@@ -205,9 +205,9 @@ ao_pyro_ready(struct ao_pyro *pyro)
                default:
                        continue;
                }
-               return FALSE;
+               return false;
        }
-       return TRUE;
+       return true;
 }
 
 #ifndef AO_FLIGHT_TEST
index 115eae802a2cc9a0daba5d8e2532662f6acc39bd..9cba36c1004b37ec31717e7c4431e08ede4bf615 100644 (file)
@@ -277,7 +277,7 @@ ao_sample_preflight(void)
                ao_accel_scale = to_fix_32(GRAVITY * 2 * 16) / ao_accel_2g;
 #endif
                ao_sample_preflight_set();
-               ao_preflight = FALSE;
+               ao_preflight = false;
        }
 }
 
@@ -398,5 +398,5 @@ ao_sample_init(void)
        ao_sample_set_all_orients();
 #endif
        ao_sample_data = ao_data_head;
-       ao_preflight = TRUE;
+       ao_preflight = true;
 }
index af6eca4e75d8a601e61078f8ec3b5e8584b91c06..4c51a58c3f0a0089f893f3004a239b3e37d7b3cf 100644 (file)
@@ -154,7 +154,7 @@ extern uint8_t      ao_sample_orient_pos;
 
 void ao_sample_init(void);
 
-/* returns FALSE in preflight mode, TRUE in flight mode */
+/* returns false in preflight mode, true in flight mode */
 uint8_t ao_sample(void);
 
 /*
index a10cb384332f9f570f4f03f7e7ff0424303de238..1266fee74f2f59706120b0541b9fecb23738f375 100644 (file)
@@ -60,7 +60,7 @@ main(void)
        ao_gps_report_init();
        ao_telemetry_init();
        ao_radio_init();
-       ao_packet_slave_init(FALSE);
+       ao_packet_slave_init(false);
        ao_igniter_init();
 #if HAS_DBG
        ao_dbg_init();
index 14414a48d44d562f46dfb1c7bc2dab3e416c2dce..d9cb676b780db09447cfad71c07e476bbbb874e5 100644 (file)
@@ -56,7 +56,7 @@ main(void)
        ao_report_init();
        ao_telemetry_init();
        ao_radio_init();
-       ao_packet_slave_init(TRUE);
+       ao_packet_slave_init(true);
        ao_igniter_init();
        ao_config_init();
        ao_start_scheduler();
index ac08979f9d976ba872eca6510b99d5e1f3cf6b53..1b04edc5d4a163a1e86c94e7a54b5491a6f91a89 100644 (file)
@@ -40,7 +40,7 @@ main(void)
        ao_report_init();
        ao_telemetry_init();
        ao_radio_init();
-       ao_packet_slave_init(TRUE);
+       ao_packet_slave_init(true);
        ao_config_init();
        ao_start_scheduler();
 }
index 0142f9e329004ab713504c3a351490c3f0de49ed..ae129233d5e2a1c209679d834981b119e1825645 100644 (file)
@@ -34,7 +34,7 @@ main(void)
        ao_cmd_init();
        ao_usb_init();
        ao_serial_init();
-       ao_monitor_init(AO_LED_GREEN, TRUE);
+       ao_monitor_init(AO_LED_GREEN, true);
        ao_radio_init();
        ao_config_init();
        ao_start_scheduler();
index b0d03840c22348345fcf1b02e1ce32cf5adb6bf3..4b963e4281fa3e5ebb3e5478d3deae5e9395284f 100644 (file)
@@ -125,7 +125,7 @@ ao_i2c_write(void) {
        for (i = 0; i < 10; i++) {
                ao_i2c_get(0);
                if (ao_i2c_start(0, 0x55))
-                       ao_i2c_send(data, 4, 0, TRUE);
+                       ao_i2c_send(data, 4, 0, true);
                else {
                        printf ("i2c start failed\n");
                        ao_i2c_put(0);
index 59cad4951058fce99d360da9ce91cbc47f58720c..23805aa8929a1bbc957ba3c20dadff8643ad3ee0 100644 (file)
@@ -275,7 +275,7 @@ ao_i2c_send(void *block, uint16_t len, uint8_t index, uint8_t stop)
                stm_i2c->cr1 = AO_STM_I2C_CR1 | (1 << STM_I2C_CR1_STOP);
                ao_i2c_wait_stop(index);
        }
-       return TRUE;
+       return true;
 }
 
 void
@@ -300,10 +300,10 @@ uint8_t
 ao_i2c_recv(void *block, uint16_t len, uint8_t index, uint8_t stop)
 {
        struct stm_i2c  *stm_i2c = ao_i2c_stm_info[index].stm_i2c;
-       uint8_t         ret = TRUE;
+       uint8_t         ret = true;
 
        if (len == 0)
-               return TRUE;
+               return true;
        if (len == 1) {
                ao_i2c_recv_data[index] = block;
                ao_i2c_recv_len[index] = 1;
index 2432c2729e9d45559d02a4c075c4e549d33b116f..acb11f44b998079abea0af134a5768d496e20cd1 100644 (file)
@@ -77,7 +77,7 @@ main(void)
        ao_gps_report_metrum_init();
        ao_telemetry_init();
        ao_radio_init();
-       ao_packet_slave_init(FALSE);
+       ao_packet_slave_init(false);
        ao_companion_init();
 
        ao_config_init();
index 3cfc9b4479aa8a5a9d7e6573a6ad8c4fea96a291..f8b7ecfad41e2d3e216a6ae8772e42bfa5c7220a 100644 (file)
@@ -85,7 +85,7 @@ main(void)
        ao_gps_report_mega_init();
        ao_telemetry_init();
        ao_radio_init();
-       ao_packet_slave_init(FALSE);
+       ao_packet_slave_init(false);
        ao_igniter_init();
        ao_companion_init();
        ao_pyro_init();
index 2deb852e1c90e2c5ae2790ba81c2ba4475495730..50428b61d77941795f90f17cf3c0ce4b76ad7cba 100644 (file)
@@ -85,7 +85,7 @@ main(void)
        ao_gps_report_mega_init();
        ao_telemetry_init();
        ao_radio_init();
-       ao_packet_slave_init(FALSE);
+       ao_packet_slave_init(false);
        ao_igniter_init();
        ao_companion_init();
        ao_pyro_init();
index 7a1c46ae5682556c07901aeee2a60c1b7f0a343f..6a58547eda8b58d7b51785fe611c85737c180b63 100644 (file)
@@ -86,7 +86,7 @@ main(void)
        ao_gps_report_mega_init();
        ao_telemetry_init();
        ao_radio_init();
-       ao_packet_slave_init(FALSE);
+       ao_packet_slave_init(false);
        ao_igniter_init();
        ao_companion_init();
        ao_pyro_init();
index 2259c751e8875964bc7f7281c0d67a24c7039b1f..2577f90c60fab7c9765d1e7debea0e547c1a8f2c 100644 (file)
@@ -82,7 +82,7 @@ main(void)
        ao_gps_report_mega_init();
        ao_telemetry_init();
        ao_radio_init();
-       ao_packet_slave_init(FALSE);
+       ao_packet_slave_init(false);
        ao_igniter_init();
        ao_companion_init();
        ao_pyro_init();
index 5cf42a8d861775946e7ab31b29391593aab27eb6..65f9be2c0bdd00ee8d98a84d4a2c2f03b3229199 100644 (file)
@@ -77,7 +77,7 @@ main(void)
        ao_gps_report_metrum_init();
        ao_telemetry_init();
        ao_radio_init();
-       ao_packet_slave_init(FALSE);
+       ao_packet_slave_init(false);
        ao_igniter_init();
        ao_companion_init();
 
index 6349d18831f3f2bad5be8ddcb50c29a1c8c245d4..2bb5192aef97d6014464cbcbab386c81cab47700 100644 (file)
@@ -77,7 +77,7 @@ main(void)
        ao_gps_report_metrum_init();
        ao_telemetry_init();
        ao_radio_init();
-       ao_packet_slave_init(FALSE);
+       ao_packet_slave_init(false);
        ao_igniter_init();
        ao_companion_init();
 
index a50268b9001ffd0247495460f469554d99343794..a2c0a59886cce8209c5a89c74e8efed2906ea8e5 100644 (file)
@@ -68,7 +68,7 @@ main(void)
        ao_report_init();
        ao_telemetry_init();
        ao_radio_init();
-       ao_packet_slave_init(TRUE);
+       ao_packet_slave_init(true);
        ao_igniter_init();
        ao_config_init();
 
index a171930e75a87b20d77954b19c5940afa7a4c16a..6d007575c7f91d2871ce0a223f15ada7261890c9 100644 (file)
@@ -227,8 +227,8 @@ ao_gps_angle(void)
 
 extern enum ao_flight_state ao_flight_state;
 
-#define FALSE 0
-#define TRUE 1
+#define false 0
+#define true 1
 
 volatile struct ao_data ao_data_ring[AO_DATA_RING];
 volatile uint8_t ao_data_head;