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