altosui: Add config and pyro tabs to graph widget
[fw/altos] / src / metro-m0 / metro-m0.c
index 32b241ec5d2ebc792d5dbb90f7f0a3719fd39ba4..5fe7723be83c72848f68388193213c6f5f019e12 100644 (file)
 #include <ao.h>
 #include <ao_led.h>
 #include <ao_dma_samd21.h>
+#include <ao_exti.h>
 
-#define SNEK_CS_PORT   (&samd21_port_a)
-#define SNEK_CS_PIN    (11)
-#define SNEK_SPI_INDEX AO_SPI_0_PA08_PA09_PA10
-#define SNEK_SPI_SPEED ao_spi_speed(1000000)
+static int     pressed;
 
-static const uint8_t spi_test[] = {
-       0xaa,
-       0xcc,
-       0xff,
-       0x00
-};
+static void
+ao_button_callback(void)
+{
+       pressed = 1;
+       ao_wakeup(&pressed);
+}
 
 static void
-ao_spi_test(void)
+ao_beep_test(void)
 {
-       ao_spi_get_bit(SNEK_CS_PORT, SNEK_CS_PIN, SNEK_SPI_INDEX, SNEK_SPI_SPEED);
-       ao_spi_send(spi_test, sizeof(spi_test), SNEK_SPI_INDEX);
-       ao_spi_put_bit(SNEK_CS_PORT, SNEK_CS_PIN, SNEK_SPI_INDEX);
+       AO_BEEP_TCC->ctrlbset = (SAMD21_TCC_CTRLB_CMD_READSYNC << SAMD21_TCC_CTRLB_CMD);
+       printf("pressed timer %ld\n", AO_BEEP_TCC->count);
+       fflush(stdout);
+       ao_beep_for(AO_BEEP_MID_DEFAULT, AO_MS_TO_TICKS(200));
 }
 
-const struct ao_cmds ao_spi_cmds[] = {
-       { ao_spi_test,  "s \0Send some bytes over spi" },
+static void
+ao_button(void)
+{
+       ao_exti_setup(&samd21_port_a, 10, AO_EXTI_MODE_FALLING | AO_EXTI_MODE_PULL_UP, ao_button_callback);
+       ao_exti_enable(&samd21_port_a, 10);
+       for (;;) {
+               ao_arch_block_interrupts();
+               pressed = 0;
+               while (!pressed)
+                       ao_sleep(&pressed);
+               ao_arch_release_interrupts();
+               ao_beep_test();
+       }
+}
+
+static struct ao_task ao_button_task;
+
+const struct ao_cmds ao_test_cmds[] = {
+       { ao_beep_test, "b \0beep" },
        { 0, NULL },
 };
 
@@ -48,11 +64,19 @@ int main(void)
        ao_task_init();
        ao_timer_init();
        ao_dma_init();
+       ao_exti_init();
        ao_spi_init();
+       ao_adc_init();
+       ao_serial_init();
+       ao_gps_init();
+       ao_beep_init();
        ao_usb_init();
-       ao_cmd_register(ao_spi_cmds);
-       ao_spi_init_cs(&samd21_port_a, 1 << 11); /* analog 8 for CS */
+       ao_storage_init();
        ao_cmd_init();
+
+       ao_cmd_register(ao_test_cmds);
+       ao_add_task(&ao_button_task, ao_button, "button");
        ao_start_scheduler();
+
        return 0;
 }