STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
mode.c
Go to the documentation of this file.
1#include "mode.h"
2
3#include "cmsis_os2.h"
4#include "emmc_stm32.h"
5#include "gnss_task.h"
6#include "idle_task.h"
7#include "main.h"
8#include "radio_task.h"
9#include "sensors_task.h"
10
13
14static void take(void) {
15 if (!lock) {
16 static const osMutexAttr_t attr = {"mode", osMutexPrioInherit, NULL, 0};
17 lock = osMutexNew(&attr);
18 }
20}
21
23 if (to >= FLIGHT_STATE_COUNT) {
24 return;
25 }
26 take();
27 flight_state_t from = state;
28 if (to != from) {
29 state = to;
31 /* The W5500 leaves reset before anything could use it. */
33 o.ethernet ? GPIO_PIN_SET : GPIO_PIN_RESET);
36 idle_task_set_active(o.idle_loop);
37 if (o.radio_sniff) {
39 } else {
41 }
42 (void)emmc_log_on_state(emmc_stm32_log(), from, to,
44 }
45 (void)osMutexRelease(lock);
46}
47
49 return state;
50}
51
53 flight_state_t next = state;
54 switch (mode_route_command(state, command, &next)) {
56 idle_task_command(command);
57 break;
58 case MODE_TRANSITION:
59 app_set_state(next);
60 break;
61 default:
62 break;
63 }
64}
#define ETH_RST_Pin
Definition main.h:118
#define ETH_RST_GPIO_Port
Definition main.h:119
flight_state_t
@ FLIGHT_SELF_TEST
@ FLIGHT_STATE_COUNT
void * osMutexId_t
Definition cmsis_os2.h:220
#define osMutexPrioInherit
Priority inherit protocol.
Definition cmsis_os2.h:194
uint32_t osKernelGetTickCount(void)
Get the RTOS kernel tick count.
Definition cmsis_os2.c:491
#define osWaitForever
Wait forever timeout value.
Definition cmsis_os2.h:173
osMutexId_t osMutexNew(const osMutexAttr_t *attr)
Create and Initialize a Mutex object.
osStatus_t osMutexAcquire(osMutexId_t mutex_id, uint32_t timeout)
Acquire a Mutex or timeout if it is locked.
osStatus_t osMutexRelease(osMutexId_t mutex_id)
Release a Mutex that was acquired by osMutexAcquire.
bool emmc_log_on_state(emmc_log_t *log, flight_state_t from, flight_state_t to, uint32_t now_ms)
Definition emmc_log.c:200
emmc_log_t * emmc_stm32_log(void)
Definition emmc_stm32.c:246
static ActuatorControllerState state
Definition main.cpp:57
void gnss_task_set_active(bool on)
Definition gnss_task.c:99
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
@ GPIO_PIN_SET
@ GPIO_PIN_RESET
#define NULL
Definition usbd_def.h:44
void idle_task_set_active(bool on)
Definition idle_task.c:124
void idle_task_command(mode_command_t command)
Definition idle_task.c:131
return o
Definition json.hpp:13897
flight_state_t app_state(void)
Definition mode.c:48
static osMutexId_t lock
Definition mode.c:11
static void take(void)
Definition mode.c:14
void app_command(mode_command_t command)
Definition mode.c:52
void app_set_state(flight_state_t to)
Definition mode.c:22
mode_route_t mode_route_command(flight_state_t state, mode_command_t command, flight_state_t *next)
Definition mode_core.c:23
mode_outputs_t mode_outputs(flight_state_t state)
Definition mode_core.c:3
@ MODE_TRANSITION
Definition mode_core.h:47
@ MODE_TO_IDLE_LOOP
Definition mode_core.h:46
#define MODE_SNIFF_SLEEP_MS
Definition mode_core.h:39
mode_command_t
Definition mode_core.h:43
#define MODE_SNIFF_RX_MS
Definition mode_core.h:38
void radio_task_start_sniff(uint32_t rx_ms, uint32_t sleep_ms)
void radio_task_start_continuous_rx(void)
void sensors_task_set_active(bool on)
Attributes structure for mutex.
Definition cmsis_os2.h:269