Version FC
Dependencies: DmTftLibrary eeprom SX1280Lib filesystem mbed
Fork of MSNV2-Terminal_V1-5 by
Lora.cpp@8:cd489b7c49a0, 2018-08-22 (annotated)
- Committer:
- FCH_31
- Date:
- Wed Aug 22 13:03:00 2018 +0000
- Revision:
- 8:cd489b7c49a0
- Child:
- 13:5414193da1de
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
FCH_31 | 8:cd489b7c49a0 | 1 | /* |
FCH_31 | 8:cd489b7c49a0 | 2 | * MISNet |
FCH_31 | 8:cd489b7c49a0 | 3 | * |
FCH_31 | 8:cd489b7c49a0 | 4 | * Lora: Radio Management |
FCH_31 | 8:cd489b7c49a0 | 5 | * |
FCH_31 | 8:cd489b7c49a0 | 6 | * Created on: August 17, 2018 Author: Francis CHATAIN |
FCH_31 | 8:cd489b7c49a0 | 7 | * |
FCH_31 | 8:cd489b7c49a0 | 8 | */ |
FCH_31 | 8:cd489b7c49a0 | 9 | |
FCH_31 | 8:cd489b7c49a0 | 10 | |
FCH_31 | 8:cd489b7c49a0 | 11 | // ===================================== Includes |
FCH_31 | 8:cd489b7c49a0 | 12 | #include "Lora.h" |
FCH_31 | 8:cd489b7c49a0 | 13 | #include "mbed.h" |
FCH_31 | 8:cd489b7c49a0 | 14 | #include "main.h" |
FCH_31 | 8:cd489b7c49a0 | 15 | #include "sx1280-hal.h" |
FCH_31 | 8:cd489b7c49a0 | 16 | |
FCH_31 | 8:cd489b7c49a0 | 17 | // ========================================================================== DEFINE |
FCH_31 | 8:cd489b7c49a0 | 18 | #define MODE_LORA // Lora modulation |
FCH_31 | 8:cd489b7c49a0 | 19 | |
FCH_31 | 8:cd489b7c49a0 | 20 | #define TX_TIMEOUT_VALUE 100 // ms Number of tick size steps for tx timeout |
FCH_31 | 8:cd489b7c49a0 | 21 | #define RX_TIMEOUT_VALUE 100 // ms Number of tick size steps for rx timeout |
FCH_31 | 8:cd489b7c49a0 | 22 | #define RX_TIMEOUT_TICK_SIZE RADIO_TICK_SIZE_1000_US // Size of ticks (used for Tx and Rx timeout) |
FCH_31 | 8:cd489b7c49a0 | 23 | #define MODE_ADDR 0x8000 |
FCH_31 | 8:cd489b7c49a0 | 24 | |
FCH_31 | 8:cd489b7c49a0 | 25 | |
FCH_31 | 8:cd489b7c49a0 | 26 | // ========================================================================== HW |
FCH_31 | 8:cd489b7c49a0 | 27 | DigitalOut F_CS ( D6 ) ; // MBED description of pin |
FCH_31 | 8:cd489b7c49a0 | 28 | DigitalOut SD_CS ( D8 ) ; // MBED description of pin |
FCH_31 | 8:cd489b7c49a0 | 29 | DigitalOut ANT_SW ( A3 ) ; |
FCH_31 | 8:cd489b7c49a0 | 30 | DigitalOut TxLed ( A4 ) ; |
FCH_31 | 8:cd489b7c49a0 | 31 | DigitalOut RxLed ( A5 ) ; |
FCH_31 | 8:cd489b7c49a0 | 32 | |
FCH_31 | 8:cd489b7c49a0 | 33 | |
FCH_31 | 8:cd489b7c49a0 | 34 | // ========================================================================== VARIABLES |
FCH_31 | 8:cd489b7c49a0 | 35 | uint16_t RxIrqMask ; // Mask of IRQs to listen to in rx mode |
FCH_31 | 8:cd489b7c49a0 | 36 | uint16_t TxIrqMask ; // Mask of IRQs to listen to in tx mode |
FCH_31 | 8:cd489b7c49a0 | 37 | |
FCH_31 | 8:cd489b7c49a0 | 38 | |
FCH_31 | 8:cd489b7c49a0 | 39 | uint32_t valueTimeTx ; |
FCH_31 | 8:cd489b7c49a0 | 40 | uint32_t valueTimeLoop ; |
FCH_31 | 8:cd489b7c49a0 | 41 | |
FCH_31 | 8:cd489b7c49a0 | 42 | int dataCounter = 0 ; |
FCH_31 | 8:cd489b7c49a0 | 43 | uint8_t oldFreq ; |
FCH_31 | 8:cd489b7c49a0 | 44 | uint8_t oldBw ; |
FCH_31 | 8:cd489b7c49a0 | 45 | uint8_t oldPwr ; |
FCH_31 | 8:cd489b7c49a0 | 46 | uint8_t oldSf ; |
FCH_31 | 8:cd489b7c49a0 | 47 | uint8_t oldTimer ; |
FCH_31 | 8:cd489b7c49a0 | 48 | |
FCH_31 | 8:cd489b7c49a0 | 49 | // States of the application |
FCH_31 | 8:cd489b7c49a0 | 50 | typedef enum { APP_LOWPOWER, APP_RX, APP_RX_TIMEOUT, APP_RX_ERROR, APP_TX, APP_TX_TIMEOUT, } AppStates_t ; |
FCH_31 | 8:cd489b7c49a0 | 51 | AppStates_t AppState = APP_LOWPOWER; // Init State of the application |
FCH_31 | 8:cd489b7c49a0 | 52 | |
FCH_31 | 8:cd489b7c49a0 | 53 | PacketStatus_t PacketStatus ; |
FCH_31 | 8:cd489b7c49a0 | 54 | int8_t RssiValue = 0 ; |
FCH_31 | 8:cd489b7c49a0 | 55 | int8_t SnrValue = 0 ; |
FCH_31 | 8:cd489b7c49a0 | 56 | |
FCH_31 | 8:cd489b7c49a0 | 57 | ModulationParams_t modulationParams; |
FCH_31 | 8:cd489b7c49a0 | 58 | PacketParams_t PacketParams ; // Locals parameters and status for radio API |
FCH_31 | 8:cd489b7c49a0 | 59 | PacketStatus_t packetStatus ; // NEED TO BE OPTIMIZED, COPY OF STUCTURE ALREADY EXISTING |
FCH_31 | 8:cd489b7c49a0 | 60 | |
FCH_31 | 8:cd489b7c49a0 | 61 | uint32_t RF_FREQUENCY ; // HzNominal frequency |
FCH_31 | 8:cd489b7c49a0 | 62 | RadioLoRaBandwidths_t LORA_BW ; /* 200; 400; 800; 1600 */ |
FCH_31 | 8:cd489b7c49a0 | 63 | RadioLoRaSpreadingFactors_t LORA_SF ; /* SF5; SF6=; SF7; SF8 ; SF9; SF10; SF11 ; SF12 */ |
FCH_31 | 8:cd489b7c49a0 | 64 | int8_t TX_OUTPUT_POWER ; /* Output power in dBm [-18..+13] dBm */ |
FCH_31 | 8:cd489b7c49a0 | 65 | uint8_t BUFFER_SIZE_MAX ; /* Payload size max */ |
FCH_31 | 8:cd489b7c49a0 | 66 | int16_t TIMER ; /* timer entre reemission en ms */ |
FCH_31 | 8:cd489b7c49a0 | 67 | uint8_t BUFFER_SIZE_MIN ; /* Payload return size */ |
FCH_31 | 8:cd489b7c49a0 | 68 | |
FCH_31 | 8:cd489b7c49a0 | 69 | |
FCH_31 | 8:cd489b7c49a0 | 70 | // ========================================================================== Function |
FCH_31 | 8:cd489b7c49a0 | 71 | void initRadio () ; |
FCH_31 | 8:cd489b7c49a0 | 72 | void setRadioTx () ; |
FCH_31 | 8:cd489b7c49a0 | 73 | void setRadioRx () ; |
FCH_31 | 8:cd489b7c49a0 | 74 | void watchDogRxCRNoReceived () ; |
FCH_31 | 8:cd489b7c49a0 | 75 | |
FCH_31 | 8:cd489b7c49a0 | 76 | |
FCH_31 | 8:cd489b7c49a0 | 77 | |
FCH_31 | 8:cd489b7c49a0 | 78 | Timer timerRadio ; |
FCH_31 | 8:cd489b7c49a0 | 79 | Timeout watchDogRx ; |
FCH_31 | 8:cd489b7c49a0 | 80 | Timeout watchDogTx ; |
FCH_31 | 8:cd489b7c49a0 | 81 | |
FCH_31 | 8:cd489b7c49a0 | 82 | void OnTxDone ( void ); // Function to be executed on Radio Tx Done event |
FCH_31 | 8:cd489b7c49a0 | 83 | void OnRxDone ( void ); // Function to be executed on Radio Rx Done event |
FCH_31 | 8:cd489b7c49a0 | 84 | void OnTxTimeout ( void ); // Function executed on Radio Tx Timeout event |
FCH_31 | 8:cd489b7c49a0 | 85 | void OnRxTimeout ( void ); // Function executed on Radio Rx Timeout event |
FCH_31 | 8:cd489b7c49a0 | 86 | void OnRxError ( IrqErrorCode_t ); // Function executed on Radio Rx Error event |
FCH_31 | 8:cd489b7c49a0 | 87 | |
FCH_31 | 8:cd489b7c49a0 | 88 | RadioCallbacks_t callbacks = { |
FCH_31 | 8:cd489b7c49a0 | 89 | &OnTxDone, // txDone |
FCH_31 | 8:cd489b7c49a0 | 90 | &OnRxDone, // rxDone |
FCH_31 | 8:cd489b7c49a0 | 91 | NULL, // syncWordDone |
FCH_31 | 8:cd489b7c49a0 | 92 | NULL, // headerDone |
FCH_31 | 8:cd489b7c49a0 | 93 | &OnTxTimeout, // txTimeout |
FCH_31 | 8:cd489b7c49a0 | 94 | &OnRxTimeout, // rxTimeout |
FCH_31 | 8:cd489b7c49a0 | 95 | &OnRxError, // rxError |
FCH_31 | 8:cd489b7c49a0 | 96 | NULL, // rangingDone |
FCH_31 | 8:cd489b7c49a0 | 97 | NULL, // cadDone |
FCH_31 | 8:cd489b7c49a0 | 98 | }; |
FCH_31 | 8:cd489b7c49a0 | 99 | |
FCH_31 | 8:cd489b7c49a0 | 100 | // mosi, miso, sclk, nss, busy , dio1 , dio2, dio3, rst , callbacks... |
FCH_31 | 8:cd489b7c49a0 | 101 | SX1280Hal Radio ( D11 , D12 , D13 , D7 , D3 , D5 , NC , NC , A0 , &callbacks ); |
FCH_31 | 8:cd489b7c49a0 | 102 | |
FCH_31 | 8:cd489b7c49a0 | 103 | |
FCH_31 | 8:cd489b7c49a0 | 104 | |
FCH_31 | 8:cd489b7c49a0 | 105 | //=============================================================================================================================== |
FCH_31 | 8:cd489b7c49a0 | 106 | void initLora (uint32_t rf,RadioLoRaBandwidths_t bw,RadioLoRaSpreadingFactors_t sf,int8_t pwr) |
FCH_31 | 8:cd489b7c49a0 | 107 | //=============================================================================================================================== |
FCH_31 | 8:cd489b7c49a0 | 108 | { |
FCH_31 | 8:cd489b7c49a0 | 109 | // Default value initialisation |
FCH_31 | 8:cd489b7c49a0 | 110 | printf( "*** LORA *** Lora Initialisation \r\n"); |
FCH_31 | 8:cd489b7c49a0 | 111 | |
FCH_31 | 8:cd489b7c49a0 | 112 | RxIrqMask = IRQ_RX_DONE | IRQ_RX_TX_TIMEOUT; // Mask of IRQs to listen to in rx mode |
FCH_31 | 8:cd489b7c49a0 | 113 | TxIrqMask = IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT; // Mask of IRQs to listen to in tx mode |
FCH_31 | 8:cd489b7c49a0 | 114 | |
FCH_31 | 8:cd489b7c49a0 | 115 | RF_FREQUENCY = rf ; // HzNominal frequency |
FCH_31 | 8:cd489b7c49a0 | 116 | LORA_BW = bw ; /* 200; 400; 800; 1600 */ |
FCH_31 | 8:cd489b7c49a0 | 117 | LORA_SF = sf ; /* SF5; SF6=; SF7; SF8 ; SF9; SF10; SF11 ; SF12 */ |
FCH_31 | 8:cd489b7c49a0 | 118 | TX_OUTPUT_POWER = pwr ; /* Output power in dBm [-18..+13] dBm */ |
FCH_31 | 8:cd489b7c49a0 | 119 | BUFFER_SIZE_MAX = 100 ; /* Payload size max */ |
FCH_31 | 8:cd489b7c49a0 | 120 | BUFFER_SIZE_MIN = 8 ; /* Payload return size */ |
FCH_31 | 8:cd489b7c49a0 | 121 | TIMER = 1000 ; /* timer entre reemission en ms */ |
FCH_31 | 8:cd489b7c49a0 | 122 | |
FCH_31 | 8:cd489b7c49a0 | 123 | |
FCH_31 | 8:cd489b7c49a0 | 124 | |
FCH_31 | 8:cd489b7c49a0 | 125 | Radio.Reset () ; |
FCH_31 | 8:cd489b7c49a0 | 126 | Radio.Init () ; |
FCH_31 | 8:cd489b7c49a0 | 127 | initRadio () ; |
FCH_31 | 8:cd489b7c49a0 | 128 | Radio.SetRegulatorMode ( USE_DCDC ) ; // Can also be set in LDO mode but consume more power |
FCH_31 | 8:cd489b7c49a0 | 129 | wait_ms ( 10 ) ; // wait for on board DC/DC start-up time |
FCH_31 | 8:cd489b7c49a0 | 130 | |
FCH_31 | 8:cd489b7c49a0 | 131 | TxLed = 0 ; |
FCH_31 | 8:cd489b7c49a0 | 132 | RxLed = 0 ; |
FCH_31 | 8:cd489b7c49a0 | 133 | |
FCH_31 | 8:cd489b7c49a0 | 134 | } |
FCH_31 | 8:cd489b7c49a0 | 135 | |
FCH_31 | 8:cd489b7c49a0 | 136 | |
FCH_31 | 8:cd489b7c49a0 | 137 | //=============================================================================================================================== |
FCH_31 | 8:cd489b7c49a0 | 138 | void sendMessageLora () { |
FCH_31 | 8:cd489b7c49a0 | 139 | //=============================================================================================================================== |
FCH_31 | 8:cd489b7c49a0 | 140 | uint8_t Buffer [BUFFER_SIZE_MAX] ; // Buffer |
FCH_31 | 8:cd489b7c49a0 | 141 | char frameMISNET [BUFFER_SIZE_MAX] ; // Misnet Frame |
FCH_31 | 8:cd489b7c49a0 | 142 | uint8_t *pointer ; |
FCH_31 | 8:cd489b7c49a0 | 143 | char *ptr_int ; |
FCH_31 | 8:cd489b7c49a0 | 144 | |
FCH_31 | 8:cd489b7c49a0 | 145 | |
FCH_31 | 8:cd489b7c49a0 | 146 | dataCounter = dataCounter + 1 ; |
FCH_31 | 8:cd489b7c49a0 | 147 | memset ( &Buffer , 0x00, BUFFER_SIZE_MAX ); |
FCH_31 | 8:cd489b7c49a0 | 148 | memset ( &frameMISNET , 0x00, BUFFER_SIZE_MAX ); |
FCH_31 | 8:cd489b7c49a0 | 149 | |
FCH_31 | 8:cd489b7c49a0 | 150 | |
FCH_31 | 8:cd489b7c49a0 | 151 | uint16_t clearPart = 0x0 ; |
FCH_31 | 8:cd489b7c49a0 | 152 | |
FCH_31 | 8:cd489b7c49a0 | 153 | uint32_t servicePayload = 0x0 ; |
FCH_31 | 8:cd489b7c49a0 | 154 | //char serviceMessage[16] ; // TRACES |
FCH_31 | 8:cd489b7c49a0 | 155 | |
FCH_31 | 8:cd489b7c49a0 | 156 | uint8_t SFT = 0 ; |
FCH_31 | 8:cd489b7c49a0 | 157 | uint8_t DFT = 0 ; |
FCH_31 | 8:cd489b7c49a0 | 158 | uint8_t FDL = 8 ; |
FCH_31 | 8:cd489b7c49a0 | 159 | uint8_t BL = 7 ; |
FCH_31 | 8:cd489b7c49a0 | 160 | uint8_t DMI = 66 ; |
FCH_31 | 8:cd489b7c49a0 | 161 | uint16_t RCA = 0xBEEF & 0x7FFF ; |
FCH_31 | 8:cd489b7c49a0 | 162 | uint32_t MIC = 0xCAFECAFE & 0xFFFFFFFF ; |
FCH_31 | 8:cd489b7c49a0 | 163 | |
FCH_31 | 8:cd489b7c49a0 | 164 | |
FCH_31 | 8:cd489b7c49a0 | 165 | clearPart = MODE_ADDR | ( ID_TERMINAL << 6 ) | ID_GATEWAY ; |
FCH_31 | 8:cd489b7c49a0 | 166 | printf( "*** LORA *** CLEAR PART= %8X \r\n ", clearPart); |
FCH_31 | 8:cd489b7c49a0 | 167 | |
FCH_31 | 8:cd489b7c49a0 | 168 | servicePayload = (uint32_t)( (SFT & 0x03) << 30) | |
FCH_31 | 8:cd489b7c49a0 | 169 | (uint32_t)( (DFT & 0x03) << 28) | |
FCH_31 | 8:cd489b7c49a0 | 170 | (uint32_t)( (FDL & 0x3F) << 22) | |
FCH_31 | 8:cd489b7c49a0 | 171 | (uint32_t)( (BL & 0x07) << 19) | |
FCH_31 | 8:cd489b7c49a0 | 172 | (uint32_t)( (DMI & 0xFF) << 11) | |
FCH_31 | 8:cd489b7c49a0 | 173 | (RCA & 0x7FF) ; |
FCH_31 | 8:cd489b7c49a0 | 174 | |
FCH_31 | 8:cd489b7c49a0 | 175 | //sprintf (serviceMessage, "%08X%08X", servicePayload, MIC) ; // traces |
FCH_31 | 8:cd489b7c49a0 | 176 | //printf( "*** LORA *** SERVICE Payload = %08X \r\n ", servicePayload); |
FCH_31 | 8:cd489b7c49a0 | 177 | //printf( "*** LORA *** SERVICE MIC = %08X \r\n ", MIC); |
FCH_31 | 8:cd489b7c49a0 | 178 | |
FCH_31 | 8:cd489b7c49a0 | 179 | // CLEAR PART + Indianess correction |
FCH_31 | 8:cd489b7c49a0 | 180 | pointer = (uint8_t*) &clearPart ; for (int i = 0, j=1 ; i<2 ; i++, j--) frameMISNET[j] = pointer[i] ; |
FCH_31 | 8:cd489b7c49a0 | 181 | |
FCH_31 | 8:cd489b7c49a0 | 182 | // SERVICE + Indianess correction |
FCH_31 | 8:cd489b7c49a0 | 183 | pointer = (uint8_t*) &servicePayload ; for (int i=0, j=3 ; i<4 ; i++, j--) frameMISNET[2+i] = pointer[j] ; |
FCH_31 | 8:cd489b7c49a0 | 184 | pointer = (uint8_t*) &MIC ; for (int i=0, j=3 ; i<4 ; i++, j--) frameMISNET[6+i] = pointer[j] ; |
FCH_31 | 8:cd489b7c49a0 | 185 | |
FCH_31 | 8:cd489b7c49a0 | 186 | printf( "*** LORA *** START Buffer "); for (int i = 0 ; i<10 ; i++) printf ("%02X,", frameMISNET[i] ) ; printf( "\n") ; |
FCH_31 | 8:cd489b7c49a0 | 187 | |
FCH_31 | 8:cd489b7c49a0 | 188 | |
FCH_31 | 8:cd489b7c49a0 | 189 | int n = sprintf (frameMISNET, "%1c%1c", ID_TERMINAL, ID_GATEWAY); |
FCH_31 | 8:cd489b7c49a0 | 190 | |
FCH_31 | 8:cd489b7c49a0 | 191 | pointer = (uint8_t*) &dataCounter ; for (int i = 0 ; i<4 ; i++) frameMISNET[2+i] = pointer[i] ; |
FCH_31 | 8:cd489b7c49a0 | 192 | //(int32*)&frameMISNET[2]=(int32*)&ptr_int; // -> aton OR ntoa |
FCH_31 | 8:cd489b7c49a0 | 193 | |
FCH_31 | 8:cd489b7c49a0 | 194 | printf( "*** LORA *** TX SEND %05d ", dataCounter); |
FCH_31 | 8:cd489b7c49a0 | 195 | for (int i = 0 ; i<10 ; i++) printf ("%d,", frameMISNET[i] ) ; printf( "\n") ; |
FCH_31 | 8:cd489b7c49a0 | 196 | |
FCH_31 | 8:cd489b7c49a0 | 197 | |
FCH_31 | 8:cd489b7c49a0 | 198 | // Send SF, BW, COUNTER, POWER, FREQ, TIMETX, TIMELOOP, RSSIVALUE |
FCH_31 | 8:cd489b7c49a0 | 199 | frameMISNET[6] = LORA_SF ; |
FCH_31 | 8:cd489b7c49a0 | 200 | ptr_int = (char*) &LORA_BW ; |
FCH_31 | 8:cd489b7c49a0 | 201 | frameMISNET[7]= ptr_int[1] ; |
FCH_31 | 8:cd489b7c49a0 | 202 | frameMISNET[8]= ptr_int[0] ; |
FCH_31 | 8:cd489b7c49a0 | 203 | frameMISNET[9] = TX_OUTPUT_POWER ; |
FCH_31 | 8:cd489b7c49a0 | 204 | ptr_int = (char*) &RF_FREQUENCY ; for (int i = 0 ; i<4 ; i++) frameMISNET[10+i] = ptr_int[i] ; |
FCH_31 | 8:cd489b7c49a0 | 205 | ptr_int = (char*) &valueTimeTx ; for (int i = 0 ; i<4 ; i++) frameMISNET[14+i] = ptr_int[i] ; //printf( "*** LORA *** TimeTx %d %d ", valueTimeTx, valueTimeLoop); //delay temps Tx |
FCH_31 | 8:cd489b7c49a0 | 206 | ptr_int = (char*) &valueTimeLoop ; for (int i = 0 ; i<4 ; i++) frameMISNET[18+i] = ptr_int[i] ; //delay temps Loop |
FCH_31 | 8:cd489b7c49a0 | 207 | frameMISNET[22] = RssiValue ; |
FCH_31 | 8:cd489b7c49a0 | 208 | |
FCH_31 | 8:cd489b7c49a0 | 209 | memcpy ( Buffer , frameMISNET , 23 ); |
FCH_31 | 8:cd489b7c49a0 | 210 | |
FCH_31 | 8:cd489b7c49a0 | 211 | valueTimeTx = 0 ; |
FCH_31 | 8:cd489b7c49a0 | 212 | valueTimeLoop = 0 ; |
FCH_31 | 8:cd489b7c49a0 | 213 | timerRadio.reset () ; // Record tile for close loop |
FCH_31 | 8:cd489b7c49a0 | 214 | timerRadio.start () ; |
FCH_31 | 8:cd489b7c49a0 | 215 | setRadioTx () ; |
FCH_31 | 8:cd489b7c49a0 | 216 | TxLed = 1 ; |
FCH_31 | 8:cd489b7c49a0 | 217 | PacketParams.Params.LoRa.PayloadLength = 23 ; |
FCH_31 | 8:cd489b7c49a0 | 218 | Radio.SetPacketParams ( &PacketParams ) ; |
FCH_31 | 8:cd489b7c49a0 | 219 | Radio.SendPayload ( Buffer , 23,( TickTime_t ) {RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE} ); |
FCH_31 | 8:cd489b7c49a0 | 220 | TxLed = 0 ; |
FCH_31 | 8:cd489b7c49a0 | 221 | |
FCH_31 | 8:cd489b7c49a0 | 222 | //printf( "*** LORA *** ARM watchDogRxRxRxRx \r\n" ); |
FCH_31 | 8:cd489b7c49a0 | 223 | watchDogRx.attach (&watchDogRxCRNoReceived, 1.0); // Arm watchDogRx if the response is not received in less 500 ms => force retry |
FCH_31 | 8:cd489b7c49a0 | 224 | } |
FCH_31 | 8:cd489b7c49a0 | 225 | //=============================================================================================================================== |
FCH_31 | 8:cd489b7c49a0 | 226 | |
FCH_31 | 8:cd489b7c49a0 | 227 | |
FCH_31 | 8:cd489b7c49a0 | 228 | // Time out si pas de message de CR recu |
FCH_31 | 8:cd489b7c49a0 | 229 | void watchDogRxCRNoReceived () { |
FCH_31 | 8:cd489b7c49a0 | 230 | printf( "*** LORA *** watchDogRxNoReceive NO RESPONSE \r\n"); |
FCH_31 | 8:cd489b7c49a0 | 231 | } // Force new emission |
FCH_31 | 8:cd489b7c49a0 | 232 | |
FCH_31 | 8:cd489b7c49a0 | 233 | |
FCH_31 | 8:cd489b7c49a0 | 234 | |
FCH_31 | 8:cd489b7c49a0 | 235 | |
FCH_31 | 8:cd489b7c49a0 | 236 | //=============================================================================================================================== |
FCH_31 | 8:cd489b7c49a0 | 237 | void initRadio () { |
FCH_31 | 8:cd489b7c49a0 | 238 | //=============================================================================================================================== |
FCH_31 | 8:cd489b7c49a0 | 239 | F_CS = 1 ; |
FCH_31 | 8:cd489b7c49a0 | 240 | SD_CS = 1 ; |
FCH_31 | 8:cd489b7c49a0 | 241 | ANT_SW = 1 ; |
FCH_31 | 8:cd489b7c49a0 | 242 | |
FCH_31 | 8:cd489b7c49a0 | 243 | // SET MODULATION |
FCH_31 | 8:cd489b7c49a0 | 244 | modulationParams.PacketType = PACKET_TYPE_LORA ; |
FCH_31 | 8:cd489b7c49a0 | 245 | modulationParams.Params.LoRa.CodingRate = LORA_CR_4_5 ; |
FCH_31 | 8:cd489b7c49a0 | 246 | modulationParams.Params.LoRa.Bandwidth = LORA_BW_0200 ; |
FCH_31 | 8:cd489b7c49a0 | 247 | modulationParams.Params.LoRa.SpreadingFactor = LORA_SF7 ; |
FCH_31 | 8:cd489b7c49a0 | 248 | // SET PACKET PARAM |
FCH_31 | 8:cd489b7c49a0 | 249 | PacketParams.PacketType = PACKET_TYPE_LORA ; |
FCH_31 | 8:cd489b7c49a0 | 250 | PacketParams.Params.LoRa.PreambleLength = 0x08 ; |
FCH_31 | 8:cd489b7c49a0 | 251 | PacketParams.Params.LoRa.HeaderType = LORA_PACKET_VARIABLE_LENGTH; |
FCH_31 | 8:cd489b7c49a0 | 252 | PacketParams.Params.LoRa.PayloadLength = BUFFER_SIZE_MAX ; |
FCH_31 | 8:cd489b7c49a0 | 253 | PacketParams.Params.LoRa.CrcMode = LORA_CRC_ON ; |
FCH_31 | 8:cd489b7c49a0 | 254 | PacketParams.Params.LoRa.InvertIQ = LORA_IQ_INVERTED ; |
FCH_31 | 8:cd489b7c49a0 | 255 | // RADIO |
FCH_31 | 8:cd489b7c49a0 | 256 | Radio.SetStandby ( STDBY_RC ) ; |
FCH_31 | 8:cd489b7c49a0 | 257 | Radio.SetPacketType ( modulationParams.PacketType ); |
FCH_31 | 8:cd489b7c49a0 | 258 | Radio.SetModulationParams ( &modulationParams ) ; |
FCH_31 | 8:cd489b7c49a0 | 259 | Radio.SetPacketParams ( &PacketParams ) ; |
FCH_31 | 8:cd489b7c49a0 | 260 | Radio.SetBufferBaseAddresses ( 0x00, 0x00 ); |
FCH_31 | 8:cd489b7c49a0 | 261 | Radio.SetTxParams ( TX_OUTPUT_POWER, RADIO_RAMP_20_US ) ; |
FCH_31 | 8:cd489b7c49a0 | 262 | Radio.SetRx ( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } ) ; |
FCH_31 | 8:cd489b7c49a0 | 263 | //AppState = APP_LOWPOWER; |
FCH_31 | 8:cd489b7c49a0 | 264 | } |
FCH_31 | 8:cd489b7c49a0 | 265 | //=============================================================================================================================== |
FCH_31 | 8:cd489b7c49a0 | 266 | |
FCH_31 | 8:cd489b7c49a0 | 267 | |
FCH_31 | 8:cd489b7c49a0 | 268 | |
FCH_31 | 8:cd489b7c49a0 | 269 | //=============================================================================================================================== |
FCH_31 | 8:cd489b7c49a0 | 270 | void setRadioTx () { |
FCH_31 | 8:cd489b7c49a0 | 271 | //=============================================================================================================================== |
FCH_31 | 8:cd489b7c49a0 | 272 | RxLed = 0 ; |
FCH_31 | 8:cd489b7c49a0 | 273 | TxLed = 0 ; |
FCH_31 | 8:cd489b7c49a0 | 274 | F_CS = 1 ; |
FCH_31 | 8:cd489b7c49a0 | 275 | SD_CS = 1 ; |
FCH_31 | 8:cd489b7c49a0 | 276 | ANT_SW = 1 ; |
FCH_31 | 8:cd489b7c49a0 | 277 | |
FCH_31 | 8:cd489b7c49a0 | 278 | // SET MODULATION |
FCH_31 | 8:cd489b7c49a0 | 279 | modulationParams.PacketType = PACKET_TYPE_LORA ; |
FCH_31 | 8:cd489b7c49a0 | 280 | modulationParams.Params.LoRa.CodingRate = LORA_CR_4_5 ; |
FCH_31 | 8:cd489b7c49a0 | 281 | modulationParams.Params.LoRa.Bandwidth = LORA_BW ; |
FCH_31 | 8:cd489b7c49a0 | 282 | modulationParams.Params.LoRa.SpreadingFactor = LORA_SF ; |
FCH_31 | 8:cd489b7c49a0 | 283 | |
FCH_31 | 8:cd489b7c49a0 | 284 | // SET PACKET PARAM |
FCH_31 | 8:cd489b7c49a0 | 285 | PacketParams.PacketType = PACKET_TYPE_LORA ; |
FCH_31 | 8:cd489b7c49a0 | 286 | PacketParams.Params.LoRa.PreambleLength = 0x08 ; |
FCH_31 | 8:cd489b7c49a0 | 287 | PacketParams.Params.LoRa.HeaderType = LORA_PACKET_VARIABLE_LENGTH; |
FCH_31 | 8:cd489b7c49a0 | 288 | PacketParams.Params.LoRa.PayloadLength = BUFFER_SIZE_MAX ; |
FCH_31 | 8:cd489b7c49a0 | 289 | PacketParams.Params.LoRa.CrcMode = LORA_CRC_ON ; |
FCH_31 | 8:cd489b7c49a0 | 290 | PacketParams.Params.LoRa.InvertIQ = LORA_IQ_INVERTED ; |
FCH_31 | 8:cd489b7c49a0 | 291 | |
FCH_31 | 8:cd489b7c49a0 | 292 | // RADIO |
FCH_31 | 8:cd489b7c49a0 | 293 | Radio.SetStandby ( STDBY_RC ) ; |
FCH_31 | 8:cd489b7c49a0 | 294 | Radio.SetPacketType ( modulationParams.PacketType ); |
FCH_31 | 8:cd489b7c49a0 | 295 | Radio.SetModulationParams ( &modulationParams ) ; |
FCH_31 | 8:cd489b7c49a0 | 296 | Radio.SetPacketParams ( &PacketParams ) ; |
FCH_31 | 8:cd489b7c49a0 | 297 | Radio.SetRfFrequency ( RF_FREQUENCY ) ; |
FCH_31 | 8:cd489b7c49a0 | 298 | Radio.SetBufferBaseAddresses ( 0x00, 0x00 ); |
FCH_31 | 8:cd489b7c49a0 | 299 | Radio.SetTxParams ( TX_OUTPUT_POWER, RADIO_RAMP_20_US ) ; |
FCH_31 | 8:cd489b7c49a0 | 300 | Radio.SetDioIrqParams ( TxIrqMask , TxIrqMask , IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
FCH_31 | 8:cd489b7c49a0 | 301 | Radio.SetRx ( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } ) ; |
FCH_31 | 8:cd489b7c49a0 | 302 | |
FCH_31 | 8:cd489b7c49a0 | 303 | //AppState = APP_LOWPOWER; |
FCH_31 | 8:cd489b7c49a0 | 304 | |
FCH_31 | 8:cd489b7c49a0 | 305 | } |
FCH_31 | 8:cd489b7c49a0 | 306 | |
FCH_31 | 8:cd489b7c49a0 | 307 | |
FCH_31 | 8:cd489b7c49a0 | 308 | //=============================================================================================================================== |
FCH_31 | 8:cd489b7c49a0 | 309 | void setRadioRx () { |
FCH_31 | 8:cd489b7c49a0 | 310 | //=============================================================================================================================== |
FCH_31 | 8:cd489b7c49a0 | 311 | RxLed = 0 ; |
FCH_31 | 8:cd489b7c49a0 | 312 | TxLed = 0 ; |
FCH_31 | 8:cd489b7c49a0 | 313 | // SET MODULATION |
FCH_31 | 8:cd489b7c49a0 | 314 | modulationParams.PacketType = PACKET_TYPE_LORA ; |
FCH_31 | 8:cd489b7c49a0 | 315 | modulationParams.Params.LoRa.CodingRate = LORA_CR_4_5 ; |
FCH_31 | 8:cd489b7c49a0 | 316 | modulationParams.Params.LoRa.Bandwidth = LORA_BW_0200 ; |
FCH_31 | 8:cd489b7c49a0 | 317 | modulationParams.Params.LoRa.SpreadingFactor = LORA_SF7 ; |
FCH_31 | 8:cd489b7c49a0 | 318 | |
FCH_31 | 8:cd489b7c49a0 | 319 | // SET PACKET PARAM |
FCH_31 | 8:cd489b7c49a0 | 320 | PacketParams.PacketType = PACKET_TYPE_LORA ; |
FCH_31 | 8:cd489b7c49a0 | 321 | PacketParams.Params.LoRa.PreambleLength = 0x08 ; |
FCH_31 | 8:cd489b7c49a0 | 322 | PacketParams.Params.LoRa.HeaderType = LORA_PACKET_VARIABLE_LENGTH; |
FCH_31 | 8:cd489b7c49a0 | 323 | PacketParams.Params.LoRa.PayloadLength = BUFFER_SIZE_MIN ; |
FCH_31 | 8:cd489b7c49a0 | 324 | PacketParams.Params.LoRa.CrcMode = LORA_CRC_ON ; |
FCH_31 | 8:cd489b7c49a0 | 325 | PacketParams.Params.LoRa.InvertIQ = LORA_IQ_INVERTED ; |
FCH_31 | 8:cd489b7c49a0 | 326 | |
FCH_31 | 8:cd489b7c49a0 | 327 | // RADIO |
FCH_31 | 8:cd489b7c49a0 | 328 | Radio.SetStandby ( STDBY_RC ) ; |
FCH_31 | 8:cd489b7c49a0 | 329 | Radio.SetPacketType ( modulationParams.PacketType ); |
FCH_31 | 8:cd489b7c49a0 | 330 | Radio.SetModulationParams ( &modulationParams ) ; |
FCH_31 | 8:cd489b7c49a0 | 331 | Radio.SetPacketParams ( &PacketParams ) ; |
FCH_31 | 8:cd489b7c49a0 | 332 | Radio.SetRfFrequency ( RF_FREQUENCY + 440000UL) ; |
FCH_31 | 8:cd489b7c49a0 | 333 | |
FCH_31 | 8:cd489b7c49a0 | 334 | Radio.SetBufferBaseAddresses ( 0x00, 0x00 ); |
FCH_31 | 8:cd489b7c49a0 | 335 | Radio.SetTxParams ( TX_OUTPUT_POWER, RADIO_RAMP_20_US ) ; |
FCH_31 | 8:cd489b7c49a0 | 336 | Radio.SetDioIrqParams ( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ) ; |
FCH_31 | 8:cd489b7c49a0 | 337 | Radio.SetRx ( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } ) ; |
FCH_31 | 8:cd489b7c49a0 | 338 | //AppState = APP_LOWPOWER; |
FCH_31 | 8:cd489b7c49a0 | 339 | } |
FCH_31 | 8:cd489b7c49a0 | 340 | //=============================================================================================================================== |
FCH_31 | 8:cd489b7c49a0 | 341 | |
FCH_31 | 8:cd489b7c49a0 | 342 | |
FCH_31 | 8:cd489b7c49a0 | 343 | |
FCH_31 | 8:cd489b7c49a0 | 344 | |
FCH_31 | 8:cd489b7c49a0 | 345 | // ============================================================================ RADIO CALLBACK |
FCH_31 | 8:cd489b7c49a0 | 346 | void OnTxDone ( void ) { |
FCH_31 | 8:cd489b7c49a0 | 347 | //============================================================================== |
FCH_31 | 8:cd489b7c49a0 | 348 | valueTimeTx = timerRadio.read_ms () ; |
FCH_31 | 8:cd489b7c49a0 | 349 | printf( "*** LORA *** OnTxDone \r\n" ); |
FCH_31 | 8:cd489b7c49a0 | 350 | TxLed = 0 ; |
FCH_31 | 8:cd489b7c49a0 | 351 | setRadioRx () ; |
FCH_31 | 8:cd489b7c49a0 | 352 | } |
FCH_31 | 8:cd489b7c49a0 | 353 | //============================================================================== |
FCH_31 | 8:cd489b7c49a0 | 354 | |
FCH_31 | 8:cd489b7c49a0 | 355 | |
FCH_31 | 8:cd489b7c49a0 | 356 | |
FCH_31 | 8:cd489b7c49a0 | 357 | //void OnRxDone ( void ) { AppState = APP_RX ; } |
FCH_31 | 8:cd489b7c49a0 | 358 | //============================================================================== |
FCH_31 | 8:cd489b7c49a0 | 359 | void OnRxDone ( void ) { |
FCH_31 | 8:cd489b7c49a0 | 360 | //============================================================================== |
FCH_31 | 8:cd489b7c49a0 | 361 | uint8_t Buffer1 [BUFFER_SIZE_MAX+1]; // Buffer Radio |
FCH_31 | 8:cd489b7c49a0 | 362 | uint8_t BufferSize = BUFFER_SIZE_MAX ; // Size of the buffer |
FCH_31 | 8:cd489b7c49a0 | 363 | |
FCH_31 | 8:cd489b7c49a0 | 364 | RxLed = 1 ; // Show the reception |
FCH_31 | 8:cd489b7c49a0 | 365 | |
FCH_31 | 8:cd489b7c49a0 | 366 | printf( "*** LORA *** RX DONE \r\n" ); |
FCH_31 | 8:cd489b7c49a0 | 367 | valueTimeLoop = timerRadio.read_ms () ; |
FCH_31 | 8:cd489b7c49a0 | 368 | timerRadio.stop () ; |
FCH_31 | 8:cd489b7c49a0 | 369 | watchDogRx.detach () ; |
FCH_31 | 8:cd489b7c49a0 | 370 | //printf( "*** LORA *** DISARM watchDogRx \r\n" ); |
FCH_31 | 8:cd489b7c49a0 | 371 | |
FCH_31 | 8:cd489b7c49a0 | 372 | Radio.GetPacketStatus(&packetStatus) ; |
FCH_31 | 8:cd489b7c49a0 | 373 | RssiValue = packetStatus.LoRa.RssiPkt ; |
FCH_31 | 8:cd489b7c49a0 | 374 | |
FCH_31 | 8:cd489b7c49a0 | 375 | memset ( &Buffer1 , 0x00, BUFFER_SIZE_MAX ); |
FCH_31 | 8:cd489b7c49a0 | 376 | Radio.GetPayload ( Buffer1, &BufferSize, BUFFER_SIZE_MAX ); |
FCH_31 | 8:cd489b7c49a0 | 377 | |
FCH_31 | 8:cd489b7c49a0 | 378 | Buffer1[7] = 0 ; |
FCH_31 | 8:cd489b7c49a0 | 379 | |
FCH_31 | 8:cd489b7c49a0 | 380 | printf ( "*** LORA *** RX DONE => %s \r\n", Buffer1 ); wait(1) ; // flush serial |
FCH_31 | 8:cd489b7c49a0 | 381 | |
FCH_31 | 8:cd489b7c49a0 | 382 | // Extract value |
FCH_31 | 8:cd489b7c49a0 | 383 | |
FCH_31 | 8:cd489b7c49a0 | 384 | switch (Buffer1[2]) { |
FCH_31 | 8:cd489b7c49a0 | 385 | case '1': RF_FREQUENCY = 2400000000UL ; break ; |
FCH_31 | 8:cd489b7c49a0 | 386 | case '2': RF_FREQUENCY = 2400680000UL ; break ; |
FCH_31 | 8:cd489b7c49a0 | 387 | case '3': RF_FREQUENCY = 2423840000UL ; break ; |
FCH_31 | 8:cd489b7c49a0 | 388 | case '4': RF_FREQUENCY = 2424520000UL ; break ; |
FCH_31 | 8:cd489b7c49a0 | 389 | case '5': RF_FREQUENCY = 2448840000UL ; break ; |
FCH_31 | 8:cd489b7c49a0 | 390 | case '6': RF_FREQUENCY = 2449520000UL ; break ; |
FCH_31 | 8:cd489b7c49a0 | 391 | case '7': RF_FREQUENCY = 2473840000UL ; break ; |
FCH_31 | 8:cd489b7c49a0 | 392 | case '8': RF_FREQUENCY = 2474520000UL ; break ; |
FCH_31 | 8:cd489b7c49a0 | 393 | } |
FCH_31 | 8:cd489b7c49a0 | 394 | |
FCH_31 | 8:cd489b7c49a0 | 395 | switch (Buffer1[3]) { |
FCH_31 | 8:cd489b7c49a0 | 396 | case '1': LORA_BW = LORA_BW_0200 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 397 | case '2': LORA_BW = LORA_BW_0400 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 398 | case '3': LORA_BW = LORA_BW_0800 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 399 | case '4': LORA_BW = LORA_BW_1600 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 400 | } |
FCH_31 | 8:cd489b7c49a0 | 401 | |
FCH_31 | 8:cd489b7c49a0 | 402 | switch (Buffer1[4]) { |
FCH_31 | 8:cd489b7c49a0 | 403 | case '1': TX_OUTPUT_POWER = -18 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 404 | case '2': TX_OUTPUT_POWER = 0 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 405 | case '3': TX_OUTPUT_POWER = 8 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 406 | case '4': TX_OUTPUT_POWER = 10 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 407 | case '5': TX_OUTPUT_POWER = 13 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 408 | } |
FCH_31 | 8:cd489b7c49a0 | 409 | |
FCH_31 | 8:cd489b7c49a0 | 410 | switch (Buffer1[5]) { |
FCH_31 | 8:cd489b7c49a0 | 411 | case '1': LORA_SF = LORA_SF5 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 412 | case '2': LORA_SF = LORA_SF6 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 413 | case '3': LORA_SF = LORA_SF7 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 414 | case '4': LORA_SF = LORA_SF8 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 415 | case '5': LORA_SF = LORA_SF9 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 416 | case '6': LORA_SF = LORA_SF10 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 417 | case '7': LORA_SF = LORA_SF12 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 418 | } |
FCH_31 | 8:cd489b7c49a0 | 419 | |
FCH_31 | 8:cd489b7c49a0 | 420 | int OLD_TIMER = TIMER ; |
FCH_31 | 8:cd489b7c49a0 | 421 | |
FCH_31 | 8:cd489b7c49a0 | 422 | switch (Buffer1[6]) { |
FCH_31 | 8:cd489b7c49a0 | 423 | case '1': TIMER = 50 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 424 | case '2': TIMER = 75 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 425 | case '3': TIMER = 125 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 426 | case '4': TIMER = 250 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 427 | case '5': TIMER = 500 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 428 | case '6': TIMER = 1000 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 429 | case '7': TIMER = 2000 ; break ; |
FCH_31 | 8:cd489b7c49a0 | 430 | } |
FCH_31 | 8:cd489b7c49a0 | 431 | |
FCH_31 | 8:cd489b7c49a0 | 432 | RxLed = 0 ; |
FCH_31 | 8:cd489b7c49a0 | 433 | |
FCH_31 | 8:cd489b7c49a0 | 434 | if (oldFreq != Buffer1[2] || oldBw != Buffer1[3] || oldPwr != Buffer1[4] || oldSf != Buffer1[5] || oldTimer != Buffer1[6] ) { |
FCH_31 | 8:cd489b7c49a0 | 435 | oldFreq = Buffer1[2] ; |
FCH_31 | 8:cd489b7c49a0 | 436 | oldBw = Buffer1[3] ; |
FCH_31 | 8:cd489b7c49a0 | 437 | oldPwr = Buffer1[4] ; |
FCH_31 | 8:cd489b7c49a0 | 438 | oldSf = Buffer1[5] ; |
FCH_31 | 8:cd489b7c49a0 | 439 | oldTimer = Buffer1[6] ; |
FCH_31 | 8:cd489b7c49a0 | 440 | //printf ( "*** LORA *** Reset Radio \r\n" ); |
FCH_31 | 8:cd489b7c49a0 | 441 | //app.updateDisplay ( LORA_SF, LORA_BW, TX_OUTPUT_POWER, BUFFER_SIZE_MAX, RF_FREQUENCY, TIMER ) ; |
FCH_31 | 8:cd489b7c49a0 | 442 | } |
FCH_31 | 8:cd489b7c49a0 | 443 | |
FCH_31 | 8:cd489b7c49a0 | 444 | if (OLD_TIMER != TIMER) { |
FCH_31 | 8:cd489b7c49a0 | 445 | //wakeUpTerminal.detach (); |
FCH_31 | 8:cd489b7c49a0 | 446 | //wakeUpTerminal.attach (&wakeUpTerminalFunction, (float) TIMER/1000); |
FCH_31 | 8:cd489b7c49a0 | 447 | } |
FCH_31 | 8:cd489b7c49a0 | 448 | } |
FCH_31 | 8:cd489b7c49a0 | 449 | //============================================================================== |
FCH_31 | 8:cd489b7c49a0 | 450 | |
FCH_31 | 8:cd489b7c49a0 | 451 | void OnTxTimeout ( void ) { AppState = APP_TX_TIMEOUT ;} |
FCH_31 | 8:cd489b7c49a0 | 452 | void OnRxTimeout ( void ) { AppState = APP_RX_TIMEOUT ; } |
FCH_31 | 8:cd489b7c49a0 | 453 | void OnRxError ( IrqErrorCode_t errorCode ) { AppState = APP_RX_ERROR ; } |
FCH_31 | 8:cd489b7c49a0 | 454 | void OnRangingDone ( IrqRangingCode_t val ) { } |
FCH_31 | 8:cd489b7c49a0 | 455 | void OnCadDone ( bool channelActivityDetected ){ } |
FCH_31 | 8:cd489b7c49a0 | 456 | |
FCH_31 | 8:cd489b7c49a0 | 457 |