Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed SoftSerial USBDevice Buffer
Receiver.cpp
00001 /* 00002 * This file contains a copy of the master content sx1276PingPong 00003 * with adaption for the SX1276Generic environment 00004 * (c) 2017 Helmut Tschemernjak 00005 * 30826 Garbsen (Hannover) Germany 00006 */ 00007 00008 #include "mbed.h" 00009 #include "PinMap.h" 00010 #include "Receiver.h" 00011 #include "sx1276-mbed-hal.h" 00012 #include "main.h" 00013 00014 #include <SoftSerial.h> 00015 00016 00017 #ifdef FEATURE_LORA 00018 00019 /* Set this flag to '1' to display debug messages on the console */ 00020 #define DEBUG_MESSAGE 1 00021 00022 /* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */ 00023 #define USE_MODEM_LORA 1 00024 #define USE_MODEM_FSK !USE_MODEM_LORA 00025 #define RF_FREQUENCY RF_FREQUENCY_868_1 // Hz 00026 #define TX_OUTPUT_POWER 14 // 14 dBm 00027 00028 #if USE_MODEM_LORA == 1 00029 00030 #define LORA_BANDWIDTH 125000 // LoRa default, details in SX1276::BandwidthMap 00031 #define LORA_SPREADING_FACTOR LORA_SF7 00032 #define LORA_CODINGRATE LORA_ERROR_CODING_RATE_4_5 00033 00034 #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx 00035 #define LORA_SYMBOL_TIMEOUT 5 // Symbols 00036 #define LORA_FIX_LENGTH_PAYLOAD_ON false 00037 #define LORA_FHSS_ENABLED false 00038 #define LORA_NB_SYMB_HOP 4 00039 #define LORA_IQ_INVERSION_ON false 00040 #define LORA_CRC_ENABLED true 00041 00042 #elif USE_MODEM_FSK == 1 00043 00044 #define FSK_FDEV 25000 // Hz 00045 #define FSK_DATARATE 19200 // bps 00046 #define FSK_BANDWIDTH 50000 // Hz 00047 #define FSK_AFC_BANDWIDTH 83333 // Hz 00048 #define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx 00049 #define FSK_FIX_LENGTH_PAYLOAD_ON false 00050 #define FSK_CRC_ENABLED true 00051 00052 #else 00053 #error "Please define a modem in the compiler options." 00054 #endif 00055 00056 00057 #define RX_TIMEOUT_VALUE 8500 // in ms mudei de 3500 00058 00059 #define BUFFER_SIZE 2048 00060 00061 00062 int ii = 0; 00063 00064 //SoftSerial ss(PA_9, PA_10); 00065 /* 00066 * Global variables declarations 00067 */ 00068 typedef enum 00069 { 00070 LOWPOWER = 0, 00071 IDLE, 00072 00073 RX, 00074 RX_TIMEOUT, 00075 RX_ERROR, 00076 00077 TX, 00078 TX_TIMEOUT, 00079 00080 CAD, 00081 CAD_DONE 00082 } AppStates_t; 00083 00084 00085 volatile AppStates_t State = LOWPOWER; 00086 00087 /*! 00088 * Radio events function pointer 00089 */ 00090 static RadioEvents_t RadioEvents; 00091 00092 /* 00093 * Global variables declarations 00094 */ 00095 SX1276Generic *Radio ; 00096 00097 uint16_t BufferSize = BUFFER_SIZE; 00098 uint8_t *Buffer; 00099 00100 DigitalOut *led3; 00101 00102 00103 00104 00105 int Receiver() 00106 { 00107 #if( defined ( TARGET_KL25Z ) || defined ( TARGET_LPC11U6X ) ) 00108 DigitalOut *led = new DigitalOut(LED2); 00109 #elif defined(TARGET_NUCLEO_L073RZ) || defined(TARGET_DISCO_L072CZ_LRWAN1) 00110 DigitalOut *led = new DigitalOut(LED4); // RX red 00111 led3 = new DigitalOut(LED3); // TX blue 00112 #else 00113 DigitalOut *led = new DigitalOut(LED1); 00114 led3 = led; 00115 #endif 00116 00117 Buffer = new uint8_t[BUFFER_SIZE]; 00118 *led3 = 1; 00119 00120 #ifdef B_L072Z_LRWAN1_LORA 00121 Radio = new SX1276Generic (NULL, MURATA_SX1276, 00122 LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET, 00123 LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5, 00124 LORA_ANT_RX, LORA_ANT_TX, LORA_ANT_BOOST, LORA_TCXO); 00125 #else // RFM95 00126 Radio = new SX1276Generic (NULL, RFM95_SX1276, 00127 LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET, 00128 LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5); 00129 00130 #endif 00131 00132 uint8_t i; 00133 00134 bool isMaster = false; 00135 00136 dprintf("Formula Technion GUI Application" ); 00137 dprintf("Freqency: %.1f", (double)RF_FREQUENCY/1000000.0); 00138 dprintf("TXPower: %d dBm", TX_OUTPUT_POWER); 00139 #if USE_MODEM_LORA == 1 00140 dprintf("Bandwidth: %d Hz", LORA_BANDWIDTH); 00141 dprintf("Spreading factor: SF%d", LORA_SPREADING_FACTOR); 00142 #elif USE_MODEM_FSK == 1 00143 dprintf("Bandwidth: %d kHz", FSK_BANDWIDTH); 00144 dprintf("Baudrate: %d", FSK_DATARATE); 00145 #endif 00146 // Initialize Radio driver 00147 RadioEvents.TxDone = OnTxDone; 00148 RadioEvents.RxDone = OnRxDone; 00149 RadioEvents.RxError = OnRxError; 00150 RadioEvents.TxTimeout = OnTxTimeout; 00151 RadioEvents.RxTimeout = OnRxTimeout; 00152 if (Radio->Init( &RadioEvents ) == false) { 00153 while(1) { 00154 dprintf("Radio could not be detected!"); 00155 //usb_serial.printf("Radio could not be detected!"); 00156 wait( 1 ); 00157 } 00158 } 00159 00160 00161 switch(Radio->DetectBoardType()) { 00162 case SX1276MB1LAS: 00163 if (DEBUG_MESSAGE) 00164 dprintf(" > Board Type: SX1276MB1LAS <"); 00165 break; 00166 case SX1276MB1MAS: 00167 if (DEBUG_MESSAGE) 00168 dprintf(" > Board Type: SX1276MB1LAS <"); 00169 case MURATA_SX1276: 00170 if (DEBUG_MESSAGE) 00171 dprintf(" > Board Type: MURATA_SX1276_STM32L0 <"); 00172 break; 00173 case RFM95_SX1276: 00174 if (DEBUG_MESSAGE) 00175 dprintf(" > HopeRF RFM95xx <"); 00176 break; 00177 default: 00178 dprintf(" > Board Type: unknown <"); 00179 } 00180 00181 Radio->SetChannel(RF_FREQUENCY ); 00182 00183 #if USE_MODEM_LORA == 1 00184 00185 if (LORA_FHSS_ENABLED) 00186 dprintf(" > LORA FHSS Mode <"); 00187 if (!LORA_FHSS_ENABLED) 00188 dprintf(" > LORA Mode <"); 00189 00190 Radio->SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH, 00191 LORA_SPREADING_FACTOR, LORA_CODINGRATE, 00192 LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON, 00193 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP, 00194 LORA_IQ_INVERSION_ON, 2000 ); 00195 00196 Radio->SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, 00197 LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH, 00198 LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0, 00199 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP, 00200 LORA_IQ_INVERSION_ON, true ); 00201 00202 #elif USE_MODEM_FSK == 1 00203 00204 dprintf(" > FSK Mode <"); 00205 Radio->SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0, 00206 FSK_DATARATE, 0, 00207 FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON, 00208 FSK_CRC_ENABLED, 0, 0, 0, 2000 ); 00209 00210 Radio->SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE, 00211 0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH, 00212 0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, FSK_CRC_ENABLED, 00213 0, 0, false, true ); 00214 00215 #else 00216 00217 #error "Please define a modem in the compiler options." 00218 00219 #endif 00220 00221 00222 Radio->Rx( RX_TIMEOUT_VALUE ); 00223 while( 1 ) 00224 { 00225 #ifdef TARGET_STM32L4 00226 WatchDogUpdate(); 00227 #endif 00228 00229 switch( State ) 00230 { 00231 case RX: 00232 dprintf("SWITCH:::: RX \n"); 00233 *led3 = 0; 00234 *led = !*led; 00235 wait_ms( 10 ); 00236 /////////////////////////////// 00237 State = LOWPOWER; 00238 break; 00239 case RX_TIMEOUT: 00240 00241 State = LOWPOWER; 00242 dprintf("SWTICH : RX_TIMEOUT"); 00243 break; 00244 case RX_ERROR: 00245 // We have received a Packet with a CRC error, send reply as if packet was correct 00246 State = LOWPOWER; 00247 dprintf("SWTICH : RX_ERROR"); 00248 break; 00249 case LOWPOWER: 00250 00251 wait(1); 00252 if (BufferSize > 0){ 00253 00254 //usb_serial.printf("Entrou"); 00255 Radio->Rx( RX_TIMEOUT_VALUE ); 00256 //mode_buffer(Buffer,ii); 00257 00258 if (Buffer[0] == 'H'){ 00259 return -3; 00260 } 00261 //usb_serial.printf("%s",Buffer); 00262 //ss.putc(usb_serial.getc()); 00263 //ss.putc("x\r\n"); 00264 00265 } 00266 00267 Radio->Rx( RX_TIMEOUT_VALUE ); 00268 //usb_serial.printf("saiu"); 00269 break; 00270 default: 00271 dprintf("SWTICH : defualt"); 00272 State = LOWPOWER; 00273 break; 00274 } 00275 } 00276 } 00277 00278 void OnTxDone(void *radio, void *userThisPtr, void *userData) 00279 { 00280 if (DEBUG_MESSAGE) 00281 dprintf("> OnTxDone [7]"); 00282 } 00283 00284 void OnRxDone(void *radio, void *userThisPtr, void *userData, uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr) 00285 { 00286 Radio->Sleep( ); 00287 BufferSize = size; 00288 memcpy( Buffer, payload, BufferSize ); 00289 State = RX; 00290 Buffer[500] = 0; 00291 00292 //dprintf("%s", Buffer); 00293 //usb_serial.printf("D"); 00294 00295 } 00296 00297 void OnTxTimeout(void *radio, void *userThisPtr, void *userData) 00298 { 00299 *led3 = 0; 00300 Radio->Sleep( ); 00301 State = LOWPOWER; 00302 } 00303 00304 void OnRxTimeout(void *radio, void *userThisPtr, void *userData) 00305 { 00306 *led3 = 0; 00307 Radio->Sleep( ); 00308 Buffer[BufferSize-1] = 0; 00309 State = RX_TIMEOUT; 00310 } 00311 00312 void OnRxError(void *radio, void *userThisPtr, void *userData) 00313 { 00314 Radio->Sleep( ); 00315 State = RX_ERROR; 00316 } 00317 00318 #endif
Generated on Wed Jul 13 2022 09:14:57 by
1.7.2