#include "config.h" #include "init.h" #include "i2c.h" #include #include #include #include #include EventGroupHandle_t init_complete; static void init_stdio() { stdio_init_all(); } static void init_cyw34() { if (cyw43_arch_init_with_country(CFG_NET_COUNTRY)) panic("cyw43_arch_init_with_country failed\n"); } static void init_wifi() { // enable 'station' mode (connect to an access point instead of acting like one) cyw43_arch_enable_sta_mode(); if (cyw43_arch_wifi_connect_timeout_ms(CFG_NET_SSID, CFG_NET_PASS, CFG_NET_AUTH, CFG_NET_CONN_TIMEOUT)) panic("cyw43_arch_wifi_connect failed\n"); printf("connected to Wi-Fi\n"); // TODO: announce hostname(?) } static void async_init() { init_cyw34(); init_i2c(); #ifndef CFG_NET_DISABLE init_wifi(); #endif xEventGroupSetBits(init_complete, 1); // delete self vTaskDelete(NULL); } void init() { init_complete = xEventGroupCreate(); // used for debug `printf` and `panic` on errors init_stdio(); // defer other initialization until the task scheduler is running (important) xTaskCreate((TaskFunction_t) async_init, "init", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 4, NULL); } void await_init() { xEventGroupWaitBits(init_complete, 1, pdFALSE, pdFALSE, portMAX_DELAY); }