aboutsummaryrefslogtreecommitdiff
path: root/main/init.h
blob: 97b2e201e8e4d162fe0622a7b44953daf783276d (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
#pragma once

#include <FreeRTOS.h>
#include <event_groups.h>

/**
 * @brief init function complete event group handle
 *
 * This is required to make sure the main task waits until initialization is
 * complete. Due to the combination of FreeRTOS + lwIP, the initialization
 * should be done while the task scheduler is running. Specifically the
 * cyw43_arch_init functions make the pico hang indefinitely when used while
 * the task scheduler is not running.
 *
 * @note `init_complete` only utilizes LSB, so `uxBitsToWaitFor` should always
 * be set to *1*
 */
extern EventGroupHandle_t init_complete;

/**
 * @brief initialize all peripherals on the pico
 *
 * This function only synchronously initializes the standard input/output (used
 * for `printf` and `panic`), and queues all other types of initialization in
 * the `init` task using FreeRTOS.
 *
 * @note Tasks dependent on the wifi being initialized should use the
 * `init_complete` event group to wait for initialization to complete!
 */
void init();

/**
 * @brief block task until all initialization is complete
 *
 * utility function, see above comments
 */
void await_init();