RX

Dependencies:   mbed BufferedSerial SX1276GenericLib X_NUCLEO_IKS01A2

Committer:
LucasKB
Date:
Mon Jun 17 00:10:40 2019 +0000
Revision:
2:e7d7e80256cc
Parent:
1:bd8b9ad01400
RX;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TMRL123 0:a73914f20498 1 /* Includes */
TMRL123 0:a73914f20498 2 #include "mbed.h" /* Mbed include */
TMRL123 0:a73914f20498 3
LucasKB 2:e7d7e80256cc 4 /* Lora includes */
LucasKB 2:e7d7e80256cc 5 #include "PinMap.h"
LucasKB 2:e7d7e80256cc 6 #include "sx1276-mbed-hal.h"
TMRL123 0:a73914f20498 7
LucasKB 2:e7d7e80256cc 8 /* Serial communication include */
LucasKB 2:e7d7e80256cc 9 #include "BufferedSerial.h"
TMRL123 0:a73914f20498 10
TMRL123 0:a73914f20498 11 /* Set this flag to '1' to display debug messages on the console */
TMRL123 0:a73914f20498 12 #define DEBUG_MESSAGE 1
TMRL123 0:a73914f20498 13
TMRL123 0:a73914f20498 14 /* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */
TMRL123 0:a73914f20498 15 #define USE_MODEM_LORA 1
TMRL123 0:a73914f20498 16 #define USE_MODEM_FSK !USE_MODEM_LORA
LucasKB 2:e7d7e80256cc 17 #define RF_FREQUENCY RF_FREQUENCY_915_0 // Hz
TMRL123 0:a73914f20498 18 #define TX_OUTPUT_POWER 14 // 14 dBm
TMRL123 0:a73914f20498 19
TMRL123 0:a73914f20498 20 #if USE_MODEM_LORA == 1
TMRL123 0:a73914f20498 21
TMRL123 0:a73914f20498 22 #define LORA_BANDWIDTH 125000 // LoRa default, details in SX1276::BandwidthMap
TMRL123 0:a73914f20498 23 #define LORA_SPREADING_FACTOR LORA_SF7
TMRL123 0:a73914f20498 24 #define LORA_CODINGRATE LORA_ERROR_CODING_RATE_4_5
TMRL123 0:a73914f20498 25
TMRL123 0:a73914f20498 26 #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx
TMRL123 0:a73914f20498 27 #define LORA_SYMBOL_TIMEOUT 5 // Symbols
TMRL123 0:a73914f20498 28 #define LORA_FIX_LENGTH_PAYLOAD_ON false
TMRL123 0:a73914f20498 29 #define LORA_FHSS_ENABLED false
TMRL123 0:a73914f20498 30 #define LORA_NB_SYMB_HOP 4
TMRL123 0:a73914f20498 31 #define LORA_IQ_INVERSION_ON false
TMRL123 0:a73914f20498 32 #define LORA_CRC_ENABLED true
TMRL123 0:a73914f20498 33
TMRL123 0:a73914f20498 34 #endif
TMRL123 0:a73914f20498 35
LucasKB 2:e7d7e80256cc 36 #define RX_TIMEOUT_VALUE 0 // In ms
LucasKB 2:e7d7e80256cc 37 #define TX_TIMEOUT_VALUE 1000000 // In ms
TMRL123 0:a73914f20498 38
TMRL123 0:a73914f20498 39 //#define BUFFER_SIZE 32 // Define the payload size here
LucasKB 2:e7d7e80256cc 40 #define BUFFER_SIZE 64 // Define the payload size here
TMRL123 0:a73914f20498 41
LucasKB 2:e7d7e80256cc 42 typedef struct {
LucasKB 2:e7d7e80256cc 43 uint8_t header; // Header for identification of updated informations - 0 0 p temp LSM6DSL LSM303AGR
LucasKB 2:e7d7e80256cc 44 int time; // Time between transmissions
LucasKB 2:e7d7e80256cc 45 float p; // Pressure of LPS22HB
LucasKB 2:e7d7e80256cc 46 float temperatureLPS22HB; // Temperature from LPS22HB
LucasKB 2:e7d7e80256cc 47 int32_t ag[3]; // Acceleration of the accelerometer and gyroscope LSM6DSL
LucasKB 2:e7d7e80256cc 48 int32_t w[3]; // Angular velocity of LSM6DSL
LucasKB 2:e7d7e80256cc 49 int32_t a[3]; // Acceleration of the accelerometer LSM303AGR
LucasKB 2:e7d7e80256cc 50 int32_t m[3]; // Heading of LSM303AGR
LucasKB 2:e7d7e80256cc 51 }Pkg1;
TMRL123 0:a73914f20498 52
LucasKB 2:e7d7e80256cc 53 typedef struct {
LucasKB 2:e7d7e80256cc 54 uint8_t header; // Header for identification of updated informations - 0 1 InternalCommunication HTS221
LucasKB 2:e7d7e80256cc 55 int time; // Time between transmissions
LucasKB 2:e7d7e80256cc 56 bool drogueStatus; // Drogue parachute status provided by Avionics
LucasKB 2:e7d7e80256cc 57 bool mainStatus; //Main parachute status provided by Avionics
LucasKB 2:e7d7e80256cc 58 bool mainStatusCOTS; // Main parachute status provided by COTS Altimeter
LucasKB 2:e7d7e80256cc 59 bool drogueStatusCOTS; // Drogue status provided by COTS Altimeter
LucasKB 2:e7d7e80256cc 60 float pressureBar; // Pressure by COTS Altimeter
LucasKB 2:e7d7e80256cc 61 float temperature; // Temperature by COTS Altimeter
LucasKB 2:e7d7e80256cc 62 int16_t timeStamp; // Timestamp from COTS Altimeter
LucasKB 2:e7d7e80256cc 63 int16_t aglAlt; // AGL Altitude from COTS Altimeter
LucasKB 2:e7d7e80256cc 64 int8_t battery; // Battery voltage reading from COTS Altimeter
LucasKB 2:e7d7e80256cc 65 float humidity; // Humidity of HTS221
LucasKB 2:e7d7e80256cc 66 float temperatureHTS221; // Temperature from HTS221
LucasKB 2:e7d7e80256cc 67 //uint8_t filler[25];
LucasKB 2:e7d7e80256cc 68 }Pkg2;
LucasKB 2:e7d7e80256cc 69
LucasKB 1:bd8b9ad01400 70 typedef struct {
LucasKB 2:e7d7e80256cc 71 uint8_t header; // Header for identification of updated informations - 1 0 GPS
LucasKB 2:e7d7e80256cc 72 int time; // Time between transmissions
LucasKB 2:e7d7e80256cc 73 unsigned long timeOfWeek; //GPS time of week
LucasKB 2:e7d7e80256cc 74 long timeOfWeekFracPart; // GPS time of week fractional part
LucasKB 2:e7d7e80256cc 75 unsigned char gpsFix; // GPS fix
LucasKB 2:e7d7e80256cc 76 long ecefx; // GPS X posiition
LucasKB 2:e7d7e80256cc 77 long ecefy; // GPS Y posistion
LucasKB 2:e7d7e80256cc 78 long ecefz; // GPS Z postion
LucasKB 2:e7d7e80256cc 79 unsigned long positionAcc3D; // GPS 3D position accuracy
LucasKB 2:e7d7e80256cc 80 long ecefvx; // GPS X velocity
LucasKB 2:e7d7e80256cc 81 long ecefvy; // GPS Y velocity
LucasKB 2:e7d7e80256cc 82 long ecefvz; // GPS Z velocity
LucasKB 2:e7d7e80256cc 83 unsigned long speedAcc; // GPS speed accuracy
LucasKB 2:e7d7e80256cc 84 unsigned char numbSat; // GPS number of satellites conected
LucasKB 2:e7d7e80256cc 85 //uint8_t filler[8];
LucasKB 2:e7d7e80256cc 86 }Pkg3;
LucasKB 2:e7d7e80256cc 87
LucasKB 2:e7d7e80256cc 88
LucasKB 2:e7d7e80256cc 89 union Data {
LucasKB 2:e7d7e80256cc 90 Pkg1 pkg1;
LucasKB 2:e7d7e80256cc 91 Pkg2 pkg2;
LucasKB 2:e7d7e80256cc 92 Pkg3 pkg3;
LucasKB 2:e7d7e80256cc 93 };
LucasKB 2:e7d7e80256cc 94
LucasKB 2:e7d7e80256cc 95 Data data;
TMRL123 0:a73914f20498 96
TMRL123 0:a73914f20498 97 /* LoRa modem instances and configurations */
TMRL123 0:a73914f20498 98
TMRL123 0:a73914f20498 99 static RadioEvents_t RadioEvents; // Calback functions struct
TMRL123 0:a73914f20498 100
LucasKB 2:e7d7e80256cc 101 SX1276Generic *Radio; // Definition of a Radio object
TMRL123 0:a73914f20498 102
LucasKB 2:e7d7e80256cc 103 bool received = false; // Flag to indicate the end of reception
LucasKB 2:e7d7e80256cc 104
LucasKB 2:e7d7e80256cc 105 /* Configuration function */
TMRL123 0:a73914f20498 106 void SystemClock_Config(void);
TMRL123 0:a73914f20498 107
LucasKB 2:e7d7e80256cc 108 /* Callback functions prototypes */
TMRL123 0:a73914f20498 109
LucasKB 2:e7d7e80256cc 110 // Brief Function to be executed on Radio Tx Done event
TMRL123 0:a73914f20498 111 void OnTxDone(void *radio, void *userThisPtr, void *userData);
TMRL123 0:a73914f20498 112
LucasKB 2:e7d7e80256cc 113 // Brief Function to be executed on Radio Rx Done event
TMRL123 0:a73914f20498 114 void OnRxDone(void *radio, void *userThisPtr, void *userData, uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr );
TMRL123 0:a73914f20498 115
LucasKB 2:e7d7e80256cc 116 // Brief Function executed on Radio Tx Timeout event
TMRL123 0:a73914f20498 117 void OnTxTimeout(void *radio, void *userThisPtr, void *userData);
TMRL123 0:a73914f20498 118
LucasKB 2:e7d7e80256cc 119 // Brief Function executed on Radio Rx Timeout event
TMRL123 0:a73914f20498 120 void OnRxTimeout(void *radio, void *userThisPtr, void *userData);
TMRL123 0:a73914f20498 121
LucasKB 2:e7d7e80256cc 122 // Brief Function executed on Radio Rx Error event
TMRL123 0:a73914f20498 123 void OnRxError(void *radio, void *userThisPtr, void *userData);
TMRL123 0:a73914f20498 124
LucasKB 2:e7d7e80256cc 125 // Brief Function executed on Radio Fhss Change Channel event
TMRL123 0:a73914f20498 126 void OnFhssChangeChannel(void *radio, void *userThisPtr, void *userData, uint8_t channelIndex);
TMRL123 0:a73914f20498 127
LucasKB 2:e7d7e80256cc 128 // Brief Function executed on CAD Done event
TMRL123 0:a73914f20498 129 void OnCadDone(void *radio, void *userThisPtr, void *userData);
TMRL123 0:a73914f20498 130
TMRL123 0:a73914f20498 131 /* Serial communication to debug program */
LucasKB 2:e7d7e80256cc 132 BufferedSerial *ser;
TMRL123 0:a73914f20498 133
TMRL123 0:a73914f20498 134 int main() {
LucasKB 2:e7d7e80256cc 135 SystemClock_Config(); /* Synchronize clock for TX and RX boards */
TMRL123 0:a73914f20498 136
LucasKB 2:e7d7e80256cc 137 /* Serial configuration */
LucasKB 2:e7d7e80256cc 138 if (DEBUG_MESSAGE) {
LucasKB 2:e7d7e80256cc 139 ser = new BufferedSerial(USBTX, USBRX);
LucasKB 2:e7d7e80256cc 140 ser->baud(115200);
LucasKB 2:e7d7e80256cc 141 ser->format(8);
LucasKB 2:e7d7e80256cc 142 }
TMRL123 0:a73914f20498 143
LucasKB 2:e7d7e80256cc 144 /* General Header*/
LucasKB 2:e7d7e80256cc 145 if (DEBUG_MESSAGE)
LucasKB 2:e7d7e80256cc 146 ser->printf("Telemetry Rx inicial version program\r\n\r\n");
TMRL123 0:a73914f20498 147
TMRL123 0:a73914f20498 148 Radio = new SX1276Generic(NULL, MURATA_SX1276,
TMRL123 0:a73914f20498 149 LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET,
TMRL123 0:a73914f20498 150 LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5,
TMRL123 0:a73914f20498 151 LORA_ANT_RX, LORA_ANT_TX, LORA_ANT_BOOST, LORA_TCXO);
LucasKB 2:e7d7e80256cc 152
LucasKB 2:e7d7e80256cc 153 if (DEBUG_MESSAGE) {
LucasKB 2:e7d7e80256cc 154 ser->printf("SX1276 Simple receiver aplication\r\n" );
LucasKB 2:e7d7e80256cc 155 ser->printf("Frequency: %.1f\r\n", (double)RF_FREQUENCY/1000000.0);
LucasKB 2:e7d7e80256cc 156 ser->printf("TXPower: %d dBm\r\n", TX_OUTPUT_POWER);
LucasKB 2:e7d7e80256cc 157 ser->printf("Bandwidth: %d Hz\r\n", LORA_BANDWIDTH);
LucasKB 2:e7d7e80256cc 158 ser->printf("Spreading factor: SF%d\r\n", LORA_SPREADING_FACTOR);
LucasKB 2:e7d7e80256cc 159 }
TMRL123 0:a73914f20498 160
TMRL123 0:a73914f20498 161 // Initialize Radio driver
TMRL123 0:a73914f20498 162 RadioEvents.TxDone = OnTxDone;
TMRL123 0:a73914f20498 163 RadioEvents.RxDone = OnRxDone;
TMRL123 0:a73914f20498 164 RadioEvents.RxError = OnRxError;
TMRL123 0:a73914f20498 165 RadioEvents.TxTimeout = OnTxTimeout;
LucasKB 2:e7d7e80256cc 166 RadioEvents.RxTimeout = OnRxTimeout;
LucasKB 2:e7d7e80256cc 167
LucasKB 2:e7d7e80256cc 168 // Initializes the radio
TMRL123 0:a73914f20498 169 while (Radio->Init( &RadioEvents ) == false) {
LucasKB 2:e7d7e80256cc 170 if (DEBUG_MESSAGE)
LucasKB 2:e7d7e80256cc 171 ser->printf("Radio could not be detected!\r\n");
TMRL123 0:a73914f20498 172 wait( 1 );
TMRL123 0:a73914f20498 173 }
TMRL123 0:a73914f20498 174
LucasKB 2:e7d7e80256cc 175 // Display the board type
TMRL123 0:a73914f20498 176 switch(Radio->DetectBoardType()) {
TMRL123 0:a73914f20498 177 case SX1276MB1LAS:
TMRL123 0:a73914f20498 178 if (DEBUG_MESSAGE)
LucasKB 2:e7d7e80256cc 179 ser->printf(" > Board Type: SX1276MB1LAS <\r\n");
TMRL123 0:a73914f20498 180 break;
TMRL123 0:a73914f20498 181 case SX1276MB1MAS:
TMRL123 0:a73914f20498 182 if (DEBUG_MESSAGE)
LucasKB 2:e7d7e80256cc 183 ser->printf(" > Board Type: SX1276MB1LAS <\r\n");
TMRL123 0:a73914f20498 184 case MURATA_SX1276:
TMRL123 0:a73914f20498 185 if (DEBUG_MESSAGE)
LucasKB 2:e7d7e80256cc 186 ser->printf(" > Board Type: MURATA_SX1276_STM32L0 <\r\n");
TMRL123 0:a73914f20498 187 break;
TMRL123 0:a73914f20498 188 case RFM95_SX1276:
LucasKB 2:e7d7e80256cc 189 if (DEBUG_MESSAGE)
LucasKB 2:e7d7e80256cc 190 ser->printf(" > HopeRF RFM95xx <\r\n");
TMRL123 0:a73914f20498 191 break;
TMRL123 0:a73914f20498 192 default:
LucasKB 2:e7d7e80256cc 193 if (DEBUG_MESSAGE)
LucasKB 2:e7d7e80256cc 194 ser->printf(" > Board Type: unknown <\r\n");
TMRL123 0:a73914f20498 195 }
TMRL123 0:a73914f20498 196
LucasKB 2:e7d7e80256cc 197 Radio->SetChannel(RF_FREQUENCY ); // Sets the frequency of the communication
TMRL123 0:a73914f20498 198
LucasKB 2:e7d7e80256cc 199 // Debug message of the state of fhss
LucasKB 2:e7d7e80256cc 200 if (LORA_FHSS_ENABLED) {
LucasKB 2:e7d7e80256cc 201 if (DEBUG_MESSAGE)
LucasKB 2:e7d7e80256cc 202 ser->printf(" > LORA FHSS Mode <\r\n");
LucasKB 2:e7d7e80256cc 203 }
LucasKB 2:e7d7e80256cc 204 if (!LORA_FHSS_ENABLED) {
LucasKB 2:e7d7e80256cc 205 if (DEBUG_MESSAGE)
LucasKB 2:e7d7e80256cc 206 ser->printf(" > LORA Mode <\r\n");
LucasKB 2:e7d7e80256cc 207 }
LucasKB 2:e7d7e80256cc 208 // Sets the configuration of the transmission
TMRL123 0:a73914f20498 209 Radio->SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
TMRL123 0:a73914f20498 210 LORA_SPREADING_FACTOR, LORA_CODINGRATE,
TMRL123 0:a73914f20498 211 LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
TMRL123 0:a73914f20498 212 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
TMRL123 0:a73914f20498 213 LORA_IQ_INVERSION_ON, 2000 );
TMRL123 0:a73914f20498 214
LucasKB 2:e7d7e80256cc 215 // Sets the configuration of the reception
TMRL123 0:a73914f20498 216 Radio->SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
TMRL123 0:a73914f20498 217 LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
TMRL123 0:a73914f20498 218 LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0,
TMRL123 0:a73914f20498 219 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
TMRL123 0:a73914f20498 220 LORA_IQ_INVERSION_ON, true );
LucasKB 2:e7d7e80256cc 221 if (DEBUG_MESSAGE)
LucasKB 2:e7d7e80256cc 222 ser->printf("Starting Receive loop\r\n");
TMRL123 0:a73914f20498 223
LucasKB 2:e7d7e80256cc 224 Radio->Rx(RX_TIMEOUT_VALUE); // Puts the device in reception mode continuously
LucasKB 2:e7d7e80256cc 225
LucasKB 2:e7d7e80256cc 226 while( 1 )
LucasKB 2:e7d7e80256cc 227 {
LucasKB 2:e7d7e80256cc 228 //After the receiving, puts the device again in receive mode
LucasKB 2:e7d7e80256cc 229 if (received == true) {
LucasKB 2:e7d7e80256cc 230 received = false;
LucasKB 2:e7d7e80256cc 231 Radio->Rx(RX_TIMEOUT_VALUE);
TMRL123 0:a73914f20498 232 }
TMRL123 0:a73914f20498 233 }
LucasKB 2:e7d7e80256cc 234
TMRL123 0:a73914f20498 235 }
TMRL123 0:a73914f20498 236
LucasKB 2:e7d7e80256cc 237
TMRL123 0:a73914f20498 238 void SystemClock_Config(void)
TMRL123 0:a73914f20498 239 {
TMRL123 0:a73914f20498 240 #ifdef B_L072Z_LRWAN1_LORA
TMRL123 0:a73914f20498 241 /*
TMRL123 0:a73914f20498 242 * The L072Z_LRWAN1_LORA clock setup is somewhat differnt from the Nucleo board.
TMRL123 0:a73914f20498 243 * It has no LSE.
TMRL123 0:a73914f20498 244 */
TMRL123 0:a73914f20498 245 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
TMRL123 0:a73914f20498 246 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
TMRL123 0:a73914f20498 247
TMRL123 0:a73914f20498 248 /* Enable HSE Oscillator and Activate PLL with HSE as source */
TMRL123 0:a73914f20498 249 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
TMRL123 0:a73914f20498 250 RCC_OscInitStruct.HSEState = RCC_HSE_OFF;
TMRL123 0:a73914f20498 251 RCC_OscInitStruct.HSIState = RCC_HSI_ON;
TMRL123 0:a73914f20498 252 RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
TMRL123 0:a73914f20498 253 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
TMRL123 0:a73914f20498 254 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
TMRL123 0:a73914f20498 255 RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_6;
TMRL123 0:a73914f20498 256 RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_3;
TMRL123 0:a73914f20498 257
TMRL123 0:a73914f20498 258 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
TMRL123 0:a73914f20498 259 // Error_Handler();
TMRL123 0:a73914f20498 260 }
TMRL123 0:a73914f20498 261
TMRL123 0:a73914f20498 262 /* Set Voltage scale1 as MCU will run at 32MHz */
TMRL123 0:a73914f20498 263 __HAL_RCC_PWR_CLK_ENABLE();
TMRL123 0:a73914f20498 264 __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
TMRL123 0:a73914f20498 265
TMRL123 0:a73914f20498 266 /* Poll VOSF bit of in PWR_CSR. Wait until it is reset to 0 */
TMRL123 0:a73914f20498 267 while (__HAL_PWR_GET_FLAG(PWR_FLAG_VOS) != RESET) {};
TMRL123 0:a73914f20498 268
TMRL123 0:a73914f20498 269 /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
TMRL123 0:a73914f20498 270 clocks dividers */
TMRL123 0:a73914f20498 271 RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
TMRL123 0:a73914f20498 272 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
TMRL123 0:a73914f20498 273 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
TMRL123 0:a73914f20498 274 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
TMRL123 0:a73914f20498 275 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
TMRL123 0:a73914f20498 276 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) {
TMRL123 0:a73914f20498 277 // Error_Handler();
TMRL123 0:a73914f20498 278 }
TMRL123 0:a73914f20498 279 #endif
TMRL123 0:a73914f20498 280 }
TMRL123 0:a73914f20498 281
TMRL123 0:a73914f20498 282 void OnTxDone(void *radio, void *userThisPtr, void *userData)
LucasKB 2:e7d7e80256cc 283 {
TMRL123 0:a73914f20498 284 Radio->Sleep( );
LucasKB 2:e7d7e80256cc 285 if (DEBUG_MESSAGE)
LucasKB 2:e7d7e80256cc 286 ser->printf("> OnTxDone\r\n");
TMRL123 0:a73914f20498 287 }
TMRL123 0:a73914f20498 288
TMRL123 0:a73914f20498 289 void OnRxDone(void *radio, void *userThisPtr, void *userData, uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr)
TMRL123 0:a73914f20498 290 {
TMRL123 0:a73914f20498 291 Radio->Sleep( );
LucasKB 2:e7d7e80256cc 292 received = true;
LucasKB 2:e7d7e80256cc 293 uint8_t state = payload[0] >> 6;
LucasKB 2:e7d7e80256cc 294
LucasKB 2:e7d7e80256cc 295 //ser->printf("The state is %x\r\n", state);
LucasKB 2:e7d7e80256cc 296 ser->printf("> OnRxDone: RssiValue=%d dBm, SnrValue=%d, State=%d\r\n", rssi, snr, state);
LucasKB 2:e7d7e80256cc 297 //for(int i = 0; i < BUFFER_SIZE; i++){
LucasKB 2:e7d7e80256cc 298 // ser->printf("%x ", payload[i]);
LucasKB 2:e7d7e80256cc 299 //}
LucasKB 2:e7d7e80256cc 300 ser->printf("\r\n");
LucasKB 2:e7d7e80256cc 301 if(state == 3){
LucasKB 2:e7d7e80256cc 302 memcpy(&data.pkg1, payload, BUFFER_SIZE);
LucasKB 2:e7d7e80256cc 303 //ser->printf("Header: %x, time: %d, p: %f, tempLPS22HB: %f, ag: %d; %d; %d, w: %d; %d; %d, a: %d; %d; %d, m: %d; %d; %d\r\n", pkg1.header, pkg1.time, pkg1.p, pkg1.temperatureLPS22HB, pkg1.ag[0], pkg1.ag[1], pkg1.ag[2], pkg1.w[0], pkg1.w[1], pkg1.w[2], pkg1.a[0], pkg1.a[1], pkg1.a[2], pkg1.m[0], pkg1.m[1], pkg1.m[2]);
LucasKB 2:e7d7e80256cc 304 ser->printf("%x,%d,%f,%f,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n", data.pkg1.header, data.pkg1.time, data.pkg1.p, data.pkg1.temperatureLPS22HB, data.pkg1.ag[0], data.pkg1.ag[1], data.pkg1.ag[2], data.pkg1.w[0], data.pkg1.w[1], data.pkg1.w[2], data.pkg1.a[0], data.pkg1.a[1], data.pkg1.a[2], data.pkg1.m[0], data.pkg1.m[1], data.pkg1.m[2]);
LucasKB 2:e7d7e80256cc 305 }
LucasKB 2:e7d7e80256cc 306 else if(state == 1){
LucasKB 2:e7d7e80256cc 307 memcpy(&data.pkg2, payload, BUFFER_SIZE);
LucasKB 2:e7d7e80256cc 308 //ser->printf("Header: %x, time: %d, parachuteStatus: %d%d%d%d, pressureBar: %f, temperature: %f, timeStamp: %d, aglAlt: %d, battery: %d, humidity: %f, tempHTS221: %f\r\n", pkg2.header, pkg2.time, pkg2.drogueStatus, pkg2.mainStatus, pkg2.mainStatusCOTS, pkg2.drogueStatusCOTS, pkg2.pressureBar, pkg2.temperature, pkg2.timeStamp, pkg2.aglAlt, pkg2.battery, pkg2.humidity, pkg2.temperatureHTS221);
LucasKB 2:e7d7e80256cc 309 ser->printf("%x,%d,%d%d%d%d,%f,%f,%d,%d,%d,%f,%f\r\n", data.pkg2.header, data.pkg2.time, data.pkg2.drogueStatus, data.pkg2.mainStatus, data.pkg2.mainStatusCOTS, data.pkg2.drogueStatusCOTS, data.pkg2.pressureBar, data.pkg2.temperature, data.pkg2.timeStamp, data.pkg2.aglAlt, data.pkg2.battery, data.pkg2.humidity, data.pkg2.temperatureHTS221);
LucasKB 2:e7d7e80256cc 310 }
LucasKB 2:e7d7e80256cc 311 else if(state == 2){
LucasKB 2:e7d7e80256cc 312 memcpy(&data.pkg3, payload, BUFFER_SIZE);
LucasKB 2:e7d7e80256cc 313 //ser->printf("Header: %x, time: %d, timeOfWeek: %d, frac: %d, gpsFix: %d\r\n", pkg3.header, pkg3.time, pkg3.timeOfWeek, pkg3.timeOfWeekFracPart, pkg3.gpsFix);
LucasKB 2:e7d7e80256cc 314 //ser->printf("eceFx: %d, eceFy: %d, eceFz: %d, posAcc3D: %d, eceFvx: %d, eceFvy: %d, eceFvz: %d\r\n", pkg3.ecefx, pkg3.ecefy, pkg3.ecefz, pkg3.positionAcc3D, pkg3.ecefvx, pkg3.ecefvy, pkg3.ecefvz);
LucasKB 2:e7d7e80256cc 315 //ser->printf("speedAcc: %d, numbSat: %d\r\n", pkg3.speedAcc, pkg3.numbSat);
LucasKB 2:e7d7e80256cc 316 ser->printf("%x,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n", data.pkg3.header, data.pkg3.time, data.pkg3.timeOfWeek, data.pkg3.timeOfWeekFracPart, data.pkg3.gpsFix, data.pkg3.ecefx, data.pkg3.ecefy, data.pkg3.ecefz, data.pkg3.positionAcc3D, data.pkg3.ecefvx, data.pkg3.ecefvy, data.pkg3.ecefvz, data.pkg3.speedAcc, data.pkg3.numbSat);
LucasKB 2:e7d7e80256cc 317 }
TMRL123 0:a73914f20498 318 }
TMRL123 0:a73914f20498 319
TMRL123 0:a73914f20498 320 void OnTxTimeout(void *radio, void *userThisPtr, void *userData)
TMRL123 0:a73914f20498 321 {
TMRL123 0:a73914f20498 322 Radio->Sleep( );
TMRL123 0:a73914f20498 323 if(DEBUG_MESSAGE)
LucasKB 2:e7d7e80256cc 324 ser->printf("> OnTxTimeout\r\n");
TMRL123 0:a73914f20498 325 }
TMRL123 0:a73914f20498 326
TMRL123 0:a73914f20498 327 void OnRxTimeout(void *radio, void *userThisPtr, void *userData)
TMRL123 0:a73914f20498 328 {
TMRL123 0:a73914f20498 329 Radio->Sleep( );
TMRL123 0:a73914f20498 330 if (DEBUG_MESSAGE)
LucasKB 2:e7d7e80256cc 331 ser->printf("> OnRxTimeout\r\n");
TMRL123 0:a73914f20498 332 }
TMRL123 0:a73914f20498 333
TMRL123 0:a73914f20498 334 void OnRxError(void *radio, void *userThisPtr, void *userData)
TMRL123 0:a73914f20498 335 {
TMRL123 0:a73914f20498 336 Radio->Sleep( );
LucasKB 2:e7d7e80256cc 337 received = true;
TMRL123 0:a73914f20498 338 if (DEBUG_MESSAGE)
LucasKB 2:e7d7e80256cc 339 ser->printf("> OnRxError\r\n");
TMRL123 0:a73914f20498 340 }