RX

Dependencies:   mbed BufferedSerial SX1276GenericLib X_NUCLEO_IKS01A2

Committer:
TMRL123
Date:
Wed Jun 05 00:25:53 2019 +0000
Revision:
0:fb7bf6d81e5f
RX

Who changed what in which revision?

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