5#include "payloadcomm.h"
7extern MessageBufferHandle_t xLoRaTxBuff;
8extern MessageBufferHandle_t xUsbTxBuff;
9extern SemaphoreHandle_t xUsbMutex;
10extern EventGroupHandle_t xSystemStatusGroup;
12bool payloadCANRequest(
unsigned int can, uint16_t
id,
unsigned int *out) {
14 TIM6->ARR &= (~(TIM_ARR_ARR_Msk));
15 TIM6->PSC &= (~(TIM_PSC_PSC_Msk));
16 TIM6->SR &= ~(TIM_SR_UIF);
19 TIM6->CR1 |= TIM_CR1_CEN;
22 CAN_TX(can, 8, 0x00, 0x00,
id);
28 while ((CAN_RX(&payloadRx) != 0x01) && (payloadRx.address !=
id)) {
29 if (TIM6->SR & TIM_SR_UIF)
34 out[0] = payloadRx.dataL;
35 out[1] = payloadRx.dataH;
39void vPayloadTransmit(
void *argument) {
40 const TickType_t xFrequency = pdMS_TO_TICKS(500);
41 const TickType_t blockTime = pdMS_TO_TICKS(250);
45 TickType_t xLastWakeTime = xTaskGetTickCount();
46 vTaskDelayUntil(&xLastWakeTime, xFrequency);
50 unsigned int payloadState[2];
51 errCount += !payloadCANRequest(CAN_PAYLOAD_AV, CAN_HEADER_PAYLOAD_STATUS, payloadState);
53 unsigned int payloadAccel[2];
54 errCount += !payloadCANRequest(CAN_PAYLOAD_AV, CAN_HEADER_PAYLOAD_ACCEL, payloadAccel);
56 unsigned int payloadBaro1[2];
57 errCount += !payloadCANRequest(CAN_PAYLOAD_AV, CAN_HEADER_PAYLOAD_BARO1, payloadBaro1);
59 unsigned int payloadBaro2[2];
60 errCount += !payloadCANRequest(CAN_PAYLOAD_AV, CAN_HEADER_PAYLOAD_BARO2, payloadBaro2);
63 xEventGroupSetBits(xSystemStatusGroup, GROUP_SYSTEM_STATUS_PAYLOAD);
65 xEventGroupClearBits(xSystemStatusGroup, GROUP_SYSTEM_STATUS_PAYLOAD);
68 LORA_HEADER_PAYLOAD_DATA,
69 (uint8_t)payloadState[0],
70 (uint8_t *)payloadAccel,
75 xMessageBufferSend(xLoRaTxBuff, &payloadData, LORA_MSG_LENGTH, blockTime);