Version FC

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

Committer:
FCH_31
Date:
Mon Oct 22 09:37:50 2018 +0000
Revision:
41:5a436163dddf
avec radio;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
FCH_31 41:5a436163dddf 1 /*
FCH_31 41:5a436163dddf 2 * MISNet
FCH_31 41:5a436163dddf 3 *
FCH_31 41:5a436163dddf 4 * TERMINAL Radio module
FCH_31 41:5a436163dddf 5 *
FCH_31 41:5a436163dddf 6 * Created on: September 19, 2018 Author: Francis CHATAIN
FCH_31 41:5a436163dddf 7 *
FCH_31 41:5a436163dddf 8 */
FCH_31 41:5a436163dddf 9
FCH_31 41:5a436163dddf 10 // ================================================================= INCLUDES
FCH_31 41:5a436163dddf 11
FCH_31 41:5a436163dddf 12 #include "mbed.h"
FCH_31 41:5a436163dddf 13 #include "main.h"
FCH_31 41:5a436163dddf 14 #include "Radio.h"
FCH_31 41:5a436163dddf 15 #include "sx1280-hal.h"
FCH_31 41:5a436163dddf 16 #include <string.h>
FCH_31 41:5a436163dddf 17
FCH_31 41:5a436163dddf 18
FCH_31 41:5a436163dddf 19 // ================================================================= VARIABLE & DEFINE
FCH_31 41:5a436163dddf 20
FCH_31 41:5a436163dddf 21 extern "C"{
FCH_31 41:5a436163dddf 22 int _getpid () { return -1;}
FCH_31 41:5a436163dddf 23 int _kill (int pid, int sig) { return -1; }
FCH_31 41:5a436163dddf 24 extern int _write () ; //{return -1;}
FCH_31 41:5a436163dddf 25 }
FCH_31 41:5a436163dddf 26
FCH_31 41:5a436163dddf 27 //DigitalOut ledReceive (PA_8) ;
FCH_31 41:5a436163dddf 28 //DigitalOut ledSend (PB_13) ;
FCH_31 41:5a436163dddf 29 DigitalOut ledReceive (A5) ;
FCH_31 41:5a436163dddf 30 DigitalOut ledSend (A4) ;
FCH_31 41:5a436163dddf 31
FCH_31 41:5a436163dddf 32
FCH_31 41:5a436163dddf 33 /******************************************************************************
FCH_31 41:5a436163dddf 34 * Declaration of RADIO variables and function
FCH_31 41:5a436163dddf 35 *****************************************************************************/
FCH_31 41:5a436163dddf 36
FCH_31 41:5a436163dddf 37 // FEM TxEN:PB3 RxEN:PB9
FCH_31 41:5a436163dddf 38 //DigitalOut femTx (PB_3);
FCH_31 41:5a436163dddf 39 //DigitalOut femRx (PB_9);
FCH_31 41:5a436163dddf 40
FCH_31 41:5a436163dddf 41 #define BUFFER_SIZE 100
FCH_31 41:5a436163dddf 42 uint8_t BufferSize = BUFFER_SIZE;
FCH_31 41:5a436163dddf 43 uint8_t Buffer[BUFFER_SIZE];
FCH_31 41:5a436163dddf 44
FCH_31 41:5a436163dddf 45 int8_t RssiValue = 0 ;
FCH_31 41:5a436163dddf 46 int8_t SnrValue = 0 ;
FCH_31 41:5a436163dddf 47
FCH_31 41:5a436163dddf 48 typedef enum { APP_IDLE=0, APP_LOWPOWER, APP_RX, APP_RX_TIMEOUT, APP_RX_ERROR, APP_TX, APP_TX_TIMEOUT,} AppStates_t;
FCH_31 41:5a436163dddf 49 AppStates_t AppState = APP_LOWPOWER ;
FCH_31 41:5a436163dddf 50
FCH_31 41:5a436163dddf 51 ModulationParams_t ModulationParams ;
FCH_31 41:5a436163dddf 52 ModulationParams_t ModulationParamsEmitter ;
FCH_31 41:5a436163dddf 53 ModulationParams_t ModulationParamsReceiver;
FCH_31 41:5a436163dddf 54
FCH_31 41:5a436163dddf 55 PacketParams_t PacketParamsReceiver ;
FCH_31 41:5a436163dddf 56 PacketStatus_t PacketStatusReceiver ;
FCH_31 41:5a436163dddf 57
FCH_31 41:5a436163dddf 58 PacketParams_t PacketParamsEmitter ;
FCH_31 41:5a436163dddf 59
FCH_31 41:5a436163dddf 60
FCH_31 41:5a436163dddf 61 // Radio Callback event
FCH_31 41:5a436163dddf 62 void OnTxDone (void) { AppState = APP_TX ; }
FCH_31 41:5a436163dddf 63 void OnRxDone (void) { AppState = APP_RX ; }
FCH_31 41:5a436163dddf 64 void OnTxTimeout (void) { AppState = APP_TX_TIMEOUT ; }
FCH_31 41:5a436163dddf 65 void OnRxTimeout (void) { AppState = APP_RX_TIMEOUT ; }
FCH_31 41:5a436163dddf 66 void OnRxError (IrqErrorCode_t errorCode) { AppState = APP_RX_ERROR ; }
FCH_31 41:5a436163dddf 67 void OnRangingDone (IrqRangingCode_t val) { }
FCH_31 41:5a436163dddf 68 void OnCadDone (bool channelActivityDetected){}
FCH_31 41:5a436163dddf 69
FCH_31 41:5a436163dddf 70 RadioCallbacks_t callbacks ={
FCH_31 41:5a436163dddf 71 &OnTxDone , &OnRxDone , // tx / rx Done
FCH_31 41:5a436163dddf 72 NULL , NULL , // syncWordDone headerDone
FCH_31 41:5a436163dddf 73 &OnTxTimeout , &OnRxTimeout , // txTimeout rxTimeout
FCH_31 41:5a436163dddf 74 &OnRxError , // rxError
FCH_31 41:5a436163dddf 75 NULL , NULL , // rangingDone / cadDone
FCH_31 41:5a436163dddf 76 };
FCH_31 41:5a436163dddf 77
FCH_31 41:5a436163dddf 78 // Timeout callback
FCH_31 41:5a436163dddf 79 #define TX_TIMEOUT_VALUE 100 // ms
FCH_31 41:5a436163dddf 80 #define RX_TIMEOUT_VALUE 0x00000000 // or 100 (ms)
FCH_31 41:5a436163dddf 81 #define RX_TIMEOUT_TICK_SIZE RADIO_TICK_SIZE_1000_US
FCH_31 41:5a436163dddf 82
FCH_31 41:5a436163dddf 83 uint16_t RxIrqMask = IRQ_RX_DONE | IRQ_RX_TX_TIMEOUT ;
FCH_31 41:5a436163dddf 84 uint16_t TxIrqMask = IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT ;
FCH_31 41:5a436163dddf 85
FCH_31 41:5a436163dddf 86
FCH_31 41:5a436163dddf 87 int8_t rssi=0, snr=0;
FCH_31 41:5a436163dddf 88
FCH_31 41:5a436163dddf 89 // SX1280 MOSI:PA7 MISO:PA6 CLK:PA5 CS:PA4 BSY:PB7 DIO1:PB6 DIO2:PB5 DIO3:PB4 RST:PB8
FCH_31 41:5a436163dddf 90 // SX1280Hal Radio (PA_7, PA_6, PA_5, PA_4, PB_7, PB_6, PB_5, PB_4, PB_8, &callbacks);//mosi miso clk cs bsy dio1 dio2 dio3 rst [DONGLE]
FCH_31 41:5a436163dddf 91 SX1280Hal Radio ( D11 , D12 , D13 , D7 , D3 , D5 , NC , NC , A0 , &callbacks ); // [NUCLEO]
FCH_31 41:5a436163dddf 92
FCH_31 41:5a436163dddf 93 //Radio Factory Parameter Sender and Receiver only diff the Central Frequency emetter are shited by 800 Mhz
FCH_31 41:5a436163dddf 94 uint8_t _modulation = PACKET_TYPE_LORA;
FCH_31 41:5a436163dddf 95 int _spreadingFactor = 2 ;
FCH_31 41:5a436163dddf 96 int _bandWidth = 1 ;
FCH_31 41:5a436163dddf 97 int _codingRate = 0 ;
FCH_31 41:5a436163dddf 98 unsigned long _frequencySend = 2400000000UL ;
FCH_31 41:5a436163dddf 99 unsigned long _frequencyReceive = 2400000000UL ;
FCH_31 41:5a436163dddf 100 int _outputPower = 13 ; // -18 to +13 dBm
FCH_31 41:5a436163dddf 101 int _size = 10 ;
FCH_31 41:5a436163dddf 102
FCH_31 41:5a436163dddf 103 int _iq = 1 ;
FCH_31 41:5a436163dddf 104 int _crc = 0 ;
FCH_31 41:5a436163dddf 105 uint8_t _ar[] = { 0xDD, 0xA0, 0x96, 0x69, 0xDD } ; // only used in GENERIC and BLE mode
FCH_31 41:5a436163dddf 106 uint8_t _crcSeedLocal[3] = { 0x00, 0x45, 0x67 } ; // only used in GFSK, FLRC
FCH_31 41:5a436163dddf 107
FCH_31 41:5a436163dddf 108
FCH_31 41:5a436163dddf 109 // Futur use with FLRC modulation
FCH_31 41:5a436163dddf 110 //int _mode = 4 ;
FCH_31 41:5a436163dddf 111 //int _modeShape = 1 ;
FCH_31 41:5a436163dddf 112 //int _modeIndex = 2 ;
FCH_31 41:5a436163dddf 113 //int _whitening = 1 ;
FCH_31 41:5a436163dddf 114 //int _bitrateBandwidth = 12 ;
FCH_31 41:5a436163dddf 115
FCH_31 41:5a436163dddf 116 // ============================================================================================ Declaration Internal function
FCH_31 41:5a436163dddf 117
FCH_31 41:5a436163dddf 118 RadioLoRaCodingRates_t returnCrLORA (int index) ;
FCH_31 41:5a436163dddf 119 RadioLoRaSpreadingFactors_t returnSfLORA (int index) ;
FCH_31 41:5a436163dddf 120 RadioLoRaBandwidths_t returnBwLORA (int index) ;
FCH_31 41:5a436163dddf 121
FCH_31 41:5a436163dddf 122 void setFemTxRx (bool tx) ; // only if FEM HW
FCH_31 41:5a436163dddf 123
FCH_31 41:5a436163dddf 124 /* Evolution FLRC
FCH_31 41:5a436163dddf 125 * RadioCrcTypes_t returnCrcLen (int index) ;
FCH_31 41:5a436163dddf 126 * RadioFlrcBitrates_t returnBrbwFLRC (int index) ;
FCH_31 41:5a436163dddf 127 * RadioFlrcCodingRates_t returnCrFLRC (int index) ;
FCH_31 41:5a436163dddf 128 * RadioModShapings_t returnMs (int index) ;
FCH_31 41:5a436163dddf 129 */
FCH_31 41:5a436163dddf 130
FCH_31 41:5a436163dddf 131 // ============================================================================================ EXTERNAL FUNCTION
FCH_31 41:5a436163dddf 132
FCH_31 41:5a436163dddf 133
FCH_31 41:5a436163dddf 134 // ============================================================================================ Radio Self Test
FCH_31 41:5a436163dddf 135
FCH_31 41:5a436163dddf 136 bool radioSelfTest (uint16_t *rev) {
FCH_31 41:5a436163dddf 137 Radio.Init();
FCH_31 41:5a436163dddf 138 *rev = Radio.GetFirmwareVersion () ;
FCH_31 41:5a436163dddf 139 // printf("*** RAD_ *** Selftest : Firmware R%u\r\n", rev);
FCH_31 41:5a436163dddf 140 wait(0.2);
FCH_31 41:5a436163dddf 141 //printf((rev==0xffff?"Self test FAIL\r\n":"Self test PASS\r\n"));
FCH_31 41:5a436163dddf 142 if (*rev==0xffff) return false ;
FCH_31 41:5a436163dddf 143 else return true ;
FCH_31 41:5a436163dddf 144 }
FCH_31 41:5a436163dddf 145
FCH_31 41:5a436163dddf 146 // ============================================================================================ Radio Initialisation
FCH_31 41:5a436163dddf 147
FCH_31 41:5a436163dddf 148
FCH_31 41:5a436163dddf 149 void radioInitReceiver (RadioParameter radioParameter ) {
FCH_31 41:5a436163dddf 150 _modulation = radioParameter.modulation ;
FCH_31 41:5a436163dddf 151 _spreadingFactor = radioParameter.spreadingFactor ;
FCH_31 41:5a436163dddf 152 _bandWidth = radioParameter.bandWidth ;
FCH_31 41:5a436163dddf 153 _codingRate = radioParameter.codingRate ;
FCH_31 41:5a436163dddf 154 _frequencyReceive = radioParameter.frequency ;
FCH_31 41:5a436163dddf 155
FCH_31 41:5a436163dddf 156 if( _modulation == PACKET_TYPE_LORA ) {
FCH_31 41:5a436163dddf 157 ModulationParamsReceiver.PacketType = PACKET_TYPE_LORA;
FCH_31 41:5a436163dddf 158 ModulationParamsReceiver.Params.LoRa.SpreadingFactor = returnSfLORA (_spreadingFactor) ;
FCH_31 41:5a436163dddf 159 ModulationParamsReceiver.Params.LoRa.Bandwidth = returnBwLORA (_bandWidth) ;
FCH_31 41:5a436163dddf 160 ModulationParamsReceiver.Params.LoRa.CodingRate = returnCrLORA (_codingRate) ;
FCH_31 41:5a436163dddf 161 PacketParamsReceiver.PacketType = PACKET_TYPE_LORA;
FCH_31 41:5a436163dddf 162 PacketParamsReceiver.Params.LoRa.PreambleLength = 0x08;
FCH_31 41:5a436163dddf 163 PacketParamsReceiver.Params.LoRa.HeaderType = LORA_PACKET_VARIABLE_LENGTH;
FCH_31 41:5a436163dddf 164 PacketParamsReceiver.Params.LoRa.PayloadLength = 7 ;
FCH_31 41:5a436163dddf 165 PacketParamsReceiver.Params.LoRa.Crc = _crc==1?LORA_CRC_ON:LORA_CRC_OFF;
FCH_31 41:5a436163dddf 166 PacketParamsReceiver.Params.LoRa.InvertIQ = _iq==1?LORA_IQ_INVERTED:LORA_IQ_NORMAL;
FCH_31 41:5a436163dddf 167 //Eeprom.EepromData.DemoSettings.PayloadLength = PacketParams.Params.LoRa.PayloadLength;
FCH_31 41:5a436163dddf 168 }
FCH_31 41:5a436163dddf 169 }
FCH_31 41:5a436163dddf 170
FCH_31 41:5a436163dddf 171 void radioInitEmitter (RadioParameter radioParameter ) {
FCH_31 41:5a436163dddf 172 _modulation = radioParameter.modulation ;
FCH_31 41:5a436163dddf 173 _spreadingFactor = radioParameter.spreadingFactor ;
FCH_31 41:5a436163dddf 174 _bandWidth = radioParameter.bandWidth ;
FCH_31 41:5a436163dddf 175 _codingRate = radioParameter.codingRate ;
FCH_31 41:5a436163dddf 176 _size = radioParameter.size ;
FCH_31 41:5a436163dddf 177 _frequencySend = radioParameter.frequency ;
FCH_31 41:5a436163dddf 178
FCH_31 41:5a436163dddf 179 if( _modulation == PACKET_TYPE_LORA ) {
FCH_31 41:5a436163dddf 180 ModulationParamsEmitter.PacketType = PACKET_TYPE_LORA ;
FCH_31 41:5a436163dddf 181 ModulationParamsEmitter.Params.LoRa.SpreadingFactor = returnSfLORA (_spreadingFactor) ;
FCH_31 41:5a436163dddf 182 ModulationParamsEmitter.Params.LoRa.Bandwidth = returnBwLORA (_bandWidth) ;
FCH_31 41:5a436163dddf 183 ModulationParamsEmitter.Params.LoRa.CodingRate = returnCrLORA (_codingRate) ;
FCH_31 41:5a436163dddf 184 PacketParamsEmitter.PacketType = PACKET_TYPE_LORA ;
FCH_31 41:5a436163dddf 185 PacketParamsEmitter.Params.LoRa.PreambleLength = 0x08 ;
FCH_31 41:5a436163dddf 186 PacketParamsEmitter.Params.LoRa.HeaderType = LORA_PACKET_VARIABLE_LENGTH ;
FCH_31 41:5a436163dddf 187 PacketParamsEmitter.Params.LoRa.PayloadLength = _size ;
FCH_31 41:5a436163dddf 188 PacketParamsEmitter.Params.LoRa.Crc = _crc==1?LORA_CRC_ON:LORA_CRC_OFF ;
FCH_31 41:5a436163dddf 189 PacketParamsEmitter.Params.LoRa.InvertIQ = _iq==1?LORA_IQ_INVERTED:LORA_IQ_NORMAL;
FCH_31 41:5a436163dddf 190 //Eeprom.EepromData.DemoSettings.PayloadLength = PacketParams.Params.LoRa.PayloadLength;
FCH_31 41:5a436163dddf 191 }
FCH_31 41:5a436163dddf 192 }
FCH_31 41:5a436163dddf 193
FCH_31 41:5a436163dddf 194
FCH_31 41:5a436163dddf 195 void radioInitRadio () {
FCH_31 41:5a436163dddf 196 Radio.SetStandby ( STDBY_RC ) ;
FCH_31 41:5a436163dddf 197 Radio.SetCrcSeed ( _crcSeedLocal ) ;
FCH_31 41:5a436163dddf 198 Radio.SetCrcPolynomial ( 0x0123 ) ;
FCH_31 41:5a436163dddf 199 Radio.SetPollingMode ( ) ;
FCH_31 41:5a436163dddf 200 Radio.SetBufferBaseAddresses ( 0x00, 0x00 ) ;
FCH_31 41:5a436163dddf 201 Radio.SetSyncWord ( 1, _ar ) ;
FCH_31 41:5a436163dddf 202 }
FCH_31 41:5a436163dddf 203
FCH_31 41:5a436163dddf 204 void radioStartReceive (RadioParameter radioParameter) {
FCH_31 41:5a436163dddf 205 _frequencyReceive = radioParameter.frequency ;
FCH_31 41:5a436163dddf 206 _outputPower = radioParameter.outputPower ;
FCH_31 41:5a436163dddf 207
FCH_31 41:5a436163dddf 208 // setFemTxRx (0) ;
FCH_31 41:5a436163dddf 209 ledSend = 0 ;
FCH_31 41:5a436163dddf 210 ledReceive = 0 ;
FCH_31 41:5a436163dddf 211
FCH_31 41:5a436163dddf 212 Radio.SetPacketType ( ModulationParamsReceiver.PacketType ) ;
FCH_31 41:5a436163dddf 213 Radio.SetModulationParams ( &ModulationParamsReceiver ) ;
FCH_31 41:5a436163dddf 214 Radio.SetPacketParams ( &PacketParamsReceiver ) ;
FCH_31 41:5a436163dddf 215 Radio.SetRfFrequency ( _frequencyReceive ) ;
FCH_31 41:5a436163dddf 216 Radio.SetDioIrqParams ( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ) ;
FCH_31 41:5a436163dddf 217 Radio.SetRx ( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } ) ;
FCH_31 41:5a436163dddf 218
FCH_31 41:5a436163dddf 219 AppState = APP_LOWPOWER ;
FCH_31 41:5a436163dddf 220 memset ( &Buffer , 0x00, BufferSize ) ;
FCH_31 41:5a436163dddf 221 }
FCH_31 41:5a436163dddf 222
FCH_31 41:5a436163dddf 223
FCH_31 41:5a436163dddf 224 void radioSend (RadioParameter radioParameter, uint8_t *frame, uint8_t len) {
FCH_31 41:5a436163dddf 225 _frequencySend = radioParameter.frequency ;
FCH_31 41:5a436163dddf 226 _outputPower = radioParameter.outputPower ;
FCH_31 41:5a436163dddf 227
FCH_31 41:5a436163dddf 228 ledSend = 1 ;
FCH_31 41:5a436163dddf 229 ledReceive = 0 ;
FCH_31 41:5a436163dddf 230 // setFemTxRx(1);
FCH_31 41:5a436163dddf 231
FCH_31 41:5a436163dddf 232 Radio.SetPacketType ( ModulationParamsEmitter.PacketType ) ;
FCH_31 41:5a436163dddf 233 Radio.SetModulationParams ( &ModulationParamsEmitter ) ;
FCH_31 41:5a436163dddf 234 Radio.SetPacketParams ( &PacketParamsEmitter ) ;
FCH_31 41:5a436163dddf 235 Radio.SetRfFrequency ( _frequencySend ) ;
FCH_31 41:5a436163dddf 236 Radio.SetTxParams ( _outputPower, RADIO_RAMP_20_US ) ;
FCH_31 41:5a436163dddf 237 Radio.SetDioIrqParams ( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
FCH_31 41:5a436163dddf 238 Radio.SendPayload ( frame, len, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } );
FCH_31 41:5a436163dddf 239 }
FCH_31 41:5a436163dddf 240
FCH_31 41:5a436163dddf 241 // ============================================================================================ Radio Handler
FCH_31 41:5a436163dddf 242 bool radioHandler(uint8_t *frame, uint8_t *len, int8_t *rssi, int8_t *snr){
FCH_31 41:5a436163dddf 243
FCH_31 41:5a436163dddf 244 bool event = false ;
FCH_31 41:5a436163dddf 245 Radio.ProcessIrqs();
FCH_31 41:5a436163dddf 246 switch( AppState ) {
FCH_31 41:5a436163dddf 247 case APP_RX:
FCH_31 41:5a436163dddf 248 printf ("*** RADIO *** radioHandler APP RX \r\n");
FCH_31 41:5a436163dddf 249 AppState = APP_LOWPOWER;
FCH_31 41:5a436163dddf 250 memset ( &Buffer , 0, BUFFER_SIZE ) ;
FCH_31 41:5a436163dddf 251 ledReceive = !ledReceive;
FCH_31 41:5a436163dddf 252 Radio.GetPayload( Buffer, len, BUFFER_SIZE );
FCH_31 41:5a436163dddf 253 //cdc2->printf ("APP-RX Buffer = %s\r\n", Buffer);
FCH_31 41:5a436163dddf 254 //showRssiSnr () ;
FCH_31 41:5a436163dddf 255 Radio.GetPacketStatus(&PacketStatusReceiver);
FCH_31 41:5a436163dddf 256 *rssi = PacketStatusReceiver.LoRa.RssiPkt;
FCH_31 41:5a436163dddf 257 *snr = PacketStatusReceiver.LoRa.SnrPkt;
FCH_31 41:5a436163dddf 258 memcpy (frame, Buffer, *len) ;
FCH_31 41:5a436163dddf 259 event = true ;
FCH_31 41:5a436163dddf 260 //printBytes (Buffer, 30) ;
FCH_31 41:5a436163dddf 261 setFemTxRx(0);
FCH_31 41:5a436163dddf 262 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
FCH_31 41:5a436163dddf 263 Radio.SetRx( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } );
FCH_31 41:5a436163dddf 264 ledReceive = !ledReceive;
FCH_31 41:5a436163dddf 265 break;
FCH_31 41:5a436163dddf 266
FCH_31 41:5a436163dddf 267 case APP_TX:
FCH_31 41:5a436163dddf 268 printf ("*** RADIO *** radioHandler APP TX \r\n");
FCH_31 41:5a436163dddf 269 AppState = APP_LOWPOWER;
FCH_31 41:5a436163dddf 270 //cdc2->printf ("APP-TX \r\n");
FCH_31 41:5a436163dddf 271 setFemTxRx(0); // if fem
FCH_31 41:5a436163dddf 272 Radio.SetPacketType ( ModulationParamsReceiver.PacketType ) ;
FCH_31 41:5a436163dddf 273 Radio.SetModulationParams ( &ModulationParamsReceiver ) ;
FCH_31 41:5a436163dddf 274 Radio.SetPacketParams ( &PacketParamsReceiver ) ;
FCH_31 41:5a436163dddf 275 Radio.SetRfFrequency ( _frequencyReceive ) ;
FCH_31 41:5a436163dddf 276
FCH_31 41:5a436163dddf 277 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
FCH_31 41:5a436163dddf 278 Radio.SetRx( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } );
FCH_31 41:5a436163dddf 279 ledSend = 0 ;
FCH_31 41:5a436163dddf 280 break;
FCH_31 41:5a436163dddf 281
FCH_31 41:5a436163dddf 282 case APP_RX_TIMEOUT:
FCH_31 41:5a436163dddf 283 printf ("*** RADIO *** radioHandler APP RX Timeout \r\n");
FCH_31 41:5a436163dddf 284 AppState = APP_LOWPOWER;
FCH_31 41:5a436163dddf 285 setFemTxRx(0);
FCH_31 41:5a436163dddf 286 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
FCH_31 41:5a436163dddf 287 Radio.SetRx( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } );
FCH_31 41:5a436163dddf 288 break;
FCH_31 41:5a436163dddf 289
FCH_31 41:5a436163dddf 290 case APP_RX_ERROR:
FCH_31 41:5a436163dddf 291 AppState = APP_LOWPOWER;
FCH_31 41:5a436163dddf 292 break;
FCH_31 41:5a436163dddf 293
FCH_31 41:5a436163dddf 294 case APP_TX_TIMEOUT:
FCH_31 41:5a436163dddf 295 printf ("*** RADIO *** radioHandler APP TX Timeout \r\n");
FCH_31 41:5a436163dddf 296 AppState = APP_LOWPOWER;
FCH_31 41:5a436163dddf 297 //cdc2->printf ("APP-TX \r\n");
FCH_31 41:5a436163dddf 298 setFemTxRx(0);
FCH_31 41:5a436163dddf 299 Radio.SetPacketType ( ModulationParamsReceiver.PacketType ) ;
FCH_31 41:5a436163dddf 300 Radio.SetModulationParams ( &ModulationParamsReceiver ) ;
FCH_31 41:5a436163dddf 301 Radio.SetPacketParams ( &PacketParamsReceiver ) ;
FCH_31 41:5a436163dddf 302 Radio.SetRfFrequency ( _frequencyReceive ) ;
FCH_31 41:5a436163dddf 303
FCH_31 41:5a436163dddf 304 Radio.SetDioIrqParams( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
FCH_31 41:5a436163dddf 305 Radio.SetRx( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } );
FCH_31 41:5a436163dddf 306 ledSend = 0 ;
FCH_31 41:5a436163dddf 307 break;
FCH_31 41:5a436163dddf 308
FCH_31 41:5a436163dddf 309 case APP_LOWPOWER:
FCH_31 41:5a436163dddf 310 break;
FCH_31 41:5a436163dddf 311
FCH_31 41:5a436163dddf 312 default:
FCH_31 41:5a436163dddf 313 // Set low power
FCH_31 41:5a436163dddf 314 break;
FCH_31 41:5a436163dddf 315 }
FCH_31 41:5a436163dddf 316 return event ;
FCH_31 41:5a436163dddf 317 }
FCH_31 41:5a436163dddf 318
FCH_31 41:5a436163dddf 319
FCH_31 41:5a436163dddf 320
FCH_31 41:5a436163dddf 321
FCH_31 41:5a436163dddf 322 // ====================================================================================================== INTERNAL FUNCTION
FCH_31 41:5a436163dddf 323
FCH_31 41:5a436163dddf 324 RadioLoRaCodingRates_t returnCrLORA (int index) {
FCH_31 41:5a436163dddf 325 // coding rate for LoRa
FCH_31 41:5a436163dddf 326 switch(index){
FCH_31 41:5a436163dddf 327 case 0: return LORA_CR_4_5;
FCH_31 41:5a436163dddf 328 case 1: return LORA_CR_4_6;
FCH_31 41:5a436163dddf 329 case 2: return LORA_CR_4_7;
FCH_31 41:5a436163dddf 330 case 3: return LORA_CR_4_8;
FCH_31 41:5a436163dddf 331 case 4: return LORA_CR_LI_4_5;
FCH_31 41:5a436163dddf 332 case 5: return LORA_CR_LI_4_6;
FCH_31 41:5a436163dddf 333 case 6: return LORA_CR_LI_4_7;
FCH_31 41:5a436163dddf 334 default : return LORA_CR_4_5;
FCH_31 41:5a436163dddf 335 }
FCH_31 41:5a436163dddf 336 }
FCH_31 41:5a436163dddf 337
FCH_31 41:5a436163dddf 338
FCH_31 41:5a436163dddf 339 // SF for LoRa
FCH_31 41:5a436163dddf 340 RadioLoRaSpreadingFactors_t returnSfLORA(int index) {
FCH_31 41:5a436163dddf 341 switch(index){
FCH_31 41:5a436163dddf 342 case 0: return LORA_SF5 ;
FCH_31 41:5a436163dddf 343 case 1: return LORA_SF6 ;
FCH_31 41:5a436163dddf 344 case 2: return LORA_SF7 ;
FCH_31 41:5a436163dddf 345 case 3: return LORA_SF8 ;
FCH_31 41:5a436163dddf 346 case 4: return LORA_SF9 ;
FCH_31 41:5a436163dddf 347 case 5: return LORA_SF10;
FCH_31 41:5a436163dddf 348 case 6: return LORA_SF11;
FCH_31 41:5a436163dddf 349 case 7: return LORA_SF12;
FCH_31 41:5a436163dddf 350 default : return LORA_SF7 ;
FCH_31 41:5a436163dddf 351 }
FCH_31 41:5a436163dddf 352 }
FCH_31 41:5a436163dddf 353 RadioModShapings_t returnMs(int index){
FCH_31 41:5a436163dddf 354 // shaping for FLRC GFSK and BLE
FCH_31 41:5a436163dddf 355 switch(index){
FCH_31 41:5a436163dddf 356 case 0: return RADIO_MOD_SHAPING_BT_OFF ;
FCH_31 41:5a436163dddf 357 case 1: return RADIO_MOD_SHAPING_BT_1_0 ;
FCH_31 41:5a436163dddf 358 case 2: return RADIO_MOD_SHAPING_BT_0_5 ;
FCH_31 41:5a436163dddf 359 default : return RADIO_MOD_SHAPING_BT_1_0 ;
FCH_31 41:5a436163dddf 360 }
FCH_31 41:5a436163dddf 361 }
FCH_31 41:5a436163dddf 362 RadioLoRaBandwidths_t returnBwLORA(int index){
FCH_31 41:5a436163dddf 363 // bandwidth for LoRa
FCH_31 41:5a436163dddf 364 switch(index){
FCH_31 41:5a436163dddf 365 case 0: return LORA_BW_0200 ;
FCH_31 41:5a436163dddf 366 case 1: return LORA_BW_0400 ;
FCH_31 41:5a436163dddf 367 case 2: return LORA_BW_0800 ;
FCH_31 41:5a436163dddf 368 case 3: return LORA_BW_1600 ;
FCH_31 41:5a436163dddf 369 default : return LORA_BW_1600 ;
FCH_31 41:5a436163dddf 370 }
FCH_31 41:5a436163dddf 371 }
FCH_31 41:5a436163dddf 372
FCH_31 41:5a436163dddf 373
FCH_31 41:5a436163dddf 374 void setFemTxRx(bool tx) {
FCH_31 41:5a436163dddf 375 /* Hoel module
FCH_31 41:5a436163dddf 376 if (tx) { femTx=1 ; femRx=0 ; }
FCH_31 41:5a436163dddf 377 else { femRx=1 ; femTx=0 ; }
FCH_31 41:5a436163dddf 378 */
FCH_31 41:5a436163dddf 379 }
FCH_31 41:5a436163dddf 380
FCH_31 41:5a436163dddf 381
FCH_31 41:5a436163dddf 382 /* Futur Use
FCH_31 41:5a436163dddf 383 *
FCH_31 41:5a436163dddf 384 * else if( _modulation == PACKET_TYPE_FLRC ) {
FCH_31 41:5a436163dddf 385 ModulationParams.PacketType = PACKET_TYPE_FLRC;
FCH_31 41:5a436163dddf 386 ModulationParams.Params.Flrc.BitrateBandwidth = returnBrbwFLRC (_bitrateBandwidth);// FLRC_BR_0_260_BW_0_3;
FCH_31 41:5a436163dddf 387 ModulationParams.Params.Flrc.CodingRate = returnCrFLRC (codingRate);//FLRC_CR_1_2;
FCH_31 41:5a436163dddf 388 ModulationParams.Params.Flrc.ModulationShaping = returnMs (_modeShape);//RADIO_MOD_SHAPING_BT_1_0;
FCH_31 41:5a436163dddf 389 PacketParams.PacketType = PACKET_TYPE_FLRC;
FCH_31 41:5a436163dddf 390 PacketParams.Params.Flrc.PreambleLength = PREAMBLE_LENGTH_32_BITS;
FCH_31 41:5a436163dddf 391 PacketParams.Params.Flrc.SyncWordLength = FLRC_SYNCWORD_LENGTH_4_BYTE;
FCH_31 41:5a436163dddf 392 PacketParams.Params.Flrc.SyncWordMatch = RADIO_RX_MATCH_SYNCWORD_1;
FCH_31 41:5a436163dddf 393 PacketParams.Params.Flrc.HeaderType = RADIO_PACKET_VARIABLE_LENGTH;
FCH_31 41:5a436163dddf 394 PacketParams.Params.Flrc.PayloadLength = 32 ;
FCH_31 41:5a436163dddf 395 PacketParams.Params.Flrc.CrcLength = RADIO_CRC_3_BYTES;
FCH_31 41:5a436163dddf 396 PacketParams.Params.Flrc.Whitening = _whitening==1?RADIO_WHITENING_ON:RADIO_WHITENING_OFF;//RADIO_WHITENING_OFF;
FCH_31 41:5a436163dddf 397 //Eeprom.EepromData.DemoSettings.PayloadLength = PacketParams.Params.Flrc.PayloadLength;
FCH_31 41:5a436163dddf 398 }
FCH_31 41:5a436163dddf 399 *
FCH_31 41:5a436163dddf 400 *
FCH_31 41:5a436163dddf 401 *
FCH_31 41:5a436163dddf 402 *RadioFlrcBitrates_t returnBrbwFLRC(int index){
FCH_31 41:5a436163dddf 403 // bitrate and bandwidth for FLRC
FCH_31 41:5a436163dddf 404 switch(index){
FCH_31 41:5a436163dddf 405 case 0: return FLRC_BR_1_300_BW_1_2;
FCH_31 41:5a436163dddf 406 case 1: return FLRC_BR_1_040_BW_1_2;
FCH_31 41:5a436163dddf 407 case 2: return FLRC_BR_0_650_BW_0_6;
FCH_31 41:5a436163dddf 408 case 3: return FLRC_BR_0_520_BW_0_6;
FCH_31 41:5a436163dddf 409 case 4: return FLRC_BR_0_325_BW_0_3;
FCH_31 41:5a436163dddf 410 case 5: return FLRC_BR_0_260_BW_0_3;
FCH_31 41:5a436163dddf 411 default : return FLRC_BR_1_300_BW_1_2;
FCH_31 41:5a436163dddf 412 }
FCH_31 41:5a436163dddf 413 }
FCH_31 41:5a436163dddf 414 RadioFlrcCodingRates_t returnCrFLRC(int index){
FCH_31 41:5a436163dddf 415 switch(index){
FCH_31 41:5a436163dddf 416 case 0: return FLRC_CR_1_2;
FCH_31 41:5a436163dddf 417 case 1: return FLRC_CR_3_4;
FCH_31 41:5a436163dddf 418 case 2: return FLRC_CR_3_4;
FCH_31 41:5a436163dddf 419 default : return FLRC_CR_1_2;
FCH_31 41:5a436163dddf 420 }
FCH_31 41:5a436163dddf 421 }
FCH_31 41:5a436163dddf 422
FCH_31 41:5a436163dddf 423 RadioCrcTypes_t returnCrcLen(int index){
FCH_31 41:5a436163dddf 424 // CRC length for GFSK and FLRC
FCH_31 41:5a436163dddf 425 switch(index){
FCH_31 41:5a436163dddf 426 case 0: return RADIO_CRC_OFF;
FCH_31 41:5a436163dddf 427 case 1: return RADIO_CRC_1_BYTES;
FCH_31 41:5a436163dddf 428 case 2: return RADIO_CRC_2_BYTES;
FCH_31 41:5a436163dddf 429 case 3: return RADIO_CRC_3_BYTES;
FCH_31 41:5a436163dddf 430 default : return RADIO_CRC_OFF;
FCH_31 41:5a436163dddf 431 }
FCH_31 41:5a436163dddf 432 }
FCH_31 41:5a436163dddf 433 *
FCH_31 41:5a436163dddf 434 *
FCH_31 41:5a436163dddf 435 *
FCH_31 41:5a436163dddf 436 */