5#include "gpsacquisition.h"
9extern MessageBufferHandle_t xLoRaTxBuff;
10extern MessageBufferHandle_t xUsbTxBuff;
11extern StreamBufferHandle_t xGpsRxBuff;
12extern SemaphoreHandle_t xUsbMutex;
14uint8_t gpsRxBuff[GPS_RX_SIZE];
15uint8_t gpsRxBuffIdx = 0;
17void vGpsTransmit(
void *argument) {
18 const TickType_t xFrequency = pdMS_TO_TICKS(500);
19 const TickType_t blockTime = pdMS_TO_TICKS(250);
24 enum State *flightState = StateHandle_getHandle(
"FlightState").state;
28 TickType_t xLastWakeTime = xTaskGetTickCount();
29 vTaskDelayUntil(&xLastWakeTime, xFrequency);
32 gps->base.
print(&gps->base, GPS_PUBX_POLL);
35 if (!xStreamBufferReceive(xGpsRxBuff, (
void *)&gpsString, gpsRxBuffIdx, blockTime))
39 gps->decode(gps, gpsString, &gpsData);
40 usb->
print(usb, gpsString);
46 if ((xSemaphoreTake(xUsbMutex, pdMS_TO_TICKS(0))) == pdTRUE) {
48 snprintf(debugStr, 100,
"[GPS] %d:%d:%d\n\r", gpsData.hour, gpsData.minute, gpsData.second);
49 xMessageBufferSend(xUsbTxBuff, (
void *)debugStr, 100, 0);
50 xSemaphoreGive(xUsbMutex);
58 (*flightState << 4) | gpsData.lock
64 xMessageBufferSend(xLoRaTxBuff, &gpsPacket, LORA_MSG_LENGTH, blockTime);
77void USART3_IRQHandler() {
78 BaseType_t xHigherPriorityTaskWoken = pdFALSE;
82 uint8_t rxData = USART3->DR & 0xFF;
85 gpsRxBuff[gpsRxBuffIdx++] = rxData;
86 gpsRxBuffIdx %= GPS_RX_SIZE;
89 if (rxData == LINE_FEED) {
90 xStreamBufferSendFromISR(xGpsRxBuff, (
void *)gpsRxBuff, gpsRxBuffIdx, &xHigherPriorityTaskWoken);
91 portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
DeviceHandle_t DeviceList_getDeviceHandle(DeviceKey)
Retrieve device handle from list by key.
void(* print)(struct UART *, char *)
UART print string method.
Struct definition for UART interface.