9#include "stateupdate.h"
14extern EventGroupHandle_t xTaskEnableGroup;
15extern MessageBufferHandle_t xUsbTxBuff;
16extern SemaphoreHandle_t xUsbMutex;
30void vStateUpdate(
void *argument) {
31 const TickType_t xFrequency = pdMS_TO_TICKS(20);
33 unsigned int CANHigh = 0;
34 unsigned int CANLow = 0;
37 float avgPressCurrent = 0;
38 float avgPressPrevious = 0;
39 float avgVelCurrent = 0;
40 float avgVelPrevious = 0;
47 MemBuff *mem = StateHandle_getHandle(
"Memory").state;
48 enum State *flightState = StateHandle_getHandle(
"FlightState").state;
49 float *tilt = StateHandle_getHandle(
"Tilt").state;
50 float *altitude = StateHandle_getHandle(
"Altitude").state;
51 float *velocity = StateHandle_getHandle(
"Velocity").state;
52 SlidingWindow *avgVel = StateHandle_getHandle(
"AvgVelBuffer").state;
53 SlidingWindow *avgPress = StateHandle_getHandle(
"AvgPressBuffer").state;
57 TickType_t xLastWakeTime = xTaskGetTickCount();
58 vTaskDelayUntil(&xLastWakeTime, xFrequency);
65 id = CAN_HEADER_AEROBRAKES_RETRACT;
66 CAN_TX(CAN_AB, 8, CANHigh, CANLow,
id);
69 switch (*flightState) {
71 if (accel->
accelData[ZINDEX] >= ACCEL_LAUNCH) {
81 xEventGroupSetBits(xTaskEnableGroup, GROUP_TASK_ENABLE_FLASH);
82 xEventGroupSetBits(xTaskEnableGroup, GROUP_TASK_ENABLE_HIGHRES);
83 xEventGroupSetBits(xTaskEnableGroup, GROUP_TASK_ENABLE_LOWRES);
84 *flightState = LAUNCH;
89 avgVel->calculateMovingAverage(avgVel, &avgVelCurrent);
92 memcpy(&CANLow, altitude,
sizeof(
float));
93 id = CAN_HEADER_AEROBRAKES_DATA;
94 CAN_TX(CAN_AB, 8, CANHigh, CANLow,
id);
96 if ((avgVelCurrent - avgVelPrevious) < 0) {
101 *flightState = COAST;
103 avgVelPrevious = avgVelCurrent;
107 avgPress->calculateMovingAverage(avgPress, &avgPressCurrent);
109 CANHigh = 0x00000000;
110 memcpy(&CANLow, altitude,
sizeof(
float));
111 id = CAN_HEADER_AEROBRAKES_DATA;
112 CAN_TX(CAN_AB, 8, CANHigh, CANLow,
id);
115 if ((((avgPressCurrent - avgPressPrevious) > 0) + (*tilt >= 90) + (*velocity < 0.0f)) >= 2) {
117 GPIOB->ODR ^= 0x8000;
118 GPIOD->ODR ^= 0x8000;
120 *flightState = APOGEE;
122 taskENTER_CRITICAL();
131 u.ticks = xTaskGetTickCount();
134 mem->append(mem, HEADER_EVENT_APOGEE);
135 mem->appendBytes(mem, u.bytes,
sizeof(TickType_t));
138 avgPressPrevious = avgPressCurrent;
143 CANHigh = 0x00000000;
145 id = CAN_HEADER_AEROBRAKES_RETRACT;
146 CAN_TX(CAN_AB, 8, CANHigh, CANLow,
id);
148 GPIOD->ODR |= 0x8000;
150 if (*altitude <= MAIN_ALTITUDE_METERS) {
152 GPIOB->ODR ^= 0x8000;
153 GPIOD->ODR ^= 0x8000;
155 *flightState = DESCENT;
float accelData[KX134_1211_DATA_COUNT]
Processed accelerations array.