main: add AutoBaud task handling
diff --git a/src/main.c b/src/main.c
index 72cfd54..47d476b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -41,6 +41,7 @@
 #include "probe_config.h"
 #include "probe.h"
 #include "cdc_uart.h"
+#include "autobaud.h"
 #include "get_serial.h"
 #include "tusb_edpt_handler.h"
 #include "DAP.h"
@@ -58,6 +59,8 @@
 #define TUD_TASK_PRIO  (tskIDLE_PRIORITY + 2)
 #define DAP_TASK_PRIO  (tskIDLE_PRIORITY + 1)
 
+#define AUTOBAUD_TASK_PRIO  (tskIDLE_PRIORITY + 1)
+
 TaskHandle_t dap_taskhandle, tud_taskhandle, mon_taskhandle;
 
 static int was_configured;
@@ -230,6 +233,9 @@
   if (was_configured) {
 	  vTaskSuspend(uart_taskhandle);
 	  vTaskSuspend(dap_taskhandle);
+    if (autobaud_running)
+      autobaud_wait_stop();
+    vTaskSuspend(autobaud_taskhandle);
   }
   /* slow down clk_sys for power saving ? */
 }
@@ -240,6 +246,7 @@
   if (was_configured) {
 	  vTaskResume(uart_taskhandle);
 	  vTaskResume(dap_taskhandle);
+    vTaskResume(autobaud_taskhandle);
   }
 }
 
@@ -250,6 +257,10 @@
   vTaskSuspend(dap_taskhandle);
   vTaskDelete(uart_taskhandle);
   vTaskDelete(dap_taskhandle);
+  if (autobaud_running)
+    autobaud_wait_stop();
+  vTaskSuspend(autobaud_taskhandle);
+  vTaskDelete(autobaud_taskhandle);
   was_configured = 0;
 }
 
@@ -261,6 +272,9 @@
     xTaskCreate(cdc_thread, "UART", configMINIMAL_STACK_SIZE, NULL, UART_TASK_PRIO, &uart_taskhandle);
     /* Lowest priority thread is debug - need to shuffle buffers before we can toggle swd... */
     xTaskCreate(dap_thread, "DAP", configMINIMAL_STACK_SIZE, NULL, DAP_TASK_PRIO, &dap_taskhandle);
+    /* Autobaud detection using PIO as a frequency counter */
+    xTaskCreate(autobaud_thread, "ABR", configMINIMAL_STACK_SIZE, NULL, AUTOBAUD_TASK_PRIO, &autobaud_taskhandle);
+    vTaskCoreAffinitySet(autobaud_taskhandle, (1 << 1));
     was_configured = 1;
   }
 }