10#include "stateupdate.h"
12extern EventGroupHandle_t xTaskEnableGroup;
13extern MessageBufferHandle_t xUsbTxBuff;
14extern SemaphoreHandle_t xUsbMutex;
28void vStateUpdate(
void *argument) {
29 const TickType_t xFrequency = pdMS_TO_TICKS(20);
31 unsigned int CANHigh = 0;
32 unsigned int CANLow = 0;
35 float avgPressCurrent = 0;
36 float avgPressPrevious = 0;
37 float avgVelCurrent = 0;
38 float avgVelPrevious = 0;
43 MemBuff *mem = StateHandle_getHandle(
"Memory").state;
44 enum State *flightState = StateHandle_getHandle(
"FlightState").state;
45 float *tilt = StateHandle_getHandle(
"Tilt").state;
46 float *altitude = StateHandle_getHandle(
"Altitude").state;
47 float *velocity = StateHandle_getHandle(
"Velocity").state;
48 SlidingWindow *avgVel = StateHandle_getHandle(
"AvgVelBuffer").state;
49 SlidingWindow *avgPress = StateHandle_getHandle(
"AvgPressBuffer").state;
53 TickType_t xLastWakeTime = xTaskGetTickCount();
54 vTaskDelayUntil(&xLastWakeTime, xFrequency);
56 switch (*flightState) {
58 if (accel->
accelData[ZINDEX] >= ACCEL_LAUNCH) {
59 xEventGroupSetBits(xTaskEnableGroup, GROUP_TASK_ENABLE_FLASH);
60 xEventGroupSetBits(xTaskEnableGroup, GROUP_TASK_ENABLE_HIGHRES);
61 xEventGroupSetBits(xTaskEnableGroup, GROUP_TASK_ENABLE_LOWRES);
62 *flightState = LAUNCH;
67 avgVel->calculateMovingAverage(avgVel, &avgVelCurrent);
69 if ((avgVelCurrent - avgVelPrevious) < 0) {
72 avgVelPrevious = avgVelCurrent;
76 avgPress->calculateMovingAverage(avgPress, &avgPressCurrent);
79 if ((((avgPressCurrent - avgPressPrevious) > 0) + (*tilt >= 90) + (*velocity < 0.0f)) >= 2) {
80 *flightState = APOGEE;
87 u.ticks = xTaskGetTickCount();
90 mem->append(mem, HEADER_EVENT_APOGEE);
91 mem->appendBytes(mem, u.bytes,
sizeof(TickType_t));
94 avgPressPrevious = avgPressCurrent;
101 if (*altitude <= MAIN_ALTITUDE_METERS) {
102 *flightState = DESCENT;
DeviceHandle_t DeviceList_getDeviceHandle(DeviceKey)
Retrieve device handle from list by key.
float accelData[KX134_1211_DATA_COUNT]
Processed accelerations array.