blob: 48f3774bc9f3ab0d0295ca9bcb3fe10bb83c6104 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#include "config.h"
#include "init.h"
#include <FreeRTOS.h>
#include <task.h>
#include <event_groups.h>
#include <pico/stdio.h>
#include <pico/cyw43_arch.h>
EventGroupHandle_t init_complete;
static void init_stdio() {
stdio_init_all();
}
static void init_cyw34() {
if (cyw43_arch_init_with_country(CONF_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(CONF_NET_SSID, CONF_NET_PASS, CYW43_AUTH_WPA2_AES_PSK, CONF_NET_CONN_TIMEOUT))
panic("cyw43_arch_wifi_connect failed\n");
// TODO: announce hostname(?)
}
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) [](void*) {
init_cyw34();
init_wifi();
// TODO: initialize i2c
xEventGroupSetBits(init_complete, 1);
// delete self
vTaskDelete(NULL);
}, "init", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 4, NULL);
}
void await_init() {
xEventGroupWaitBits(init_complete, 1, pdFALSE, pdFALSE, portMAX_DELAY);
}
|