This code holds the complete demo set for the sx1280: PingPong, PER and Ranging Outdoor demo application. >>>>> This code MUST run on the mbed library release 127 or everything will be painfully slow.
Dependencies: mbed SX1280Lib DmTftLibrary
* This code MUST run on the mbed library release 127 or everything will be painfully slow.*
Demo/DemoApplication.cpp@18:22796c3be774, 2018-08-24 (annotated)
- Committer:
- GregCr
- Date:
- Fri Aug 24 08:01:53 2018 +0000
- Revision:
- 18:22796c3be774
- Parent:
- 17:a0bbfc228415
- Child:
- 19:45d0ce0f0677
- enabled all IRQ for ranging
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
GregCr | 0:9c0917bfde97 | 1 | /* |
GregCr | 0:9c0917bfde97 | 2 | ______ _ |
GregCr | 0:9c0917bfde97 | 3 | / _____) _ | | |
GregCr | 0:9c0917bfde97 | 4 | ( (____ _____ ____ _| |_ _____ ____| |__ |
GregCr | 0:9c0917bfde97 | 5 | \____ \| ___ | (_ _) ___ |/ ___) _ \ |
GregCr | 0:9c0917bfde97 | 6 | _____) ) ____| | | || |_| ____( (___| | | | |
GregCr | 0:9c0917bfde97 | 7 | (______/|_____)_|_|_| \__)_____)\____)_| |_| |
GregCr | 0:9c0917bfde97 | 8 | (C)2016 Semtech |
GregCr | 0:9c0917bfde97 | 9 | |
GregCr | 0:9c0917bfde97 | 10 | Description: PingPong, PER and Ranging demo implementation. |
GregCr | 0:9c0917bfde97 | 11 | |
GregCr | 0:9c0917bfde97 | 12 | Maintainer: Gregory Cristian & Gilbert Menth |
GregCr | 0:9c0917bfde97 | 13 | */ |
GregCr | 0:9c0917bfde97 | 14 | |
GregCr | 0:9c0917bfde97 | 15 | #include "mbed.h" |
GregCr | 8:c0a5f53fe196 | 16 | #include <math.h> |
GregCr | 0:9c0917bfde97 | 17 | #include "radio.h" |
GregCr | 0:9c0917bfde97 | 18 | #include "sx1280-hal.h" |
GregCr | 0:9c0917bfde97 | 19 | #include "Eeprom.h" |
GregCr | 0:9c0917bfde97 | 20 | #include "DemoApplication.h" |
GregCr | 0:9c0917bfde97 | 21 | #include "FreqLUT.h" |
GregCr | 0:9c0917bfde97 | 22 | |
GregCr | 17:a0bbfc228415 | 23 | #define max(a,b) \ |
GregCr | 17:a0bbfc228415 | 24 | ({ __typeof__ (a) _a = (a); \ |
GregCr | 17:a0bbfc228415 | 25 | __typeof__ (b) _b = (b); \ |
GregCr | 17:a0bbfc228415 | 26 | _a > _b ? _a : _b; }) |
GregCr | 17:a0bbfc228415 | 27 | |
GregCr | 8:c0a5f53fe196 | 28 | double t0 = -0.016432807883697; // X0 |
GregCr | 8:c0a5f53fe196 | 29 | double t1 = 0.323147003165358; // X1 |
GregCr | 8:c0a5f53fe196 | 30 | double t2 = 0.014922061351196; // X1^2 |
GregCr | 8:c0a5f53fe196 | 31 | double t3 = 0.000137832006285; // X1^3 |
GregCr | 8:c0a5f53fe196 | 32 | double t4 = 0.536873856625399; // X2 |
GregCr | 8:c0a5f53fe196 | 33 | double t5 = 0.040890089178579; // X2^2 |
GregCr | 8:c0a5f53fe196 | 34 | double t6 = -0.001074801048732; // X2^3 |
GregCr | 8:c0a5f53fe196 | 35 | double t7 = 0.000009240142234; // X2^4 |
GregCr | 8:c0a5f53fe196 | 36 | |
GregCr | 8:c0a5f53fe196 | 37 | |
GregCr | 1:dbcb3698f73a | 38 | |
GregCr | 0:9c0917bfde97 | 39 | /*! |
GregCr | 0:9c0917bfde97 | 40 | * \brief Defines the local payload buffer size |
GregCr | 0:9c0917bfde97 | 41 | */ |
GregCr | 0:9c0917bfde97 | 42 | #define BUFFER_SIZE 255 |
GregCr | 0:9c0917bfde97 | 43 | |
GregCr | 0:9c0917bfde97 | 44 | /*! |
GregCr | 0:9c0917bfde97 | 45 | * \brief Defines the size of the token defining message type in the payload |
GregCr | 0:9c0917bfde97 | 46 | * cf. above. |
GregCr | 0:9c0917bfde97 | 47 | */ |
GregCr | 0:9c0917bfde97 | 48 | #define PINGPONG_SIZE 4 |
GregCr | 0:9c0917bfde97 | 49 | #define PER_SIZE 3 |
GregCr | 0:9c0917bfde97 | 50 | |
GregCr | 0:9c0917bfde97 | 51 | /*! |
GregCr | 0:9c0917bfde97 | 52 | * \brief Define time used in PingPong demo to synch with cycle |
GregCr | 17:a0bbfc228415 | 53 | * RX_TX_INTER_PACKET_DELAY is the free time between each cycle (time reserve) |
GregCr | 0:9c0917bfde97 | 54 | */ |
GregCr | 17:a0bbfc228415 | 55 | #define RX_TX_INTER_PACKET_DELAY 150 // ms |
GregCr | 17:a0bbfc228415 | 56 | #define RX_TX_TRANSITION_WAIT 15 // ms |
GregCr | 0:9c0917bfde97 | 57 | |
GregCr | 0:9c0917bfde97 | 58 | /*! |
GregCr | 0:9c0917bfde97 | 59 | * \brief Size of ticks (used for Tx and Rx timeout) |
GregCr | 0:9c0917bfde97 | 60 | */ |
GregCr | 0:9c0917bfde97 | 61 | #define RX_TIMEOUT_TICK_SIZE RADIO_TICK_SIZE_1000_US |
GregCr | 0:9c0917bfde97 | 62 | |
GregCr | 0:9c0917bfde97 | 63 | #define RNG_TIMER_MS 384 // ms |
GregCr | 0:9c0917bfde97 | 64 | #define RNG_COM_TIMEOUT 100 // ms |
GregCr | 0:9c0917bfde97 | 65 | |
GregCr | 0:9c0917bfde97 | 66 | /*! |
GregCr | 0:9c0917bfde97 | 67 | * \brief Ranging raw factors |
GregCr | 0:9c0917bfde97 | 68 | * SF5 SF6 SF7 SF8 SF9 SF10 |
GregCr | 0:9c0917bfde97 | 69 | */ |
GregCr | 0:9c0917bfde97 | 70 | const uint16_t RNG_CALIB_0400[] = { 10299, 10271, 10244, 10242, 10230, 10246 }; |
GregCr | 0:9c0917bfde97 | 71 | const uint16_t RNG_CALIB_0800[] = { 11486, 11474, 11453, 11426, 11417, 11401 }; |
GregCr | 0:9c0917bfde97 | 72 | const uint16_t RNG_CALIB_1600[] = { 13308, 13493, 13528, 13515, 13430, 13376 }; |
GregCr | 0:9c0917bfde97 | 73 | const double RNG_FGRAD_0400[] = { -0.148, -0.214, -0.419, -0.853, -1.686, -3.423 }; |
GregCr | 0:9c0917bfde97 | 74 | const double RNG_FGRAD_0800[] = { -0.041, -0.811, -0.218, -0.429, -0.853, -1.737 }; |
GregCr | 0:9c0917bfde97 | 75 | const double RNG_FGRAD_1600[] = { 0.103, -0.041, -0.101, -0.211, -0.424, -0.87 }; |
GregCr | 0:9c0917bfde97 | 76 | |
GregCr | 0:9c0917bfde97 | 77 | /*! |
GregCr | 0:9c0917bfde97 | 78 | * \brief Define the possible message type for the Ping-Pong and PER apps |
GregCr | 0:9c0917bfde97 | 79 | */ |
GregCr | 0:9c0917bfde97 | 80 | const uint8_t PingMsg[] = "PING"; |
GregCr | 0:9c0917bfde97 | 81 | const uint8_t PongMsg[] = "PONG"; |
GregCr | 0:9c0917bfde97 | 82 | const uint8_t PerMsg[] = "PER"; |
GregCr | 0:9c0917bfde97 | 83 | |
GregCr | 0:9c0917bfde97 | 84 | /*! |
GregCr | 0:9c0917bfde97 | 85 | * \brief Buffer and its size |
GregCr | 0:9c0917bfde97 | 86 | */ |
GregCr | 0:9c0917bfde97 | 87 | uint8_t BufferSize = BUFFER_SIZE; |
GregCr | 0:9c0917bfde97 | 88 | uint8_t Buffer[BUFFER_SIZE]; |
GregCr | 0:9c0917bfde97 | 89 | |
GregCr | 0:9c0917bfde97 | 90 | static uint8_t CurrentChannel; |
GregCr | 8:c0a5f53fe196 | 91 | static uint16_t MeasuredChannels; |
GregCr | 0:9c0917bfde97 | 92 | int RngResultIndex; |
GregCr | 0:9c0917bfde97 | 93 | double RawRngResults[DEMO_RNG_CHANNELS_COUNT_MAX]; |
GregCr | 8:c0a5f53fe196 | 94 | double RssiRng[DEMO_RNG_CHANNELS_COUNT_MAX]; |
GregCr | 8:c0a5f53fe196 | 95 | |
GregCr | 0:9c0917bfde97 | 96 | |
GregCr | 0:9c0917bfde97 | 97 | /*! |
GregCr | 0:9c0917bfde97 | 98 | * \brief Function to be executed on Radio Tx Done event |
GregCr | 0:9c0917bfde97 | 99 | */ |
GregCr | 0:9c0917bfde97 | 100 | void OnTxDone( void ); |
GregCr | 0:9c0917bfde97 | 101 | |
GregCr | 0:9c0917bfde97 | 102 | /*! |
GregCr | 0:9c0917bfde97 | 103 | * \brief Function to be executed on Radio Rx Done event |
GregCr | 0:9c0917bfde97 | 104 | */ |
GregCr | 0:9c0917bfde97 | 105 | void OnRxDone( void ); |
GregCr | 0:9c0917bfde97 | 106 | |
GregCr | 0:9c0917bfde97 | 107 | /*! |
GregCr | 0:9c0917bfde97 | 108 | * \brief Function executed on Radio Tx Timeout event |
GregCr | 0:9c0917bfde97 | 109 | */ |
GregCr | 0:9c0917bfde97 | 110 | void OnTxTimeout( void ); |
GregCr | 0:9c0917bfde97 | 111 | |
GregCr | 0:9c0917bfde97 | 112 | /*! |
GregCr | 0:9c0917bfde97 | 113 | * \brief Function executed on Radio Rx Timeout event |
GregCr | 0:9c0917bfde97 | 114 | */ |
GregCr | 0:9c0917bfde97 | 115 | void OnRxTimeout( void ); |
GregCr | 0:9c0917bfde97 | 116 | |
GregCr | 0:9c0917bfde97 | 117 | /*! |
GregCr | 0:9c0917bfde97 | 118 | * \brief Function executed on Radio Rx Error event |
GregCr | 0:9c0917bfde97 | 119 | */ |
GregCr | 0:9c0917bfde97 | 120 | void OnRxError( IrqErrorCode_t ); |
GregCr | 0:9c0917bfde97 | 121 | |
GregCr | 0:9c0917bfde97 | 122 | /*! |
GregCr | 0:9c0917bfde97 | 123 | * \brief Function executed on Radio Rx Error event |
GregCr | 0:9c0917bfde97 | 124 | */ |
GregCr | 0:9c0917bfde97 | 125 | void OnRangingDone( IrqRangingCode_t ); |
GregCr | 0:9c0917bfde97 | 126 | |
GregCr | 0:9c0917bfde97 | 127 | /*! |
GregCr | 0:9c0917bfde97 | 128 | * \brief All the callbacks are stored in a structure |
GregCr | 0:9c0917bfde97 | 129 | */ |
GregCr | 0:9c0917bfde97 | 130 | RadioCallbacks_t Callbacks = |
GregCr | 0:9c0917bfde97 | 131 | { |
GregCr | 0:9c0917bfde97 | 132 | &OnTxDone, // txDone |
GregCr | 0:9c0917bfde97 | 133 | &OnRxDone, // rxDone |
GregCr | 0:9c0917bfde97 | 134 | NULL, // syncWordDone |
GregCr | 0:9c0917bfde97 | 135 | NULL, // headerDone |
GregCr | 0:9c0917bfde97 | 136 | &OnTxTimeout, // txTimeout |
GregCr | 0:9c0917bfde97 | 137 | &OnRxTimeout, // rxTimeout |
GregCr | 0:9c0917bfde97 | 138 | &OnRxError, // rxError |
GregCr | 0:9c0917bfde97 | 139 | &OnRangingDone, // rangingDone |
GregCr | 0:9c0917bfde97 | 140 | NULL, // cadDone |
GregCr | 0:9c0917bfde97 | 141 | }; |
GregCr | 0:9c0917bfde97 | 142 | |
GregCr | 0:9c0917bfde97 | 143 | /*! |
GregCr | 0:9c0917bfde97 | 144 | * \brief Define IO and callbacks for radio |
GregCr | 0:9c0917bfde97 | 145 | * mosi, miso, sclk, nss, busy, dio1, dio2, dio3, rst, callbacks |
GregCr | 0:9c0917bfde97 | 146 | */ |
GregCr | 0:9c0917bfde97 | 147 | SX1280Hal Radio( D11, D12, D13, D7, D3, D5, NC, NC, A0, &Callbacks ); |
GregCr | 0:9c0917bfde97 | 148 | |
GregCr | 0:9c0917bfde97 | 149 | /*! |
GregCr | 0:9c0917bfde97 | 150 | * \brief Control the Antenna Diversity switch |
GregCr | 0:9c0917bfde97 | 151 | */ |
GregCr | 0:9c0917bfde97 | 152 | DigitalOut ANT_SW( A3 ); |
GregCr | 0:9c0917bfde97 | 153 | |
GregCr | 0:9c0917bfde97 | 154 | /*! |
GregCr | 0:9c0917bfde97 | 155 | * \brief Tx LED toggling on transmition success |
GregCr | 0:9c0917bfde97 | 156 | */ |
GregCr | 0:9c0917bfde97 | 157 | DigitalOut TX_LED( A4 ); |
GregCr | 0:9c0917bfde97 | 158 | |
GregCr | 0:9c0917bfde97 | 159 | /*! |
GregCr | 0:9c0917bfde97 | 160 | * \brief Rx LED toggling on reception success |
GregCr | 0:9c0917bfde97 | 161 | */ |
GregCr | 0:9c0917bfde97 | 162 | DigitalOut RX_LED( A5 ); |
GregCr | 0:9c0917bfde97 | 163 | |
GregCr | 0:9c0917bfde97 | 164 | /*! |
GregCr | 0:9c0917bfde97 | 165 | * \brief Mask of IRQs |
GregCr | 0:9c0917bfde97 | 166 | */ |
GregCr | 0:9c0917bfde97 | 167 | uint16_t IrqMask = 0x0000; |
GregCr | 0:9c0917bfde97 | 168 | |
GregCr | 0:9c0917bfde97 | 169 | /*! |
GregCr | 0:9c0917bfde97 | 170 | * \brief Locals parameters and status for radio API |
GregCr | 0:9c0917bfde97 | 171 | * NEED TO BE OPTIMIZED, COPY OF STUCTURE ALREADY EXISTING |
GregCr | 0:9c0917bfde97 | 172 | */ |
GregCr | 0:9c0917bfde97 | 173 | PacketParams_t PacketParams; |
GregCr | 0:9c0917bfde97 | 174 | PacketStatus_t PacketStatus; |
GregCr | 0:9c0917bfde97 | 175 | ModulationParams_t ModulationParams; |
GregCr | 0:9c0917bfde97 | 176 | |
GregCr | 0:9c0917bfde97 | 177 | /*! |
GregCr | 0:9c0917bfde97 | 178 | * \brief Flag to indicate if the demo is already running |
GregCr | 0:9c0917bfde97 | 179 | */ |
GregCr | 0:9c0917bfde97 | 180 | static bool DemoRunning = false; |
GregCr | 0:9c0917bfde97 | 181 | |
GregCr | 0:9c0917bfde97 | 182 | /*! |
GregCr | 0:9c0917bfde97 | 183 | * \brief Flag holding the current internal state of the demo application |
GregCr | 0:9c0917bfde97 | 184 | */ |
GregCr | 0:9c0917bfde97 | 185 | static uint8_t DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 186 | |
GregCr | 0:9c0917bfde97 | 187 | /*! |
GregCr | 0:9c0917bfde97 | 188 | * \brief Ticker for master to synch Tx frames. Flags for PER and PingPong demo |
GregCr | 0:9c0917bfde97 | 189 | * for Synch TX in cycle. |
GregCr | 0:9c0917bfde97 | 190 | */ |
GregCr | 0:9c0917bfde97 | 191 | Ticker SendNextPacket; |
GregCr | 0:9c0917bfde97 | 192 | static bool SendNext = false; |
GregCr | 0:9c0917bfde97 | 193 | |
GregCr | 0:9c0917bfde97 | 194 | /*! |
GregCr | 17:a0bbfc228415 | 195 | * \brief Ticker for slave to synch Tx frames. Flags for PER and PingPong demo |
GregCr | 17:a0bbfc228415 | 196 | * for Synch RX in cycle. |
GregCr | 17:a0bbfc228415 | 197 | */ |
GregCr | 17:a0bbfc228415 | 198 | Ticker ReceiveNextPacket; |
GregCr | 17:a0bbfc228415 | 199 | static bool ReceiveNext = false; |
GregCr | 17:a0bbfc228415 | 200 | |
GregCr | 17:a0bbfc228415 | 201 | /*! |
GregCr | 0:9c0917bfde97 | 202 | * \brief Hold last Rx packet number to compute PER in PER and PingPong demo |
GregCr | 0:9c0917bfde97 | 203 | */ |
GregCr | 0:9c0917bfde97 | 204 | static uint32_t PacketRxSequence = 0; |
GregCr | 0:9c0917bfde97 | 205 | static uint32_t PacketRxSequencePrev = 0; |
GregCr | 0:9c0917bfde97 | 206 | |
GregCr | 0:9c0917bfde97 | 207 | |
GregCr | 0:9c0917bfde97 | 208 | void SetAntennaSwitch( void ); |
GregCr | 0:9c0917bfde97 | 209 | void LedBlink( void ); |
GregCr | 0:9c0917bfde97 | 210 | void InitializeDemoParameters( uint8_t modulation ); |
GregCr | 0:9c0917bfde97 | 211 | uint16_t GetTimeOnAir( uint8_t modulation ); |
GregCr | 0:9c0917bfde97 | 212 | void SendNextPacketEvent( void ); |
GregCr | 17:a0bbfc228415 | 213 | void ReceiveNextPacketEvent( void ); |
GregCr | 0:9c0917bfde97 | 214 | uint8_t CheckDistance( void ); |
GregCr | 0:9c0917bfde97 | 215 | |
GregCr | 0:9c0917bfde97 | 216 | // ************************** RF Test Demo ****************************** |
GregCr | 0:9c0917bfde97 | 217 | // * * |
GregCr | 0:9c0917bfde97 | 218 | // * * |
GregCr | 0:9c0917bfde97 | 219 | // * * |
GregCr | 0:9c0917bfde97 | 220 | // ***************************************************************************** |
GregCr | 0:9c0917bfde97 | 221 | |
GregCr | 0:9c0917bfde97 | 222 | uint8_t RunDemoSleepMode( void ) |
GregCr | 0:9c0917bfde97 | 223 | { |
GregCr | 0:9c0917bfde97 | 224 | SleepParams_t SleepParam; |
GregCr | 0:9c0917bfde97 | 225 | |
GregCr | 0:9c0917bfde97 | 226 | if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) |
GregCr | 0:9c0917bfde97 | 227 | { |
GregCr | 0:9c0917bfde97 | 228 | return 0; |
GregCr | 0:9c0917bfde97 | 229 | } |
GregCr | 0:9c0917bfde97 | 230 | if( DemoRunning == false ) |
GregCr | 0:9c0917bfde97 | 231 | { |
GregCr | 0:9c0917bfde97 | 232 | DemoRunning = true; |
GregCr | 0:9c0917bfde97 | 233 | InitializeDemoParameters( PACKET_TYPE_LORA ); |
GregCr | 0:9c0917bfde97 | 234 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 235 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 236 | SleepParam.WakeUpRTC = 0; //!< Get out of sleep mode if wakeup signal received from RTC |
GregCr | 0:9c0917bfde97 | 237 | SleepParam.InstructionRamRetention = 0; //!< InstructionRam is conserved during sleep |
GregCr | 0:9c0917bfde97 | 238 | SleepParam.DataBufferRetention = 0; //!< Data buffer is conserved during sleep |
GregCr | 0:9c0917bfde97 | 239 | SleepParam.DataRamRetention = 0; //!< Data ram is conserved during sleep |
GregCr | 0:9c0917bfde97 | 240 | Radio.SetSleep( SleepParam ); |
GregCr | 0:9c0917bfde97 | 241 | } |
GregCr | 0:9c0917bfde97 | 242 | else |
GregCr | 0:9c0917bfde97 | 243 | { |
GregCr | 0:9c0917bfde97 | 244 | LedBlink( ); |
GregCr | 0:9c0917bfde97 | 245 | } |
GregCr | 0:9c0917bfde97 | 246 | return 0; |
GregCr | 0:9c0917bfde97 | 247 | } |
GregCr | 0:9c0917bfde97 | 248 | |
GregCr | 0:9c0917bfde97 | 249 | uint8_t RunDemoStandbyRcMode( void ) |
GregCr | 0:9c0917bfde97 | 250 | { |
GregCr | 0:9c0917bfde97 | 251 | if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) |
GregCr | 0:9c0917bfde97 | 252 | { |
GregCr | 0:9c0917bfde97 | 253 | return 0; |
GregCr | 0:9c0917bfde97 | 254 | } |
GregCr | 0:9c0917bfde97 | 255 | if( DemoRunning == false ) |
GregCr | 0:9c0917bfde97 | 256 | { |
GregCr | 0:9c0917bfde97 | 257 | DemoRunning = true; |
GregCr | 0:9c0917bfde97 | 258 | InitializeDemoParameters( PACKET_TYPE_LORA ); |
GregCr | 0:9c0917bfde97 | 259 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 260 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 261 | Radio.SetRegulatorMode( ( RadioRegulatorModes_t )Eeprom.EepromData.DemoSettings.RadioPowerMode ); |
GregCr | 0:9c0917bfde97 | 262 | Radio.SetStandby( STDBY_RC ); |
GregCr | 0:9c0917bfde97 | 263 | DemoRunning = true; |
GregCr | 0:9c0917bfde97 | 264 | } |
GregCr | 0:9c0917bfde97 | 265 | else |
GregCr | 0:9c0917bfde97 | 266 | { |
GregCr | 0:9c0917bfde97 | 267 | LedBlink( ); |
GregCr | 0:9c0917bfde97 | 268 | } |
GregCr | 0:9c0917bfde97 | 269 | return 0; |
GregCr | 0:9c0917bfde97 | 270 | } |
GregCr | 0:9c0917bfde97 | 271 | |
GregCr | 0:9c0917bfde97 | 272 | uint8_t RunDemoStandbyXoscMode( void ) |
GregCr | 0:9c0917bfde97 | 273 | { |
GregCr | 0:9c0917bfde97 | 274 | if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) |
GregCr | 0:9c0917bfde97 | 275 | { |
GregCr | 0:9c0917bfde97 | 276 | return 0; |
GregCr | 0:9c0917bfde97 | 277 | } |
GregCr | 0:9c0917bfde97 | 278 | if( DemoRunning == false ) |
GregCr | 0:9c0917bfde97 | 279 | { |
GregCr | 0:9c0917bfde97 | 280 | DemoRunning = true; |
GregCr | 0:9c0917bfde97 | 281 | InitializeDemoParameters( PACKET_TYPE_LORA ); |
GregCr | 0:9c0917bfde97 | 282 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 283 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 284 | Radio.SetRegulatorMode( ( RadioRegulatorModes_t )Eeprom.EepromData.DemoSettings.RadioPowerMode ); |
GregCr | 0:9c0917bfde97 | 285 | Radio.SetStandby( STDBY_XOSC ); |
GregCr | 0:9c0917bfde97 | 286 | DemoRunning = true; |
GregCr | 0:9c0917bfde97 | 287 | } |
GregCr | 0:9c0917bfde97 | 288 | else |
GregCr | 0:9c0917bfde97 | 289 | { |
GregCr | 0:9c0917bfde97 | 290 | LedBlink( ); |
GregCr | 0:9c0917bfde97 | 291 | } |
GregCr | 0:9c0917bfde97 | 292 | return 0; |
GregCr | 0:9c0917bfde97 | 293 | } |
GregCr | 0:9c0917bfde97 | 294 | |
GregCr | 0:9c0917bfde97 | 295 | uint8_t RunDemoTxCw( void ) |
GregCr | 0:9c0917bfde97 | 296 | { |
GregCr | 0:9c0917bfde97 | 297 | if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) |
GregCr | 0:9c0917bfde97 | 298 | { |
GregCr | 0:9c0917bfde97 | 299 | return 0; |
GregCr | 0:9c0917bfde97 | 300 | } |
GregCr | 0:9c0917bfde97 | 301 | if( DemoRunning == false ) |
GregCr | 0:9c0917bfde97 | 302 | { |
GregCr | 0:9c0917bfde97 | 303 | DemoRunning = true; |
GregCr | 0:9c0917bfde97 | 304 | InitializeDemoParameters( PACKET_TYPE_LORA ); |
GregCr | 0:9c0917bfde97 | 305 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 306 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 307 | SetAntennaSwitch( ); |
GregCr | 0:9c0917bfde97 | 308 | Radio.SetStandby( STDBY_RC ); |
GregCr | 0:9c0917bfde97 | 309 | Radio.SetRegulatorMode( ( RadioRegulatorModes_t )Eeprom.EepromData.DemoSettings.RadioPowerMode ); |
GregCr | 0:9c0917bfde97 | 310 | Radio.SetRfFrequency( Eeprom.EepromData.DemoSettings.Frequency ); |
GregCr | 0:9c0917bfde97 | 311 | Radio.SetTxParams( Eeprom.EepromData.DemoSettings.TxPower, RADIO_RAMP_20_US ); |
GregCr | 0:9c0917bfde97 | 312 | Radio.SetTxContinuousWave( ); |
GregCr | 0:9c0917bfde97 | 313 | DemoRunning = true; |
GregCr | 0:9c0917bfde97 | 314 | } |
GregCr | 0:9c0917bfde97 | 315 | else |
GregCr | 0:9c0917bfde97 | 316 | { |
GregCr | 0:9c0917bfde97 | 317 | LedBlink( ); |
GregCr | 0:9c0917bfde97 | 318 | } |
GregCr | 0:9c0917bfde97 | 319 | return 0; |
GregCr | 0:9c0917bfde97 | 320 | } |
GregCr | 0:9c0917bfde97 | 321 | |
GregCr | 0:9c0917bfde97 | 322 | uint8_t RunDemoTxContinuousModulation( void ) |
GregCr | 0:9c0917bfde97 | 323 | { |
GregCr | 0:9c0917bfde97 | 324 | uint8_t localPayloadSize = 250; |
GregCr | 0:9c0917bfde97 | 325 | uint8_t i = 0; |
GregCr | 0:9c0917bfde97 | 326 | |
GregCr | 0:9c0917bfde97 | 327 | if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_RANGING ) |
GregCr | 0:9c0917bfde97 | 328 | { |
GregCr | 0:9c0917bfde97 | 329 | Eeprom.EepromData.DemoSettings.ModulationType = PACKET_TYPE_LORA; |
GregCr | 0:9c0917bfde97 | 330 | } |
GregCr | 0:9c0917bfde97 | 331 | if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) |
GregCr | 0:9c0917bfde97 | 332 | { |
GregCr | 0:9c0917bfde97 | 333 | return 0; |
GregCr | 0:9c0917bfde97 | 334 | } |
GregCr | 0:9c0917bfde97 | 335 | |
GregCr | 0:9c0917bfde97 | 336 | if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_FLRC ) |
GregCr | 0:9c0917bfde97 | 337 | { |
GregCr | 0:9c0917bfde97 | 338 | localPayloadSize = 120; // Encoded in 4/8 so 240 bytes in total |
GregCr | 0:9c0917bfde97 | 339 | } |
mverdy | 14:ebd89dacc807 | 340 | |
mverdy | 14:ebd89dacc807 | 341 | Radio.ProcessIrqs( ); |
mverdy | 14:ebd89dacc807 | 342 | |
GregCr | 0:9c0917bfde97 | 343 | if( DemoRunning == false ) |
GregCr | 0:9c0917bfde97 | 344 | { |
GregCr | 0:9c0917bfde97 | 345 | DemoRunning = true; |
GregCr | 17:a0bbfc228415 | 346 | InitializeDemoParameters( Eeprom.EepromData.DemoSettings.ModulationType ); |
GregCr | 0:9c0917bfde97 | 347 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 348 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 349 | |
GregCr | 0:9c0917bfde97 | 350 | IrqMask = IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT; |
GregCr | 0:9c0917bfde97 | 351 | Radio.SetDioIrqParams( IrqMask, IrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
GregCr | 0:9c0917bfde97 | 352 | for( i = 0; i < localPayloadSize; i++ ) |
GregCr | 0:9c0917bfde97 | 353 | { |
GregCr | 0:9c0917bfde97 | 354 | Buffer[i] = ( uint8_t )rand( ); |
GregCr | 0:9c0917bfde97 | 355 | } |
GregCr | 0:9c0917bfde97 | 356 | // Radio.SetAutoFS( true ); // no need to relock the PLL between packets |
GregCr | 0:9c0917bfde97 | 357 | Radio.SendPayload( Buffer, localPayloadSize, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, 10000 } ); |
GregCr | 0:9c0917bfde97 | 358 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 359 | } |
GregCr | 0:9c0917bfde97 | 360 | else |
GregCr | 0:9c0917bfde97 | 361 | { |
GregCr | 0:9c0917bfde97 | 362 | switch( DemoInternalState ) |
GregCr | 0:9c0917bfde97 | 363 | { |
GregCr | 0:9c0917bfde97 | 364 | case APP_RX: |
GregCr | 0:9c0917bfde97 | 365 | break; |
GregCr | 0:9c0917bfde97 | 366 | |
GregCr | 0:9c0917bfde97 | 367 | case APP_TX: |
GregCr | 0:9c0917bfde97 | 368 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 369 | LedBlink( ); |
GregCr | 0:9c0917bfde97 | 370 | // Send the next frame |
GregCr | 0:9c0917bfde97 | 371 | IrqMask = IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT; |
GregCr | 0:9c0917bfde97 | 372 | Radio.SetDioIrqParams( IrqMask, IrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
GregCr | 0:9c0917bfde97 | 373 | for( i = 0; i < localPayloadSize; i++ ) |
GregCr | 0:9c0917bfde97 | 374 | { |
GregCr | 0:9c0917bfde97 | 375 | Buffer[i] = ( uint8_t )rand( ); |
GregCr | 0:9c0917bfde97 | 376 | } |
GregCr | 0:9c0917bfde97 | 377 | // Radio.SetAutoFS( true ); // no need to relock the PLL between packets |
GregCr | 0:9c0917bfde97 | 378 | Radio.SendPayload( Buffer, localPayloadSize, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, 0xFFFF } ); |
GregCr | 0:9c0917bfde97 | 379 | break; |
GregCr | 0:9c0917bfde97 | 380 | |
GregCr | 0:9c0917bfde97 | 381 | case APP_RX_TIMEOUT: |
GregCr | 0:9c0917bfde97 | 382 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 383 | break; |
GregCr | 0:9c0917bfde97 | 384 | |
GregCr | 0:9c0917bfde97 | 385 | case APP_RX_ERROR: |
GregCr | 0:9c0917bfde97 | 386 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 387 | break; |
GregCr | 0:9c0917bfde97 | 388 | |
GregCr | 0:9c0917bfde97 | 389 | case APP_TX_TIMEOUT: |
GregCr | 0:9c0917bfde97 | 390 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 391 | break; |
GregCr | 0:9c0917bfde97 | 392 | |
GregCr | 0:9c0917bfde97 | 393 | case APP_IDLE: |
GregCr | 0:9c0917bfde97 | 394 | break; |
GregCr | 0:9c0917bfde97 | 395 | |
GregCr | 0:9c0917bfde97 | 396 | default: |
GregCr | 0:9c0917bfde97 | 397 | break; |
GregCr | 0:9c0917bfde97 | 398 | } |
GregCr | 0:9c0917bfde97 | 399 | } |
GregCr | 0:9c0917bfde97 | 400 | return 0; |
GregCr | 0:9c0917bfde97 | 401 | } |
GregCr | 0:9c0917bfde97 | 402 | |
GregCr | 0:9c0917bfde97 | 403 | // ************************* PER Demo ****************************** |
GregCr | 0:9c0917bfde97 | 404 | // * * |
GregCr | 0:9c0917bfde97 | 405 | // * * |
GregCr | 0:9c0917bfde97 | 406 | // * * |
GregCr | 0:9c0917bfde97 | 407 | // ***************************************************************************** |
GregCr | 0:9c0917bfde97 | 408 | uint8_t RunDemoApplicationPer( void ) |
GregCr | 0:9c0917bfde97 | 409 | { |
GregCr | 0:9c0917bfde97 | 410 | uint8_t i = 0; |
GregCr | 0:9c0917bfde97 | 411 | uint8_t refreshDisplay = 0; |
GregCr | 17:a0bbfc228415 | 412 | static uint8_t CurrentChannel; |
GregCr | 0:9c0917bfde97 | 413 | |
GregCr | 0:9c0917bfde97 | 414 | if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) |
GregCr | 0:9c0917bfde97 | 415 | { |
GregCr | 0:9c0917bfde97 | 416 | return 0; |
GregCr | 0:9c0917bfde97 | 417 | } |
GregCr | 0:9c0917bfde97 | 418 | |
GregCr | 0:9c0917bfde97 | 419 | if( DemoRunning == false ) |
GregCr | 0:9c0917bfde97 | 420 | { |
GregCr | 0:9c0917bfde97 | 421 | DemoRunning = true; |
GregCr | 17:a0bbfc228415 | 422 | CurrentChannel = 0; |
GregCr | 0:9c0917bfde97 | 423 | |
GregCr | 17:a0bbfc228415 | 424 | #ifdef PRINT_DEBUG |
GregCr | 0:9c0917bfde97 | 425 | printf( "Start RunDemoApplicationPer\n\r" ); |
GregCr | 17:a0bbfc228415 | 426 | #endif |
GregCr | 0:9c0917bfde97 | 427 | |
GregCr | 0:9c0917bfde97 | 428 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 429 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 430 | SetAntennaSwitch( ); |
GregCr | 0:9c0917bfde97 | 431 | Eeprom.EepromData.DemoSettings.CntPacketTx = 0; |
GregCr | 0:9c0917bfde97 | 432 | Eeprom.EepromData.DemoSettings.CntPacketRxOK = 0; |
GregCr | 0:9c0917bfde97 | 433 | Eeprom.EepromData.DemoSettings.CntPacketRxKO = 0; |
GregCr | 0:9c0917bfde97 | 434 | Eeprom.EepromData.DemoSettings.RxTimeOutCount = 0; |
GregCr | 0:9c0917bfde97 | 435 | |
GregCr | 0:9c0917bfde97 | 436 | InitializeDemoParameters( Eeprom.EepromData.DemoSettings.ModulationType ); |
GregCr | 0:9c0917bfde97 | 437 | |
GregCr | 17:a0bbfc228415 | 438 | UpdateRadioFrequency( Channels[CurrentChannel] ); |
GregCr | 17:a0bbfc228415 | 439 | Radio.SetRfFrequency( Channels[CurrentChannel] ); |
GregCr | 17:a0bbfc228415 | 440 | |
GregCr | 17:a0bbfc228415 | 441 | Eeprom.EepromData.DemoSettings.TimeOnAir = GetTimeOnAir( Eeprom.EepromData.DemoSettings.ModulationType ); |
GregCr | 0:9c0917bfde97 | 442 | |
GregCr | 0:9c0917bfde97 | 443 | if( Eeprom.EepromData.DemoSettings.Entity == MASTER ) |
GregCr | 0:9c0917bfde97 | 444 | { |
GregCr | 17:a0bbfc228415 | 445 | SendNextPacket.attach_us( &SendNextPacketEvent, ( ( uint32_t )( Eeprom.EepromData.DemoSettings.TimeOnAir + RX_TX_INTER_PACKET_DELAY ) ) * 1000 ); |
GregCr | 0:9c0917bfde97 | 446 | DemoInternalState = APP_TX; |
GregCr | 0:9c0917bfde97 | 447 | } |
GregCr | 0:9c0917bfde97 | 448 | else |
GregCr | 0:9c0917bfde97 | 449 | { |
GregCr | 0:9c0917bfde97 | 450 | IrqMask = IRQ_RX_DONE | IRQ_CRC_ERROR | IRQ_RX_TX_TIMEOUT; |
GregCr | 0:9c0917bfde97 | 451 | Radio.SetDioIrqParams( IrqMask, IrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
GregCr | 0:9c0917bfde97 | 452 | // Rx Single without timeout for the start |
GregCr | 0:9c0917bfde97 | 453 | Radio.SetRx( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, 0x0000 } ); |
GregCr | 0:9c0917bfde97 | 454 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 455 | } |
GregCr | 0:9c0917bfde97 | 456 | } |
GregCr | 0:9c0917bfde97 | 457 | |
mverdy | 14:ebd89dacc807 | 458 | Radio.ProcessIrqs( ); |
mverdy | 14:ebd89dacc807 | 459 | |
GregCr | 0:9c0917bfde97 | 460 | if( Eeprom.EepromData.DemoSettings.MaxNumPacket > 0 ) // != Infinite |
GregCr | 0:9c0917bfde97 | 461 | { |
GregCr | 0:9c0917bfde97 | 462 | if( ( Eeprom.EepromData.DemoSettings.CntPacketRxOK + \ |
GregCr | 0:9c0917bfde97 | 463 | Eeprom.EepromData.DemoSettings.CntPacketRxKO + \ |
GregCr | 0:9c0917bfde97 | 464 | Eeprom.EepromData.DemoSettings.RxTimeOutCount) >= \ |
GregCr | 0:9c0917bfde97 | 465 | Eeprom.EepromData.DemoSettings.MaxNumPacket ) |
GregCr | 0:9c0917bfde97 | 466 | { |
GregCr | 0:9c0917bfde97 | 467 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 468 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 469 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 470 | Radio.SetStandby( STDBY_RC ); |
GregCr | 0:9c0917bfde97 | 471 | SendNextPacket.detach( ); |
GregCr | 17:a0bbfc228415 | 472 | ReceiveNextPacket.detach( ); |
GregCr | 0:9c0917bfde97 | 473 | Eeprom.EepromData.DemoSettings.HoldDemo = true; |
GregCr | 0:9c0917bfde97 | 474 | refreshDisplay = 1; |
GregCr | 0:9c0917bfde97 | 475 | } |
GregCr | 0:9c0917bfde97 | 476 | } |
GregCr | 0:9c0917bfde97 | 477 | |
GregCr | 0:9c0917bfde97 | 478 | switch( DemoInternalState ) |
GregCr | 0:9c0917bfde97 | 479 | { |
GregCr | 0:9c0917bfde97 | 480 | case PER_TX_START: |
GregCr | 0:9c0917bfde97 | 481 | Eeprom.EepromData.DemoSettings.CntPacketTx++; |
GregCr | 0:9c0917bfde97 | 482 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 483 | |
GregCr | 0:9c0917bfde97 | 484 | Buffer[0] = ( Eeprom.EepromData.DemoSettings.CntPacketTx >> 24 ) & 0xFF; |
GregCr | 0:9c0917bfde97 | 485 | Buffer[1] = ( Eeprom.EepromData.DemoSettings.CntPacketTx >> 16 ) & 0xFF; |
GregCr | 0:9c0917bfde97 | 486 | Buffer[2] = ( Eeprom.EepromData.DemoSettings.CntPacketTx >> 8 ) & 0xFF; |
GregCr | 0:9c0917bfde97 | 487 | Buffer[3] = Eeprom.EepromData.DemoSettings.CntPacketTx & 0xFF; |
GregCr | 0:9c0917bfde97 | 488 | Buffer[4] = PerMsg[0]; |
GregCr | 0:9c0917bfde97 | 489 | Buffer[5] = PerMsg[1]; |
GregCr | 0:9c0917bfde97 | 490 | Buffer[6] = PerMsg[2]; |
GregCr | 0:9c0917bfde97 | 491 | for( i = 7; i < Eeprom.EepromData.DemoSettings.PayloadLength; i++ ) |
GregCr | 0:9c0917bfde97 | 492 | { |
GregCr | 0:9c0917bfde97 | 493 | Buffer[i] = i; |
GregCr | 0:9c0917bfde97 | 494 | } |
GregCr | 0:9c0917bfde97 | 495 | TX_LED = !TX_LED; |
GregCr | 0:9c0917bfde97 | 496 | IrqMask = IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT; |
GregCr | 17:a0bbfc228415 | 497 | |
GregCr | 17:a0bbfc228415 | 498 | UpdateRadioFrequency( Channels[CurrentChannel] ); |
GregCr | 17:a0bbfc228415 | 499 | Radio.SetRfFrequency( Channels[CurrentChannel] ); |
GregCr | 17:a0bbfc228415 | 500 | |
GregCr | 0:9c0917bfde97 | 501 | Radio.SetDioIrqParams( IrqMask, IrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
GregCr | 17:a0bbfc228415 | 502 | Radio.SendPayload( Buffer, Eeprom.EepromData.DemoSettings.PayloadLength, |
GregCr | 17:a0bbfc228415 | 503 | ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, Eeprom.EepromData.DemoSettings.TimeOnAir << 1 } ); |
GregCr | 17:a0bbfc228415 | 504 | if( CurrentChannel < ( CHANNELS - 1 ) ) |
GregCr | 17:a0bbfc228415 | 505 | { |
GregCr | 17:a0bbfc228415 | 506 | CurrentChannel++; |
GregCr | 17:a0bbfc228415 | 507 | } |
GregCr | 17:a0bbfc228415 | 508 | else |
GregCr | 17:a0bbfc228415 | 509 | { |
GregCr | 17:a0bbfc228415 | 510 | CurrentChannel = 0; |
GregCr | 17:a0bbfc228415 | 511 | } |
GregCr | 0:9c0917bfde97 | 512 | break; |
GregCr | 0:9c0917bfde97 | 513 | |
GregCr | 0:9c0917bfde97 | 514 | case PER_RX_START: |
GregCr | 17:a0bbfc228415 | 515 | UpdateRadioFrequency( Channels[CurrentChannel] ); |
GregCr | 17:a0bbfc228415 | 516 | Radio.SetRfFrequency( Channels[CurrentChannel] ); |
GregCr | 0:9c0917bfde97 | 517 | IrqMask = IRQ_RX_DONE | IRQ_CRC_ERROR | IRQ_RX_TX_TIMEOUT; |
GregCr | 0:9c0917bfde97 | 518 | Radio.SetDioIrqParams( IrqMask, IrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
GregCr | 17:a0bbfc228415 | 519 | Radio.SetRx( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, 0xFFFF } ); |
GregCr | 0:9c0917bfde97 | 520 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 521 | break; |
GregCr | 0:9c0917bfde97 | 522 | |
GregCr | 0:9c0917bfde97 | 523 | case APP_TX: |
GregCr | 0:9c0917bfde97 | 524 | if( SendNext == true ) |
GregCr | 0:9c0917bfde97 | 525 | { |
GregCr | 0:9c0917bfde97 | 526 | SendNext = false; |
GregCr | 17:a0bbfc228415 | 527 | if( ( Eeprom.EepromData.DemoSettings.MaxNumPacket == 0 ) || |
GregCr | 17:a0bbfc228415 | 528 | ( Eeprom.EepromData.DemoSettings.CntPacketTx < Eeprom.EepromData.DemoSettings.MaxNumPacket ) ) |
GregCr | 0:9c0917bfde97 | 529 | { |
GregCr | 17:a0bbfc228415 | 530 | DemoInternalState = PER_TX_START; // send next |
GregCr | 0:9c0917bfde97 | 531 | refreshDisplay = 1; |
GregCr | 0:9c0917bfde97 | 532 | } |
GregCr | 0:9c0917bfde97 | 533 | else // MaxNumPacket sent -> end of demo |
GregCr | 0:9c0917bfde97 | 534 | { |
GregCr | 0:9c0917bfde97 | 535 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 536 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 537 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 538 | Radio.SetStandby( STDBY_RC ); |
GregCr | 0:9c0917bfde97 | 539 | SendNextPacket.detach( ); |
GregCr | 0:9c0917bfde97 | 540 | Eeprom.EepromData.DemoSettings.HoldDemo = true; |
GregCr | 0:9c0917bfde97 | 541 | refreshDisplay = 1; |
GregCr | 0:9c0917bfde97 | 542 | } |
GregCr | 0:9c0917bfde97 | 543 | } |
GregCr | 0:9c0917bfde97 | 544 | break; |
GregCr | 0:9c0917bfde97 | 545 | |
GregCr | 0:9c0917bfde97 | 546 | case APP_RX: |
GregCr | 0:9c0917bfde97 | 547 | RX_LED = !RX_LED; |
GregCr | 17:a0bbfc228415 | 548 | Radio.SetStandby( STDBY_RC ); |
GregCr | 17:a0bbfc228415 | 549 | ReceiveNext = false; |
GregCr | 17:a0bbfc228415 | 550 | ReceiveNextPacket.detach( ); |
GregCr | 17:a0bbfc228415 | 551 | ReceiveNextPacket.attach_us( &ReceiveNextPacketEvent, ( ( uint32_t )( Eeprom.EepromData.DemoSettings.TimeOnAir + RX_TX_INTER_PACKET_DELAY + RX_TX_TRANSITION_WAIT ) ) * 1000 ); |
GregCr | 17:a0bbfc228415 | 552 | if( CurrentChannel < ( CHANNELS - 1 ) ) |
GregCr | 17:a0bbfc228415 | 553 | { |
GregCr | 17:a0bbfc228415 | 554 | CurrentChannel++; |
GregCr | 17:a0bbfc228415 | 555 | } |
GregCr | 17:a0bbfc228415 | 556 | else |
GregCr | 17:a0bbfc228415 | 557 | { |
GregCr | 17:a0bbfc228415 | 558 | CurrentChannel = 0; |
GregCr | 17:a0bbfc228415 | 559 | } |
GregCr | 0:9c0917bfde97 | 560 | Radio.GetPayload( Buffer, &BufferSize, BUFFER_SIZE ); |
GregCr | 0:9c0917bfde97 | 561 | Radio.GetPacketStatus( &PacketStatus ); |
GregCr | 0:9c0917bfde97 | 562 | if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_LORA ) |
GregCr | 0:9c0917bfde97 | 563 | { |
GregCr | 0:9c0917bfde97 | 564 | Eeprom.EepromData.DemoSettings.RssiValue = PacketStatus.LoRa.RssiPkt; |
GregCr | 0:9c0917bfde97 | 565 | Eeprom.EepromData.DemoSettings.SnrValue = PacketStatus.LoRa.SnrPkt; |
GregCr | 0:9c0917bfde97 | 566 | } |
GregCr | 0:9c0917bfde97 | 567 | else if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_FLRC ) |
GregCr | 0:9c0917bfde97 | 568 | { |
GregCr | 0:9c0917bfde97 | 569 | Eeprom.EepromData.DemoSettings.RssiValue = PacketStatus.Flrc.RssiSync; |
GregCr | 0:9c0917bfde97 | 570 | Eeprom.EepromData.DemoSettings.SnrValue = 0; |
GregCr | 0:9c0917bfde97 | 571 | } |
GregCr | 0:9c0917bfde97 | 572 | else if( Eeprom.EepromData.DemoSettings.ModulationType == PACKET_TYPE_GFSK ) |
GregCr | 0:9c0917bfde97 | 573 | { |
GregCr | 0:9c0917bfde97 | 574 | Eeprom.EepromData.DemoSettings.RssiValue = PacketStatus.Gfsk.RssiSync; |
GregCr | 0:9c0917bfde97 | 575 | Eeprom.EepromData.DemoSettings.SnrValue = 0; |
GregCr | 0:9c0917bfde97 | 576 | } |
GregCr | 0:9c0917bfde97 | 577 | DemoInternalState = PER_RX_START; |
GregCr | 0:9c0917bfde97 | 578 | if( ( BufferSize >= PER_SIZE ) && ( strncmp( ( const char* )( Buffer + 4 ), ( const char* )PerMsg, PER_SIZE ) == 0 ) ) |
GregCr | 0:9c0917bfde97 | 579 | { |
GregCr | 0:9c0917bfde97 | 580 | ComputePerPayload( Buffer, BufferSize ); |
GregCr | 0:9c0917bfde97 | 581 | refreshDisplay = 1; |
GregCr | 0:9c0917bfde97 | 582 | } |
GregCr | 0:9c0917bfde97 | 583 | else |
GregCr | 0:9c0917bfde97 | 584 | { |
GregCr | 0:9c0917bfde97 | 585 | Eeprom.EepromData.DemoSettings.RxTimeOutCount++; |
GregCr | 0:9c0917bfde97 | 586 | } |
GregCr | 0:9c0917bfde97 | 587 | break; |
GregCr | 0:9c0917bfde97 | 588 | |
GregCr | 0:9c0917bfde97 | 589 | case APP_RX_ERROR: |
GregCr | 17:a0bbfc228415 | 590 | printf("crc\n\r"); |
GregCr | 17:a0bbfc228415 | 591 | Radio.SetStandby( STDBY_RC ); |
GregCr | 17:a0bbfc228415 | 592 | DemoInternalState = APP_IDLE; |
GregCr | 17:a0bbfc228415 | 593 | break; |
GregCr | 17:a0bbfc228415 | 594 | |
GregCr | 0:9c0917bfde97 | 595 | case APP_RX_TIMEOUT: |
GregCr | 17:a0bbfc228415 | 596 | printf("tmt\n\r"); |
GregCr | 17:a0bbfc228415 | 597 | Radio.SetStandby( STDBY_RC ); |
GregCr | 17:a0bbfc228415 | 598 | if( CurrentChannel < ( CHANNELS - 1 ) ) |
GregCr | 17:a0bbfc228415 | 599 | { |
GregCr | 17:a0bbfc228415 | 600 | CurrentChannel++; |
GregCr | 17:a0bbfc228415 | 601 | } |
GregCr | 17:a0bbfc228415 | 602 | else |
GregCr | 17:a0bbfc228415 | 603 | { |
GregCr | 17:a0bbfc228415 | 604 | CurrentChannel = 0; |
GregCr | 17:a0bbfc228415 | 605 | } |
GregCr | 0:9c0917bfde97 | 606 | Eeprom.EepromData.DemoSettings.RxTimeOutCount++; |
GregCr | 0:9c0917bfde97 | 607 | DemoInternalState = PER_RX_START; |
GregCr | 0:9c0917bfde97 | 608 | refreshDisplay = 1; |
GregCr | 0:9c0917bfde97 | 609 | break; |
GregCr | 0:9c0917bfde97 | 610 | |
GregCr | 0:9c0917bfde97 | 611 | case APP_TX_TIMEOUT: |
GregCr | 17:a0bbfc228415 | 612 | #ifdef PRINT_DEBUG |
GregCr | 0:9c0917bfde97 | 613 | printf( "Failure: timeout in Tx is shorter than the packet time on air\n\r" ); |
GregCr | 17:a0bbfc228415 | 614 | #endif |
GregCr | 0:9c0917bfde97 | 615 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 616 | Eeprom.EepromData.DemoSettings.HoldDemo = true; |
GregCr | 0:9c0917bfde97 | 617 | refreshDisplay = 1; |
GregCr | 0:9c0917bfde97 | 618 | break; |
GregCr | 0:9c0917bfde97 | 619 | |
GregCr | 0:9c0917bfde97 | 620 | case APP_IDLE: // do nothing |
GregCr | 17:a0bbfc228415 | 621 | if( ReceiveNext == true ) |
GregCr | 17:a0bbfc228415 | 622 | { |
GregCr | 17:a0bbfc228415 | 623 | ReceiveNext = false; |
GregCr | 17:a0bbfc228415 | 624 | DemoInternalState = APP_RX_TIMEOUT; |
GregCr | 17:a0bbfc228415 | 625 | } |
GregCr | 0:9c0917bfde97 | 626 | break; |
GregCr | 0:9c0917bfde97 | 627 | |
GregCr | 0:9c0917bfde97 | 628 | default: |
GregCr | 0:9c0917bfde97 | 629 | break; |
GregCr | 0:9c0917bfde97 | 630 | } |
GregCr | 0:9c0917bfde97 | 631 | return refreshDisplay; |
GregCr | 0:9c0917bfde97 | 632 | } |
GregCr | 0:9c0917bfde97 | 633 | |
GregCr | 0:9c0917bfde97 | 634 | void ComputePerPayload( uint8_t *buffer, uint8_t bufferSize ) |
GregCr | 0:9c0917bfde97 | 635 | { |
GregCr | 0:9c0917bfde97 | 636 | uint32_t i = 0; |
GregCr | 0:9c0917bfde97 | 637 | |
GregCr | 0:9c0917bfde97 | 638 | Eeprom.EepromData.DemoSettings.CntPacketRxOK++; |
GregCr | 0:9c0917bfde97 | 639 | PacketRxSequence = ( ( uint32_t )buffer[0] << 24 ) | \ |
GregCr | 0:9c0917bfde97 | 640 | ( ( uint32_t )buffer[1] << 16 ) | \ |
GregCr | 0:9c0917bfde97 | 641 | ( ( uint32_t )buffer[2] << 8 ) | \ |
GregCr | 0:9c0917bfde97 | 642 | buffer[3]; |
GregCr | 0:9c0917bfde97 | 643 | |
GregCr | 0:9c0917bfde97 | 644 | if( ( PacketRxSequence <= PacketRxSequencePrev ) || \ |
GregCr | 17:a0bbfc228415 | 645 | ( PacketRxSequencePrev == 0xFFFFFFFF ) ) |
GregCr | 0:9c0917bfde97 | 646 | { |
GregCr | 0:9c0917bfde97 | 647 | // Sequence went back => resynchronization |
GregCr | 0:9c0917bfde97 | 648 | // Don't count missed packets this time |
GregCr | 0:9c0917bfde97 | 649 | i = 0; |
GregCr | 0:9c0917bfde97 | 650 | } |
GregCr | 0:9c0917bfde97 | 651 | else |
GregCr | 0:9c0917bfde97 | 652 | { |
GregCr | 0:9c0917bfde97 | 653 | // Determine number of missed packets |
GregCr | 0:9c0917bfde97 | 654 | i = PacketRxSequence - PacketRxSequencePrev - 1; |
GregCr | 0:9c0917bfde97 | 655 | } |
GregCr | 0:9c0917bfde97 | 656 | // Be ready for the next |
GregCr | 0:9c0917bfde97 | 657 | PacketRxSequencePrev = PacketRxSequence; |
GregCr | 0:9c0917bfde97 | 658 | // increment 'missed' counter for the RX session |
GregCr | 0:9c0917bfde97 | 659 | Eeprom.EepromData.DemoSettings.CntPacketRxKO += i; |
GregCr | 0:9c0917bfde97 | 660 | Eeprom.EepromData.DemoSettings.RxTimeOutCount = 0; |
GregCr | 0:9c0917bfde97 | 661 | } |
GregCr | 0:9c0917bfde97 | 662 | |
GregCr | 0:9c0917bfde97 | 663 | // ************************ Ping Pong Demo ***************************** |
GregCr | 0:9c0917bfde97 | 664 | // * * |
GregCr | 0:9c0917bfde97 | 665 | // * * |
GregCr | 0:9c0917bfde97 | 666 | // * * |
GregCr | 0:9c0917bfde97 | 667 | // ***************************************************************************** |
GregCr | 0:9c0917bfde97 | 668 | uint8_t RunDemoApplicationPingPong( void ) |
GregCr | 0:9c0917bfde97 | 669 | { |
GregCr | 0:9c0917bfde97 | 670 | uint8_t i = 0; |
GregCr | 0:9c0917bfde97 | 671 | uint8_t refreshDisplay = 0; |
GregCr | 0:9c0917bfde97 | 672 | |
GregCr | 0:9c0917bfde97 | 673 | if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) |
GregCr | 0:9c0917bfde97 | 674 | { |
GregCr | 0:9c0917bfde97 | 675 | return 0; // quit without refresh display |
GregCr | 0:9c0917bfde97 | 676 | } |
GregCr | 0:9c0917bfde97 | 677 | |
GregCr | 0:9c0917bfde97 | 678 | if( DemoRunning == false ) |
GregCr | 0:9c0917bfde97 | 679 | { |
GregCr | 0:9c0917bfde97 | 680 | DemoRunning = true; |
GregCr | 0:9c0917bfde97 | 681 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 682 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 683 | SetAntennaSwitch( ); |
GregCr | 17:a0bbfc228415 | 684 | ReceiveNext = false; |
GregCr | 17:a0bbfc228415 | 685 | SendNext = false; |
GregCr | 0:9c0917bfde97 | 686 | Eeprom.EepromData.DemoSettings.CntPacketTx = 0; |
GregCr | 0:9c0917bfde97 | 687 | Eeprom.EepromData.DemoSettings.CntPacketRxOK = 0; |
GregCr | 0:9c0917bfde97 | 688 | Eeprom.EepromData.DemoSettings.CntPacketRxOKSlave = 0; |
GregCr | 0:9c0917bfde97 | 689 | Eeprom.EepromData.DemoSettings.CntPacketRxKO = 0; |
GregCr | 0:9c0917bfde97 | 690 | Eeprom.EepromData.DemoSettings.CntPacketRxKOSlave = 0; |
GregCr | 0:9c0917bfde97 | 691 | Eeprom.EepromData.DemoSettings.RxTimeOutCount = 0; |
GregCr | 0:9c0917bfde97 | 692 | |
GregCr | 0:9c0917bfde97 | 693 | InitializeDemoParameters( Eeprom.EepromData.DemoSettings.ModulationType ); |
GregCr | 0:9c0917bfde97 | 694 | |
GregCr | 17:a0bbfc228415 | 695 | Eeprom.EepromData.DemoSettings.TimeOnAir = GetTimeOnAir( Eeprom.EepromData.DemoSettings.ModulationType ); |
GregCr | 0:9c0917bfde97 | 696 | |
GregCr | 17:a0bbfc228415 | 697 | #ifdef PRINT_DEBUG |
GregCr | 0:9c0917bfde97 | 698 | printf( "Start RunDemoApplicationPingPong.\n\r" ); |
GregCr | 17:a0bbfc228415 | 699 | #endif |
GregCr | 17:a0bbfc228415 | 700 | |
GregCr | 0:9c0917bfde97 | 701 | if( Eeprom.EepromData.DemoSettings.Entity == MASTER ) |
GregCr | 0:9c0917bfde97 | 702 | { |
GregCr | 0:9c0917bfde97 | 703 | DemoInternalState = SEND_PING_MSG; |
GregCr | 17:a0bbfc228415 | 704 | SendNextPacket.attach_us( &SendNextPacketEvent, ( ( uint32_t )( ( Eeprom.EepromData.DemoSettings.TimeOnAir * 2 ) + RX_TX_INTER_PACKET_DELAY * 2 ) * 1000 ) ); |
GregCr | 0:9c0917bfde97 | 705 | } |
GregCr | 0:9c0917bfde97 | 706 | else |
GregCr | 0:9c0917bfde97 | 707 | { |
GregCr | 0:9c0917bfde97 | 708 | IrqMask = IRQ_RX_DONE | IRQ_CRC_ERROR | IRQ_RX_TX_TIMEOUT; |
GregCr | 0:9c0917bfde97 | 709 | Radio.SetDioIrqParams( IrqMask, IrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
GregCr | 0:9c0917bfde97 | 710 | // Rx Single without timeout for the start |
GregCr | 0:9c0917bfde97 | 711 | RX_LED = !RX_LED; |
GregCr | 0:9c0917bfde97 | 712 | Radio.SetRx( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, 0x0000 } ); |
GregCr | 0:9c0917bfde97 | 713 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 714 | } |
GregCr | 0:9c0917bfde97 | 715 | } |
GregCr | 0:9c0917bfde97 | 716 | |
mverdy | 14:ebd89dacc807 | 717 | Radio.ProcessIrqs( ); |
mverdy | 14:ebd89dacc807 | 718 | |
GregCr | 0:9c0917bfde97 | 719 | if( Eeprom.EepromData.DemoSettings.Entity == MASTER ) |
GregCr | 0:9c0917bfde97 | 720 | { |
GregCr | 0:9c0917bfde97 | 721 | switch( DemoInternalState ) |
GregCr | 0:9c0917bfde97 | 722 | { |
GregCr | 0:9c0917bfde97 | 723 | case SEND_PING_MSG: |
GregCr | 0:9c0917bfde97 | 724 | if( ( Eeprom.EepromData.DemoSettings.MaxNumPacket != 0 ) \ |
GregCr | 0:9c0917bfde97 | 725 | && ( Eeprom.EepromData.DemoSettings.CntPacketTx >= Eeprom.EepromData.DemoSettings.MaxNumPacket ) ) |
GregCr | 0:9c0917bfde97 | 726 | { |
GregCr | 0:9c0917bfde97 | 727 | SendNextPacket.detach( ); |
GregCr | 17:a0bbfc228415 | 728 | ReceiveNextPacket.detach( ); |
GregCr | 17:a0bbfc228415 | 729 | ReceiveNext = false; |
GregCr | 0:9c0917bfde97 | 730 | SendNext = false; |
GregCr | 0:9c0917bfde97 | 731 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 732 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 733 | DemoInternalState = APP_IDLE; |
GregCr | 17:a0bbfc228415 | 734 | |
GregCr | 0:9c0917bfde97 | 735 | Eeprom.EepromData.DemoSettings.HoldDemo = true; |
GregCr | 0:9c0917bfde97 | 736 | refreshDisplay = 1; |
GregCr | 0:9c0917bfde97 | 737 | } |
GregCr | 0:9c0917bfde97 | 738 | else |
GregCr | 0:9c0917bfde97 | 739 | { |
GregCr | 0:9c0917bfde97 | 740 | if( SendNext == true ) |
GregCr | 0:9c0917bfde97 | 741 | { |
GregCr | 0:9c0917bfde97 | 742 | SendNext = false; |
GregCr | 0:9c0917bfde97 | 743 | |
GregCr | 0:9c0917bfde97 | 744 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 745 | Eeprom.EepromData.DemoSettings.CntPacketTx++; |
GregCr | 0:9c0917bfde97 | 746 | // Send the next PING frame |
GregCr | 0:9c0917bfde97 | 747 | Buffer[0] = ( Eeprom.EepromData.DemoSettings.CntPacketTx >> 24 ) & 0xFF; |
GregCr | 0:9c0917bfde97 | 748 | Buffer[1] = ( Eeprom.EepromData.DemoSettings.CntPacketTx >> 16 ) & 0xFF; |
GregCr | 0:9c0917bfde97 | 749 | Buffer[2] = ( Eeprom.EepromData.DemoSettings.CntPacketTx >> 8 ) & 0xFF; |
GregCr | 0:9c0917bfde97 | 750 | Buffer[3] = ( Eeprom.EepromData.DemoSettings.CntPacketTx & 0xFF ); |
GregCr | 0:9c0917bfde97 | 751 | Buffer[4] = PingMsg[0]; |
GregCr | 0:9c0917bfde97 | 752 | Buffer[5] = PingMsg[1]; |
GregCr | 0:9c0917bfde97 | 753 | Buffer[6] = PingMsg[2]; |
GregCr | 0:9c0917bfde97 | 754 | Buffer[7] = PingMsg[3]; |
GregCr | 0:9c0917bfde97 | 755 | for( i = 8; i < Eeprom.EepromData.DemoSettings.PayloadLength; i++ ) |
GregCr | 0:9c0917bfde97 | 756 | { |
GregCr | 0:9c0917bfde97 | 757 | Buffer[i] = i; |
GregCr | 0:9c0917bfde97 | 758 | } |
GregCr | 0:9c0917bfde97 | 759 | TX_LED = !TX_LED; |
GregCr | 0:9c0917bfde97 | 760 | IrqMask = IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT; |
GregCr | 0:9c0917bfde97 | 761 | Radio.SetDioIrqParams( IrqMask, IrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
GregCr | 0:9c0917bfde97 | 762 | Radio.SendPayload( Buffer, Eeprom.EepromData.DemoSettings.PayloadLength, \ |
GregCr | 17:a0bbfc228415 | 763 | ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, \ |
GregCr | 17:a0bbfc228415 | 764 | Eeprom.EepromData.DemoSettings.TimeOnAir + RX_TX_TRANSITION_WAIT } ); |
GregCr | 0:9c0917bfde97 | 765 | } |
GregCr | 0:9c0917bfde97 | 766 | } |
GregCr | 0:9c0917bfde97 | 767 | break; |
GregCr | 0:9c0917bfde97 | 768 | |
GregCr | 0:9c0917bfde97 | 769 | case APP_TX: |
GregCr | 17:a0bbfc228415 | 770 | DemoInternalState = SEND_PING_MSG; |
GregCr | 0:9c0917bfde97 | 771 | TX_LED = !TX_LED; |
GregCr | 0:9c0917bfde97 | 772 | RX_LED = !RX_LED; |
GregCr | 0:9c0917bfde97 | 773 | IrqMask = IRQ_RX_DONE | IRQ_CRC_ERROR | IRQ_RX_TX_TIMEOUT; |
GregCr | 0:9c0917bfde97 | 774 | Radio.SetDioIrqParams( IrqMask, IrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
GregCr | 17:a0bbfc228415 | 775 | Radio.SetRx( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, Eeprom.EepromData.DemoSettings.TimeOnAir + RX_TX_TRANSITION_WAIT } ); |
GregCr | 0:9c0917bfde97 | 776 | break; |
GregCr | 0:9c0917bfde97 | 777 | |
GregCr | 0:9c0917bfde97 | 778 | case APP_RX: |
GregCr | 0:9c0917bfde97 | 779 | RX_LED = !RX_LED; |
GregCr | 0:9c0917bfde97 | 780 | Radio.GetPayload( Buffer, &BufferSize, BUFFER_SIZE ); |
GregCr | 0:9c0917bfde97 | 781 | Radio.GetPacketStatus( &PacketStatus ); |
GregCr | 0:9c0917bfde97 | 782 | if( Eeprom.EepromData.ModulationParams.PacketType == PACKET_TYPE_LORA ) |
GregCr | 0:9c0917bfde97 | 783 | { |
GregCr | 0:9c0917bfde97 | 784 | Eeprom.EepromData.DemoSettings.RssiValue = PacketStatus.LoRa.RssiPkt; |
GregCr | 0:9c0917bfde97 | 785 | Eeprom.EepromData.DemoSettings.SnrValue = PacketStatus.LoRa.SnrPkt; |
GregCr | 0:9c0917bfde97 | 786 | } |
GregCr | 0:9c0917bfde97 | 787 | else if( Eeprom.EepromData.ModulationParams.PacketType == PACKET_TYPE_FLRC ) |
GregCr | 0:9c0917bfde97 | 788 | { |
GregCr | 0:9c0917bfde97 | 789 | Eeprom.EepromData.DemoSettings.RssiValue = PacketStatus.Flrc.RssiSync; |
GregCr | 0:9c0917bfde97 | 790 | Eeprom.EepromData.DemoSettings.SnrValue = 0; |
GregCr | 0:9c0917bfde97 | 791 | } |
GregCr | 0:9c0917bfde97 | 792 | else if( Eeprom.EepromData.ModulationParams.PacketType == PACKET_TYPE_GFSK ) |
GregCr | 0:9c0917bfde97 | 793 | { |
GregCr | 0:9c0917bfde97 | 794 | Eeprom.EepromData.DemoSettings.RssiValue = PacketStatus.Gfsk.RssiSync; |
GregCr | 0:9c0917bfde97 | 795 | Eeprom.EepromData.DemoSettings.SnrValue = 0; |
GregCr | 0:9c0917bfde97 | 796 | } |
GregCr | 0:9c0917bfde97 | 797 | if( ( BufferSize >= PINGPONG_SIZE ) && ( strncmp( ( const char* )( Buffer + 8 ), ( const char* )PongMsg, PINGPONG_SIZE ) == 0 ) ) |
GregCr | 0:9c0917bfde97 | 798 | { |
GregCr | 0:9c0917bfde97 | 799 | ComputePingPongPayload( Buffer, BufferSize ); |
GregCr | 0:9c0917bfde97 | 800 | } |
GregCr | 0:9c0917bfde97 | 801 | else |
GregCr | 0:9c0917bfde97 | 802 | { |
GregCr | 0:9c0917bfde97 | 803 | Eeprom.EepromData.DemoSettings.CntPacketRxKO++; |
GregCr | 0:9c0917bfde97 | 804 | } |
GregCr | 0:9c0917bfde97 | 805 | DemoInternalState = SEND_PING_MSG; |
GregCr | 0:9c0917bfde97 | 806 | refreshDisplay = 1; |
GregCr | 0:9c0917bfde97 | 807 | break; |
GregCr | 0:9c0917bfde97 | 808 | |
GregCr | 0:9c0917bfde97 | 809 | case APP_RX_TIMEOUT: |
GregCr | 0:9c0917bfde97 | 810 | case APP_RX_ERROR: |
GregCr | 17:a0bbfc228415 | 811 | Radio.SetStandby( STDBY_RC ); |
GregCr | 0:9c0917bfde97 | 812 | RX_LED = !RX_LED; |
GregCr | 0:9c0917bfde97 | 813 | Eeprom.EepromData.DemoSettings.CntPacketRxKO++; |
GregCr | 0:9c0917bfde97 | 814 | DemoInternalState = SEND_PING_MSG; |
GregCr | 0:9c0917bfde97 | 815 | refreshDisplay = 1; |
GregCr | 0:9c0917bfde97 | 816 | break; |
GregCr | 0:9c0917bfde97 | 817 | |
GregCr | 0:9c0917bfde97 | 818 | case APP_TX_TIMEOUT: |
GregCr | 17:a0bbfc228415 | 819 | #ifdef PRINT_DEBUG |
GregCr | 0:9c0917bfde97 | 820 | printf( "Failure: timeout in Tx is shorter than the packet time on air\n\r" ); |
GregCr | 17:a0bbfc228415 | 821 | #endif |
GregCr | 0:9c0917bfde97 | 822 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 823 | Eeprom.EepromData.DemoSettings.HoldDemo = true; |
GregCr | 0:9c0917bfde97 | 824 | refreshDisplay = 1; |
GregCr | 0:9c0917bfde97 | 825 | break; |
GregCr | 0:9c0917bfde97 | 826 | |
GregCr | 0:9c0917bfde97 | 827 | case APP_IDLE: // do nothing |
GregCr | 0:9c0917bfde97 | 828 | break; |
GregCr | 0:9c0917bfde97 | 829 | |
GregCr | 0:9c0917bfde97 | 830 | default: |
GregCr | 0:9c0917bfde97 | 831 | break; |
GregCr | 0:9c0917bfde97 | 832 | } |
GregCr | 0:9c0917bfde97 | 833 | } |
GregCr | 0:9c0917bfde97 | 834 | else // SLAVE |
GregCr | 0:9c0917bfde97 | 835 | { |
GregCr | 0:9c0917bfde97 | 836 | switch( DemoInternalState ) |
GregCr | 0:9c0917bfde97 | 837 | { |
GregCr | 0:9c0917bfde97 | 838 | case SEND_PONG_MSG: |
GregCr | 17:a0bbfc228415 | 839 | wait_ms( 2 ); |
GregCr | 0:9c0917bfde97 | 840 | |
GregCr | 0:9c0917bfde97 | 841 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 842 | // Send the next PING frame |
GregCr | 0:9c0917bfde97 | 843 | Buffer[0] = ( Eeprom.EepromData.DemoSettings.CntPacketTx >> 24 ) & 0xFF; |
GregCr | 0:9c0917bfde97 | 844 | Buffer[1] = ( Eeprom.EepromData.DemoSettings.CntPacketTx >> 16 ) & 0xFF; |
GregCr | 0:9c0917bfde97 | 845 | Buffer[2] = ( Eeprom.EepromData.DemoSettings.CntPacketTx >> 8 ) & 0xFF; |
GregCr | 0:9c0917bfde97 | 846 | Buffer[3] = ( Eeprom.EepromData.DemoSettings.CntPacketTx & 0xFF ); |
GregCr | 0:9c0917bfde97 | 847 | Buffer[4] = ( ( Eeprom.EepromData.DemoSettings.CntPacketRxKO + \ |
GregCr | 0:9c0917bfde97 | 848 | Eeprom.EepromData.DemoSettings.RxTimeOutCount ) >> 24 ) & 0xFF; |
GregCr | 0:9c0917bfde97 | 849 | Buffer[5] = ( ( Eeprom.EepromData.DemoSettings.CntPacketRxKO + \ |
GregCr | 0:9c0917bfde97 | 850 | Eeprom.EepromData.DemoSettings.RxTimeOutCount ) >> 16 ) & 0xFF; |
GregCr | 0:9c0917bfde97 | 851 | Buffer[6] = ( ( Eeprom.EepromData.DemoSettings.CntPacketRxKO + \ |
GregCr | 0:9c0917bfde97 | 852 | Eeprom.EepromData.DemoSettings.RxTimeOutCount ) >> 8 ) & 0xFF; |
GregCr | 0:9c0917bfde97 | 853 | Buffer[7] = ( ( Eeprom.EepromData.DemoSettings.CntPacketRxKO + \ |
GregCr | 0:9c0917bfde97 | 854 | Eeprom.EepromData.DemoSettings.RxTimeOutCount ) & 0xFF ); |
GregCr | 0:9c0917bfde97 | 855 | Buffer[8] = PongMsg[0]; |
GregCr | 0:9c0917bfde97 | 856 | Buffer[9] = PongMsg[1]; |
GregCr | 0:9c0917bfde97 | 857 | Buffer[10] = PongMsg[2]; |
GregCr | 0:9c0917bfde97 | 858 | Buffer[11] = PongMsg[3]; |
GregCr | 0:9c0917bfde97 | 859 | for( i = 12; i < Eeprom.EepromData.DemoSettings.PayloadLength; i++ ) |
GregCr | 0:9c0917bfde97 | 860 | { |
GregCr | 0:9c0917bfde97 | 861 | Buffer[i] = i; |
GregCr | 0:9c0917bfde97 | 862 | } |
GregCr | 0:9c0917bfde97 | 863 | TX_LED = !TX_LED; |
GregCr | 0:9c0917bfde97 | 864 | IrqMask = IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT; |
GregCr | 0:9c0917bfde97 | 865 | Radio.SetDioIrqParams( IrqMask, IrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
GregCr | 0:9c0917bfde97 | 866 | Radio.SendPayload( Buffer, Eeprom.EepromData.DemoSettings.PayloadLength, \ |
GregCr | 0:9c0917bfde97 | 867 | ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, \ |
GregCr | 17:a0bbfc228415 | 868 | Eeprom.EepromData.DemoSettings.TimeOnAir + RX_TX_TRANSITION_WAIT } ); |
GregCr | 0:9c0917bfde97 | 869 | break; |
GregCr | 0:9c0917bfde97 | 870 | |
GregCr | 0:9c0917bfde97 | 871 | case APP_TX: |
GregCr | 0:9c0917bfde97 | 872 | if( ( Eeprom.EepromData.DemoSettings.MaxNumPacket != 0 ) \ |
GregCr | 0:9c0917bfde97 | 873 | && ( ( Eeprom.EepromData.DemoSettings.CntPacketRxOK + Eeprom.EepromData.DemoSettings.CntPacketRxKO + \ |
GregCr | 0:9c0917bfde97 | 874 | Eeprom.EepromData.DemoSettings.RxTimeOutCount ) >= Eeprom.EepromData.DemoSettings.MaxNumPacket ) ) |
GregCr | 0:9c0917bfde97 | 875 | { |
GregCr | 0:9c0917bfde97 | 876 | SendNextPacket.detach( ); |
GregCr | 0:9c0917bfde97 | 877 | SendNext = false; |
GregCr | 0:9c0917bfde97 | 878 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 879 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 880 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 881 | Radio.SetStandby( STDBY_RC ); |
GregCr | 0:9c0917bfde97 | 882 | Eeprom.EepromData.DemoSettings.HoldDemo = true; |
GregCr | 0:9c0917bfde97 | 883 | refreshDisplay = 1; |
GregCr | 0:9c0917bfde97 | 884 | } |
GregCr | 0:9c0917bfde97 | 885 | else |
GregCr | 0:9c0917bfde97 | 886 | { |
GregCr | 0:9c0917bfde97 | 887 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 888 | TX_LED = !TX_LED; |
GregCr | 0:9c0917bfde97 | 889 | RX_LED = !RX_LED; |
GregCr | 0:9c0917bfde97 | 890 | IrqMask = IRQ_RX_DONE | IRQ_CRC_ERROR | IRQ_RX_TX_TIMEOUT; |
GregCr | 0:9c0917bfde97 | 891 | Radio.SetDioIrqParams( IrqMask, IrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
GregCr | 17:a0bbfc228415 | 892 | Radio.SetRx( ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, 0xFFFF } ); |
GregCr | 0:9c0917bfde97 | 893 | refreshDisplay = 1; |
GregCr | 0:9c0917bfde97 | 894 | } |
GregCr | 0:9c0917bfde97 | 895 | break; |
GregCr | 0:9c0917bfde97 | 896 | |
GregCr | 0:9c0917bfde97 | 897 | case APP_RX: |
GregCr | 0:9c0917bfde97 | 898 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 899 | RX_LED = !RX_LED; |
GregCr | 17:a0bbfc228415 | 900 | |
GregCr | 17:a0bbfc228415 | 901 | Radio.SetStandby( STDBY_RC ); |
GregCr | 17:a0bbfc228415 | 902 | ReceiveNext = false; |
GregCr | 17:a0bbfc228415 | 903 | ReceiveNextPacket.detach( ); |
GregCr | 17:a0bbfc228415 | 904 | ReceiveNextPacket.attach_us( &ReceiveNextPacketEvent, ( ( uint32_t )( ( Eeprom.EepromData.DemoSettings.TimeOnAir << 1 ) + RX_TX_INTER_PACKET_DELAY * 2 + RX_TX_TRANSITION_WAIT ) ) * 1000 ); |
GregCr | 17:a0bbfc228415 | 905 | |
GregCr | 0:9c0917bfde97 | 906 | Radio.GetPayload( Buffer, &BufferSize, BUFFER_SIZE ); |
GregCr | 0:9c0917bfde97 | 907 | Radio.GetPacketStatus( &PacketStatus ); |
GregCr | 0:9c0917bfde97 | 908 | if( Eeprom.EepromData.ModulationParams.PacketType == PACKET_TYPE_LORA ) |
GregCr | 0:9c0917bfde97 | 909 | { |
GregCr | 0:9c0917bfde97 | 910 | Eeprom.EepromData.DemoSettings.RssiValue = PacketStatus.LoRa.RssiPkt; |
GregCr | 0:9c0917bfde97 | 911 | Eeprom.EepromData.DemoSettings.SnrValue = PacketStatus.LoRa.SnrPkt; |
GregCr | 0:9c0917bfde97 | 912 | } |
GregCr | 0:9c0917bfde97 | 913 | else if( Eeprom.EepromData.ModulationParams.PacketType == PACKET_TYPE_FLRC ) |
GregCr | 0:9c0917bfde97 | 914 | { |
GregCr | 0:9c0917bfde97 | 915 | Eeprom.EepromData.DemoSettings.RssiValue = PacketStatus.Flrc.RssiSync; |
GregCr | 0:9c0917bfde97 | 916 | Eeprom.EepromData.DemoSettings.SnrValue = 0; |
GregCr | 0:9c0917bfde97 | 917 | } |
GregCr | 0:9c0917bfde97 | 918 | else if( Eeprom.EepromData.ModulationParams.PacketType == PACKET_TYPE_GFSK ) |
GregCr | 0:9c0917bfde97 | 919 | { |
GregCr | 0:9c0917bfde97 | 920 | Eeprom.EepromData.DemoSettings.RssiValue = PacketStatus.Gfsk.RssiSync; |
GregCr | 0:9c0917bfde97 | 921 | Eeprom.EepromData.DemoSettings.SnrValue = 0; |
GregCr | 0:9c0917bfde97 | 922 | } |
GregCr | 17:a0bbfc228415 | 923 | ComputePingPongPayload( Buffer, BufferSize ); |
GregCr | 17:a0bbfc228415 | 924 | DemoInternalState = SEND_PONG_MSG; |
GregCr | 0:9c0917bfde97 | 925 | break; |
GregCr | 0:9c0917bfde97 | 926 | |
GregCr | 0:9c0917bfde97 | 927 | case APP_RX_TIMEOUT: |
GregCr | 17:a0bbfc228415 | 928 | printf("tmt\n\r"); |
GregCr | 17:a0bbfc228415 | 929 | Radio.SetStandby( STDBY_RC ); |
GregCr | 0:9c0917bfde97 | 930 | Eeprom.EepromData.DemoSettings.RxTimeOutCount++; |
GregCr | 17:a0bbfc228415 | 931 | DemoInternalState = SEND_PONG_MSG; |
GregCr | 0:9c0917bfde97 | 932 | refreshDisplay = 1; |
GregCr | 0:9c0917bfde97 | 933 | break; |
GregCr | 0:9c0917bfde97 | 934 | |
GregCr | 17:a0bbfc228415 | 935 | case APP_RX_ERROR: |
GregCr | 17:a0bbfc228415 | 936 | printf("crc\n\r"); |
GregCr | 17:a0bbfc228415 | 937 | Radio.SetStandby( STDBY_RC ); |
GregCr | 17:a0bbfc228415 | 938 | DemoInternalState = APP_IDLE; |
GregCr | 17:a0bbfc228415 | 939 | break; |
GregCr | 17:a0bbfc228415 | 940 | |
GregCr | 0:9c0917bfde97 | 941 | case APP_TX_TIMEOUT: |
GregCr | 17:a0bbfc228415 | 942 | #ifdef PRINT_DEBUG |
GregCr | 0:9c0917bfde97 | 943 | printf( "Failure: timeout in Tx is shorter than the packet time on air\n\r" ); |
GregCr | 17:a0bbfc228415 | 944 | #endif |
GregCr | 0:9c0917bfde97 | 945 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 946 | Eeprom.EepromData.DemoSettings.HoldDemo = true; |
GregCr | 0:9c0917bfde97 | 947 | refreshDisplay = 1; |
GregCr | 0:9c0917bfde97 | 948 | break; |
GregCr | 0:9c0917bfde97 | 949 | |
GregCr | 0:9c0917bfde97 | 950 | case APP_IDLE: // do nothing |
GregCr | 17:a0bbfc228415 | 951 | if( ReceiveNext == true ) |
GregCr | 17:a0bbfc228415 | 952 | { |
GregCr | 17:a0bbfc228415 | 953 | ReceiveNext = false; |
GregCr | 17:a0bbfc228415 | 954 | DemoInternalState = APP_RX_TIMEOUT; |
GregCr | 17:a0bbfc228415 | 955 | } |
GregCr | 0:9c0917bfde97 | 956 | break; |
GregCr | 0:9c0917bfde97 | 957 | |
GregCr | 0:9c0917bfde97 | 958 | default: |
GregCr | 0:9c0917bfde97 | 959 | break; |
GregCr | 0:9c0917bfde97 | 960 | } |
GregCr | 0:9c0917bfde97 | 961 | } |
GregCr | 0:9c0917bfde97 | 962 | return refreshDisplay; |
GregCr | 0:9c0917bfde97 | 963 | } |
GregCr | 0:9c0917bfde97 | 964 | |
GregCr | 0:9c0917bfde97 | 965 | void ComputePingPongPayload( uint8_t *buffer, uint8_t bufferSize ) |
GregCr | 0:9c0917bfde97 | 966 | { |
GregCr | 0:9c0917bfde97 | 967 | uint32_t i = 0; |
GregCr | 0:9c0917bfde97 | 968 | |
GregCr | 0:9c0917bfde97 | 969 | PacketRxSequence = ( ( uint32_t )buffer[0] << 24 ) | \ |
GregCr | 0:9c0917bfde97 | 970 | ( ( uint32_t )buffer[1] << 16 ) | \ |
GregCr | 0:9c0917bfde97 | 971 | ( ( uint32_t )buffer[2] << 8 ) | \ |
GregCr | 0:9c0917bfde97 | 972 | buffer[3]; |
GregCr | 0:9c0917bfde97 | 973 | |
GregCr | 0:9c0917bfde97 | 974 | if( Eeprom.EepromData.DemoSettings.Entity == MASTER ) |
GregCr | 0:9c0917bfde97 | 975 | { |
GregCr | 0:9c0917bfde97 | 976 | Eeprom.EepromData.DemoSettings.CntPacketRxKOSlave = |
GregCr | 0:9c0917bfde97 | 977 | ( ( uint32_t )buffer[4] << 24 ) | \ |
GregCr | 0:9c0917bfde97 | 978 | ( ( uint32_t )buffer[5] << 16 ) | \ |
GregCr | 0:9c0917bfde97 | 979 | ( ( uint32_t )buffer[6] << 8 ) | \ |
GregCr | 0:9c0917bfde97 | 980 | buffer[7]; |
GregCr | 0:9c0917bfde97 | 981 | if( PacketRxSequence > Eeprom.EepromData.DemoSettings.CntPacketRxKOSlave ) |
GregCr | 0:9c0917bfde97 | 982 | { |
GregCr | 0:9c0917bfde97 | 983 | Eeprom.EepromData.DemoSettings.CntPacketRxOKSlave = PacketRxSequence - \ |
GregCr | 0:9c0917bfde97 | 984 | Eeprom.EepromData.DemoSettings.CntPacketRxKOSlave; |
GregCr | 0:9c0917bfde97 | 985 | } |
GregCr | 0:9c0917bfde97 | 986 | else |
GregCr | 0:9c0917bfde97 | 987 | { |
GregCr | 0:9c0917bfde97 | 988 | Eeprom.EepromData.DemoSettings.CntPacketRxOKSlave = 0; |
GregCr | 0:9c0917bfde97 | 989 | } |
mverdy | 14:ebd89dacc807 | 990 | |
GregCr | 0:9c0917bfde97 | 991 | if( PacketRxSequence == Eeprom.EepromData.DemoSettings.CntPacketTx ) |
GregCr | 0:9c0917bfde97 | 992 | { |
GregCr | 0:9c0917bfde97 | 993 | Eeprom.EepromData.DemoSettings.CntPacketRxOK += 1; |
GregCr | 0:9c0917bfde97 | 994 | } |
GregCr | 0:9c0917bfde97 | 995 | else |
GregCr | 0:9c0917bfde97 | 996 | { |
GregCr | 0:9c0917bfde97 | 997 | Eeprom.EepromData.DemoSettings.CntPacketRxKO += 1; |
GregCr | 0:9c0917bfde97 | 998 | } |
GregCr | 0:9c0917bfde97 | 999 | } |
GregCr | 0:9c0917bfde97 | 1000 | else |
GregCr | 0:9c0917bfde97 | 1001 | { |
GregCr | 0:9c0917bfde97 | 1002 | Eeprom.EepromData.DemoSettings.CntPacketRxOK += 1; |
GregCr | 0:9c0917bfde97 | 1003 | if( ( PacketRxSequence <= PacketRxSequencePrev ) || \ |
GregCr | 0:9c0917bfde97 | 1004 | ( PacketRxSequencePrev == 0 ) ) |
GregCr | 0:9c0917bfde97 | 1005 | { |
GregCr | 0:9c0917bfde97 | 1006 | // Sequence went back => resynchronization |
GregCr | 0:9c0917bfde97 | 1007 | // Don't count missed packets this time |
GregCr | 0:9c0917bfde97 | 1008 | i = 0; |
GregCr | 0:9c0917bfde97 | 1009 | } |
GregCr | 0:9c0917bfde97 | 1010 | else |
GregCr | 0:9c0917bfde97 | 1011 | { |
GregCr | 0:9c0917bfde97 | 1012 | // Determine number of missed packets |
GregCr | 0:9c0917bfde97 | 1013 | i = PacketRxSequence - PacketRxSequencePrev - 1; |
GregCr | 0:9c0917bfde97 | 1014 | } |
GregCr | 0:9c0917bfde97 | 1015 | // Be ready for the next |
GregCr | 0:9c0917bfde97 | 1016 | PacketRxSequencePrev = PacketRxSequence; |
GregCr | 0:9c0917bfde97 | 1017 | Eeprom.EepromData.DemoSettings.CntPacketTx = PacketRxSequence; |
GregCr | 0:9c0917bfde97 | 1018 | // increment 'missed' counter for the RX session |
GregCr | 0:9c0917bfde97 | 1019 | Eeprom.EepromData.DemoSettings.CntPacketRxKO += i; |
GregCr | 0:9c0917bfde97 | 1020 | Eeprom.EepromData.DemoSettings.RxTimeOutCount = 0; |
GregCr | 0:9c0917bfde97 | 1021 | } |
GregCr | 0:9c0917bfde97 | 1022 | } |
GregCr | 0:9c0917bfde97 | 1023 | |
GregCr | 0:9c0917bfde97 | 1024 | // ************************ Ranging Demo ***************************** |
GregCr | 0:9c0917bfde97 | 1025 | // * * |
GregCr | 0:9c0917bfde97 | 1026 | // * * |
GregCr | 0:9c0917bfde97 | 1027 | // * * |
GregCr | 0:9c0917bfde97 | 1028 | // ***************************************************************************** |
GregCr | 0:9c0917bfde97 | 1029 | uint8_t RunDemoApplicationRanging( void ) |
GregCr | 0:9c0917bfde97 | 1030 | { |
GregCr | 0:9c0917bfde97 | 1031 | uint8_t refreshDisplay = 0; |
GregCr | 0:9c0917bfde97 | 1032 | |
GregCr | 0:9c0917bfde97 | 1033 | if( Eeprom.EepromData.DemoSettings.HoldDemo == true ) |
GregCr | 0:9c0917bfde97 | 1034 | { |
GregCr | 0:9c0917bfde97 | 1035 | return 0; // quit without refresh display |
GregCr | 0:9c0917bfde97 | 1036 | } |
GregCr | 0:9c0917bfde97 | 1037 | |
GregCr | 0:9c0917bfde97 | 1038 | if( DemoRunning == false ) |
GregCr | 0:9c0917bfde97 | 1039 | { |
GregCr | 0:9c0917bfde97 | 1040 | DemoRunning = true; |
GregCr | 0:9c0917bfde97 | 1041 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1042 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1043 | ANT_SW = 1; |
GregCr | 0:9c0917bfde97 | 1044 | |
GregCr | 17:a0bbfc228415 | 1045 | #ifdef PRINT_DEBUG |
GregCr | 0:9c0917bfde97 | 1046 | printf( "Start RunDemoApplicationRanging\r\n" ); |
GregCr | 17:a0bbfc228415 | 1047 | #endif |
GregCr | 0:9c0917bfde97 | 1048 | |
GregCr | 0:9c0917bfde97 | 1049 | Eeprom.EepromData.DemoSettings.CntPacketTx = 0; |
GregCr | 0:9c0917bfde97 | 1050 | Eeprom.EepromData.DemoSettings.RngFei = 0.0; |
GregCr | 0:9c0917bfde97 | 1051 | Eeprom.EepromData.DemoSettings.RngStatus = RNG_INIT; |
GregCr | 0:9c0917bfde97 | 1052 | InitializeDemoParameters( Eeprom.EepromData.DemoSettings.ModulationType ); |
GregCr | 0:9c0917bfde97 | 1053 | |
GregCr | 0:9c0917bfde97 | 1054 | if( Eeprom.EepromData.DemoSettings.Entity == MASTER ) |
GregCr | 0:9c0917bfde97 | 1055 | { |
GregCr | 17:a0bbfc228415 | 1056 | Eeprom.EepromData.DemoSettings.TimeOnAir = RX_TX_INTER_PACKET_DELAY; |
GregCr | 18:22796c3be774 | 1057 | Radio.SetDioIrqParams( IRQ_RADIO_ALL /*IRQ_RX_DONE | IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT | IRQ_RANGING_MASTER_RESULT_VALID | IRQ_RANGING_MASTER_ERROR_CODE*/, |
GregCr | 18:22796c3be774 | 1058 | IRQ_RADIO_ALL /*IRQ_RX_DONE | IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT | IRQ_RANGING_MASTER_RESULT_VALID | IRQ_RANGING_MASTER_ERROR_CODE*/, |
GregCr | 0:9c0917bfde97 | 1059 | IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
GregCr | 0:9c0917bfde97 | 1060 | Eeprom.EepromData.DemoSettings.RngDistance = 0.0; |
GregCr | 0:9c0917bfde97 | 1061 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1062 | } |
GregCr | 0:9c0917bfde97 | 1063 | else |
GregCr | 0:9c0917bfde97 | 1064 | { |
GregCr | 0:9c0917bfde97 | 1065 | Radio.SetDioIrqParams( IRQ_RADIO_ALL, IRQ_RADIO_ALL, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
GregCr | 0:9c0917bfde97 | 1066 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1067 | } |
GregCr | 0:9c0917bfde97 | 1068 | } |
GregCr | 0:9c0917bfde97 | 1069 | |
GregCr | 17:a0bbfc228415 | 1070 | Radio.ProcessIrqs( ); |
GregCr | 17:a0bbfc228415 | 1071 | |
GregCr | 0:9c0917bfde97 | 1072 | if( Eeprom.EepromData.DemoSettings.Entity == MASTER ) |
GregCr | 0:9c0917bfde97 | 1073 | { |
GregCr | 0:9c0917bfde97 | 1074 | switch( DemoInternalState ) |
GregCr | 0:9c0917bfde97 | 1075 | { |
GregCr | 0:9c0917bfde97 | 1076 | case APP_RANGING_CONFIG: |
GregCr | 0:9c0917bfde97 | 1077 | if( Eeprom.EepromData.DemoSettings.HoldDemo == false ) |
GregCr | 0:9c0917bfde97 | 1078 | { |
GregCr | 0:9c0917bfde97 | 1079 | Eeprom.EepromData.DemoSettings.RngStatus = RNG_INIT; |
GregCr | 0:9c0917bfde97 | 1080 | Eeprom.EepromData.DemoSettings.CntPacketTx++; |
GregCr | 0:9c0917bfde97 | 1081 | ModulationParams.PacketType = PACKET_TYPE_LORA; |
GregCr | 0:9c0917bfde97 | 1082 | PacketParams.PacketType = PACKET_TYPE_LORA; |
GregCr | 0:9c0917bfde97 | 1083 | memcpy( &( ModulationParams.Params.LoRa.SpreadingFactor ), Eeprom.Buffer + MOD_RNG_SPREADF_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1084 | memcpy( &( ModulationParams.Params.LoRa.Bandwidth ), Eeprom.Buffer + MOD_RNG_BW_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1085 | memcpy( &( ModulationParams.Params.LoRa.CodingRate ), Eeprom.Buffer + MOD_RNG_CODERATE_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1086 | memcpy( &( PacketParams.Params.LoRa.PreambleLength ), Eeprom.Buffer + PAK_RNG_PREAMBLE_LEN_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1087 | memcpy( &( PacketParams.Params.LoRa.HeaderType ), Eeprom.Buffer + PAK_RNG_HEADERTYPE_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1088 | PacketParams.Params.LoRa.PayloadLength = 7; |
GregCr | 8:c0a5f53fe196 | 1089 | memcpy( &( PacketParams.Params.LoRa.Crc ), Eeprom.Buffer + PAK_RNG_CRC_MODE_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1090 | memcpy( &( PacketParams.Params.LoRa.InvertIQ ), Eeprom.Buffer + PAK_RNG_IQ_INV_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1091 | Radio.SetPacketType( ModulationParams.PacketType ); |
GregCr | 0:9c0917bfde97 | 1092 | Radio.SetModulationParams( &ModulationParams ); |
GregCr | 0:9c0917bfde97 | 1093 | Radio.SetPacketParams( &PacketParams ); |
GregCr | 0:9c0917bfde97 | 1094 | Radio.SetRfFrequency( Eeprom.EepromData.DemoSettings.Frequency ); |
GregCr | 0:9c0917bfde97 | 1095 | Eeprom.EepromData.DemoSettings.CntPacketRxOK = 0; |
GregCr | 0:9c0917bfde97 | 1096 | Eeprom.EepromData.DemoSettings.CntPacketRxOKSlave = 0; |
GregCr | 0:9c0917bfde97 | 1097 | MeasuredChannels = 0; |
GregCr | 0:9c0917bfde97 | 1098 | CurrentChannel = 0; |
GregCr | 0:9c0917bfde97 | 1099 | Buffer[0] = ( Eeprom.EepromData.DemoSettings.RngAddress >> 24 ) & 0xFF; |
GregCr | 0:9c0917bfde97 | 1100 | Buffer[1] = ( Eeprom.EepromData.DemoSettings.RngAddress >> 16 ) & 0xFF; |
GregCr | 0:9c0917bfde97 | 1101 | Buffer[2] = ( Eeprom.EepromData.DemoSettings.RngAddress >> 8 ) & 0xFF; |
GregCr | 0:9c0917bfde97 | 1102 | Buffer[3] = ( Eeprom.EepromData.DemoSettings.RngAddress & 0xFF ); |
GregCr | 0:9c0917bfde97 | 1103 | Buffer[4] = CurrentChannel; // set the first channel to use |
GregCr | 0:9c0917bfde97 | 1104 | Buffer[5] = Eeprom.EepromData.DemoSettings.RngAntenna; // set the antenna strategy |
GregCr | 0:9c0917bfde97 | 1105 | Buffer[6] = Eeprom.EepromData.DemoSettings.RngRequestCount; // set the number of hops |
GregCr | 0:9c0917bfde97 | 1106 | TX_LED = 1; |
GregCr | 0:9c0917bfde97 | 1107 | Radio.SendPayload( Buffer, PacketParams.Params.LoRa.PayloadLength, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, RNG_COM_TIMEOUT } ); |
GregCr | 0:9c0917bfde97 | 1108 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 1109 | } |
GregCr | 0:9c0917bfde97 | 1110 | break; |
GregCr | 0:9c0917bfde97 | 1111 | |
GregCr | 0:9c0917bfde97 | 1112 | case APP_RNG: |
GregCr | 0:9c0917bfde97 | 1113 | if( SendNext == true ) |
GregCr | 0:9c0917bfde97 | 1114 | { |
GregCr | 0:9c0917bfde97 | 1115 | SendNext = false; |
GregCr | 0:9c0917bfde97 | 1116 | MeasuredChannels++; |
GregCr | 0:9c0917bfde97 | 1117 | if( MeasuredChannels <= Eeprom.EepromData.DemoSettings.RngRequestCount ) |
GregCr | 0:9c0917bfde97 | 1118 | { |
GregCr | 0:9c0917bfde97 | 1119 | Radio.SetRfFrequency( Channels[CurrentChannel] ); |
GregCr | 0:9c0917bfde97 | 1120 | TX_LED = 1; |
GregCr | 0:9c0917bfde97 | 1121 | switch( Eeprom.EepromData.DemoSettings.RngAntenna ) |
GregCr | 0:9c0917bfde97 | 1122 | { |
GregCr | 0:9c0917bfde97 | 1123 | case DEMO_RNG_ANT_1: |
GregCr | 7:bc2f0fe8056f | 1124 | //ANT_SW = 1; // ANT1 |
GregCr | 7:bc2f0fe8056f | 1125 | Eeprom.EepromData.DemoSettings.AntennaSwitch = 0; |
GregCr | 0:9c0917bfde97 | 1126 | CurrentChannel++; |
GregCr | 0:9c0917bfde97 | 1127 | if( CurrentChannel >= CHANNELS ) |
GregCr | 0:9c0917bfde97 | 1128 | { |
GregCr | 0:9c0917bfde97 | 1129 | CurrentChannel -= CHANNELS; |
GregCr | 0:9c0917bfde97 | 1130 | } |
GregCr | 0:9c0917bfde97 | 1131 | break; |
GregCr | 0:9c0917bfde97 | 1132 | |
GregCr | 0:9c0917bfde97 | 1133 | case DEMO_RNG_ANT_2: |
GregCr | 7:bc2f0fe8056f | 1134 | //ANT_SW = 0; // ANT2 |
GregCr | 7:bc2f0fe8056f | 1135 | Eeprom.EepromData.DemoSettings.AntennaSwitch = 1; |
GregCr | 0:9c0917bfde97 | 1136 | CurrentChannel++; |
GregCr | 0:9c0917bfde97 | 1137 | if( CurrentChannel >= CHANNELS ) |
GregCr | 0:9c0917bfde97 | 1138 | { |
GregCr | 0:9c0917bfde97 | 1139 | CurrentChannel -= CHANNELS; |
GregCr | 0:9c0917bfde97 | 1140 | } |
GregCr | 0:9c0917bfde97 | 1141 | break; |
GregCr | 0:9c0917bfde97 | 1142 | |
GregCr | 0:9c0917bfde97 | 1143 | case DEMO_RNG_ANT_BOTH: |
GregCr | 0:9c0917bfde97 | 1144 | if( ANT_SW == 1 ) |
GregCr | 0:9c0917bfde97 | 1145 | { |
GregCr | 7:bc2f0fe8056f | 1146 | //ANT_SW = 0; |
GregCr | 7:bc2f0fe8056f | 1147 | Eeprom.EepromData.DemoSettings.AntennaSwitch = 1; |
GregCr | 0:9c0917bfde97 | 1148 | } |
GregCr | 0:9c0917bfde97 | 1149 | else |
GregCr | 0:9c0917bfde97 | 1150 | { |
GregCr | 7:bc2f0fe8056f | 1151 | //ANT_SW = 1; |
GregCr | 7:bc2f0fe8056f | 1152 | Eeprom.EepromData.DemoSettings.AntennaSwitch = 0; |
GregCr | 0:9c0917bfde97 | 1153 | CurrentChannel++; |
GregCr | 0:9c0917bfde97 | 1154 | if( CurrentChannel >= CHANNELS ) |
GregCr | 0:9c0917bfde97 | 1155 | { |
GregCr | 0:9c0917bfde97 | 1156 | CurrentChannel -= CHANNELS; |
GregCr | 0:9c0917bfde97 | 1157 | } |
GregCr | 0:9c0917bfde97 | 1158 | } |
GregCr | 0:9c0917bfde97 | 1159 | break; |
GregCr | 0:9c0917bfde97 | 1160 | } |
GregCr | 0:9c0917bfde97 | 1161 | SetAntennaSwitch( ); |
GregCr | 0:9c0917bfde97 | 1162 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 1163 | Radio.SetTx( ( TickTime_t ){ RADIO_TICK_SIZE_1000_US, 0xFFFF } ); |
GregCr | 0:9c0917bfde97 | 1164 | } |
GregCr | 0:9c0917bfde97 | 1165 | else |
GregCr | 0:9c0917bfde97 | 1166 | { |
GregCr | 0:9c0917bfde97 | 1167 | Eeprom.EepromData.DemoSettings.CntPacketRxOKSlave = CheckDistance( ); |
GregCr | 0:9c0917bfde97 | 1168 | refreshDisplay = 1; |
GregCr | 0:9c0917bfde97 | 1169 | SendNextPacket.detach( ); |
GregCr | 0:9c0917bfde97 | 1170 | Eeprom.EepromData.DemoSettings.HoldDemo = true; |
GregCr | 0:9c0917bfde97 | 1171 | SendNext = false; |
GregCr | 0:9c0917bfde97 | 1172 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1173 | } |
GregCr | 0:9c0917bfde97 | 1174 | } |
GregCr | 0:9c0917bfde97 | 1175 | break; |
GregCr | 0:9c0917bfde97 | 1176 | |
GregCr | 0:9c0917bfde97 | 1177 | case APP_RANGING_DONE: |
GregCr | 0:9c0917bfde97 | 1178 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1179 | RawRngResults[RngResultIndex++] = Radio.GetRangingResult( RANGING_RESULT_RAW ); |
GregCr | 0:9c0917bfde97 | 1180 | Eeprom.EepromData.DemoSettings.CntPacketRxOK++; |
GregCr | 0:9c0917bfde97 | 1181 | DemoInternalState = APP_RNG; |
GregCr | 0:9c0917bfde97 | 1182 | break; |
GregCr | 0:9c0917bfde97 | 1183 | |
GregCr | 0:9c0917bfde97 | 1184 | case APP_RANGING_TIMEOUT: |
GregCr | 0:9c0917bfde97 | 1185 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1186 | DemoInternalState = APP_RNG; |
GregCr | 0:9c0917bfde97 | 1187 | break; |
GregCr | 0:9c0917bfde97 | 1188 | |
GregCr | 0:9c0917bfde97 | 1189 | case APP_RX: |
GregCr | 0:9c0917bfde97 | 1190 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1191 | if( Eeprom.EepromData.DemoSettings.RngStatus == RNG_INIT ) |
GregCr | 0:9c0917bfde97 | 1192 | { |
GregCr | 0:9c0917bfde97 | 1193 | Radio.GetPayload( Buffer, &BufferSize, BUFFER_SIZE ); |
GregCr | 0:9c0917bfde97 | 1194 | if( BufferSize > 0 ) |
GregCr | 0:9c0917bfde97 | 1195 | { |
GregCr | 0:9c0917bfde97 | 1196 | Eeprom.EepromData.DemoSettings.RxTimeOutCount = 0; |
GregCr | 0:9c0917bfde97 | 1197 | Eeprom.EepromData.DemoSettings.RngStatus = RNG_PROCESS; |
GregCr | 0:9c0917bfde97 | 1198 | Eeprom.EepromData.DemoSettings.RngFei = ( double )( ( ( int32_t )Buffer[4] << 24 ) | \ |
GregCr | 0:9c0917bfde97 | 1199 | ( ( int32_t )Buffer[5] << 16 ) | \ |
GregCr | 0:9c0917bfde97 | 1200 | ( ( int32_t )Buffer[6] << 8 ) | \ |
GregCr | 0:9c0917bfde97 | 1201 | Buffer[7] ); |
GregCr | 0:9c0917bfde97 | 1202 | Eeprom.EepromData.DemoSettings.RssiValue = Buffer[8]; // for ranging post-traitment (since V3 only) |
GregCr | 0:9c0917bfde97 | 1203 | ModulationParams.PacketType = PACKET_TYPE_RANGING; |
GregCr | 0:9c0917bfde97 | 1204 | PacketParams.PacketType = PACKET_TYPE_RANGING; |
GregCr | 0:9c0917bfde97 | 1205 | |
GregCr | 0:9c0917bfde97 | 1206 | memcpy( &( ModulationParams.Params.LoRa.SpreadingFactor ), Eeprom.Buffer + MOD_RNG_SPREADF_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1207 | memcpy( &( ModulationParams.Params.LoRa.Bandwidth ), Eeprom.Buffer + MOD_RNG_BW_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1208 | memcpy( &( ModulationParams.Params.LoRa.CodingRate ), Eeprom.Buffer + MOD_RNG_CODERATE_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1209 | memcpy( &( PacketParams.Params.LoRa.PreambleLength ), Eeprom.Buffer + PAK_RNG_PREAMBLE_LEN_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1210 | memcpy( &( PacketParams.Params.LoRa.HeaderType ), Eeprom.Buffer + PAK_RNG_HEADERTYPE_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1211 | PacketParams.Params.LoRa.PayloadLength = 10; |
GregCr | 8:c0a5f53fe196 | 1212 | memcpy( &( PacketParams.Params.LoRa.Crc ), Eeprom.Buffer + PAK_RNG_CRC_MODE_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1213 | memcpy( &( PacketParams.Params.LoRa.InvertIQ ), Eeprom.Buffer + PAK_RNG_IQ_INV_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1214 | |
GregCr | 0:9c0917bfde97 | 1215 | Radio.SetPacketType( ModulationParams.PacketType ); |
GregCr | 0:9c0917bfde97 | 1216 | Radio.SetModulationParams( &ModulationParams ); |
GregCr | 0:9c0917bfde97 | 1217 | Radio.SetPacketParams( &PacketParams ); |
GregCr | 0:9c0917bfde97 | 1218 | Radio.SetRangingRequestAddress( Eeprom.EepromData.DemoSettings.RngAddress ); |
GregCr | 0:9c0917bfde97 | 1219 | Radio.SetRangingCalibration( Eeprom.EepromData.DemoSettings.RngCalib ); |
GregCr | 0:9c0917bfde97 | 1220 | Radio.SetTxParams( Eeprom.EepromData.DemoSettings.TxPower, RADIO_RAMP_20_US ); |
GregCr | 0:9c0917bfde97 | 1221 | |
GregCr | 0:9c0917bfde97 | 1222 | MeasuredChannels = 0; |
GregCr | 0:9c0917bfde97 | 1223 | RngResultIndex = 0; |
GregCr | 0:9c0917bfde97 | 1224 | SendNextPacket.attach_us( &SendNextPacketEvent, Eeprom.EepromData.DemoSettings.RngReqDelay * 1000 ); |
GregCr | 0:9c0917bfde97 | 1225 | DemoInternalState = APP_RNG; |
GregCr | 0:9c0917bfde97 | 1226 | } |
GregCr | 0:9c0917bfde97 | 1227 | else |
GregCr | 0:9c0917bfde97 | 1228 | { |
GregCr | 0:9c0917bfde97 | 1229 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1230 | } |
GregCr | 0:9c0917bfde97 | 1231 | } |
GregCr | 0:9c0917bfde97 | 1232 | else |
GregCr | 0:9c0917bfde97 | 1233 | { |
GregCr | 0:9c0917bfde97 | 1234 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1235 | } |
GregCr | 0:9c0917bfde97 | 1236 | break; |
GregCr | 0:9c0917bfde97 | 1237 | |
GregCr | 0:9c0917bfde97 | 1238 | case APP_TX: |
GregCr | 0:9c0917bfde97 | 1239 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1240 | if( Eeprom.EepromData.DemoSettings.RngStatus == RNG_INIT ) |
GregCr | 0:9c0917bfde97 | 1241 | { |
GregCr | 0:9c0917bfde97 | 1242 | RX_LED = 1; |
GregCr | 0:9c0917bfde97 | 1243 | Radio.SetRx( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RNG_COM_TIMEOUT } ); |
GregCr | 0:9c0917bfde97 | 1244 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 1245 | } |
GregCr | 0:9c0917bfde97 | 1246 | else |
GregCr | 0:9c0917bfde97 | 1247 | { |
GregCr | 0:9c0917bfde97 | 1248 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1249 | } |
GregCr | 0:9c0917bfde97 | 1250 | break; |
GregCr | 0:9c0917bfde97 | 1251 | |
GregCr | 0:9c0917bfde97 | 1252 | case APP_RX_TIMEOUT: |
GregCr | 0:9c0917bfde97 | 1253 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1254 | Eeprom.EepromData.DemoSettings.RngStatus = RNG_TIMEOUT; |
GregCr | 0:9c0917bfde97 | 1255 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1256 | Eeprom.EepromData.DemoSettings.HoldDemo = true; |
GregCr | 0:9c0917bfde97 | 1257 | refreshDisplay = 1; // display error on token color (RNG_TIMEOUT) |
GregCr | 0:9c0917bfde97 | 1258 | break; |
GregCr | 0:9c0917bfde97 | 1259 | |
GregCr | 0:9c0917bfde97 | 1260 | case APP_RX_ERROR: |
GregCr | 0:9c0917bfde97 | 1261 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1262 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1263 | Eeprom.EepromData.DemoSettings.HoldDemo = true; |
GregCr | 8:c0a5f53fe196 | 1264 | refreshDisplay = 1; // display error on token color (RNG_TIMEOUT) |
GregCr | 0:9c0917bfde97 | 1265 | break; |
GregCr | 0:9c0917bfde97 | 1266 | |
GregCr | 0:9c0917bfde97 | 1267 | case APP_TX_TIMEOUT: |
GregCr | 0:9c0917bfde97 | 1268 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1269 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1270 | Eeprom.EepromData.DemoSettings.HoldDemo = true; |
GregCr | 8:c0a5f53fe196 | 1271 | refreshDisplay = 1; // display error on token color (RNG_TIMEOUT) |
GregCr | 0:9c0917bfde97 | 1272 | break; |
GregCr | 0:9c0917bfde97 | 1273 | |
GregCr | 0:9c0917bfde97 | 1274 | case APP_IDLE: // do nothing |
GregCr | 0:9c0917bfde97 | 1275 | break; |
GregCr | 0:9c0917bfde97 | 1276 | |
GregCr | 0:9c0917bfde97 | 1277 | default: |
GregCr | 0:9c0917bfde97 | 1278 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1279 | Eeprom.EepromData.DemoSettings.HoldDemo = true; |
GregCr | 0:9c0917bfde97 | 1280 | break; |
GregCr | 0:9c0917bfde97 | 1281 | } |
GregCr | 0:9c0917bfde97 | 1282 | } |
GregCr | 0:9c0917bfde97 | 1283 | else // Slave |
GregCr | 0:9c0917bfde97 | 1284 | { |
GregCr | 0:9c0917bfde97 | 1285 | switch( DemoInternalState ) |
GregCr | 0:9c0917bfde97 | 1286 | { |
GregCr | 0:9c0917bfde97 | 1287 | case APP_RANGING_CONFIG: |
GregCr | 0:9c0917bfde97 | 1288 | Eeprom.EepromData.DemoSettings.RngStatus = RNG_INIT; |
GregCr | 0:9c0917bfde97 | 1289 | ModulationParams.PacketType = PACKET_TYPE_LORA; |
GregCr | 0:9c0917bfde97 | 1290 | PacketParams.PacketType = PACKET_TYPE_LORA; |
GregCr | 0:9c0917bfde97 | 1291 | memcpy( &( ModulationParams.Params.LoRa.SpreadingFactor ), Eeprom.Buffer + MOD_RNG_SPREADF_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1292 | memcpy( &( ModulationParams.Params.LoRa.Bandwidth ), Eeprom.Buffer + MOD_RNG_BW_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1293 | memcpy( &( ModulationParams.Params.LoRa.CodingRate ), Eeprom.Buffer + MOD_RNG_CODERATE_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1294 | memcpy( &( PacketParams.Params.LoRa.PreambleLength ), Eeprom.Buffer + PAK_RNG_PREAMBLE_LEN_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1295 | memcpy( &( PacketParams.Params.LoRa.HeaderType ), Eeprom.Buffer + PAK_RNG_HEADERTYPE_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1296 | PacketParams.Params.LoRa.PayloadLength = 9; |
GregCr | 8:c0a5f53fe196 | 1297 | memcpy( &( PacketParams.Params.LoRa.Crc ), Eeprom.Buffer + PAK_RNG_CRC_MODE_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1298 | memcpy( &( PacketParams.Params.LoRa.InvertIQ ), Eeprom.Buffer + PAK_RNG_IQ_INV_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1299 | Radio.SetPacketType( ModulationParams.PacketType ); |
GregCr | 0:9c0917bfde97 | 1300 | Radio.SetModulationParams( &ModulationParams ); |
GregCr | 0:9c0917bfde97 | 1301 | Radio.SetPacketParams( &PacketParams ); |
GregCr | 0:9c0917bfde97 | 1302 | Radio.SetRfFrequency( Eeprom.EepromData.DemoSettings.Frequency ); |
GregCr | 0:9c0917bfde97 | 1303 | RX_LED = 1; |
GregCr | 0:9c0917bfde97 | 1304 | // use listen mode here instead of rx continuous |
GregCr | 0:9c0917bfde97 | 1305 | Radio.SetRx( ( TickTime_t ) { RADIO_TICK_SIZE_1000_US, 0xFFFF } ); |
GregCr | 0:9c0917bfde97 | 1306 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 1307 | break; |
GregCr | 0:9c0917bfde97 | 1308 | |
GregCr | 0:9c0917bfde97 | 1309 | case APP_RNG: |
GregCr | 0:9c0917bfde97 | 1310 | if( SendNext == true ) |
GregCr | 0:9c0917bfde97 | 1311 | { |
GregCr | 0:9c0917bfde97 | 1312 | SendNext = false; |
GregCr | 0:9c0917bfde97 | 1313 | MeasuredChannels++; |
GregCr | 0:9c0917bfde97 | 1314 | if( MeasuredChannels <= Eeprom.EepromData.DemoSettings.RngRequestCount ) |
GregCr | 0:9c0917bfde97 | 1315 | { |
GregCr | 0:9c0917bfde97 | 1316 | Radio.SetRfFrequency( Channels[CurrentChannel] ); |
GregCr | 0:9c0917bfde97 | 1317 | RX_LED = 1; |
GregCr | 0:9c0917bfde97 | 1318 | switch( Eeprom.EepromData.DemoSettings.RngAntenna ) |
GregCr | 0:9c0917bfde97 | 1319 | { |
GregCr | 0:9c0917bfde97 | 1320 | case DEMO_RNG_ANT_1: |
GregCr | 8:c0a5f53fe196 | 1321 | //ANT_SW = 1; // ANT1 |
GregCr | 8:c0a5f53fe196 | 1322 | Eeprom.EepromData.DemoSettings.AntennaSwitch = 0; |
GregCr | 0:9c0917bfde97 | 1323 | CurrentChannel++; |
GregCr | 0:9c0917bfde97 | 1324 | if( CurrentChannel >= CHANNELS ) |
GregCr | 0:9c0917bfde97 | 1325 | { |
GregCr | 0:9c0917bfde97 | 1326 | CurrentChannel -= CHANNELS; |
GregCr | 0:9c0917bfde97 | 1327 | } |
GregCr | 0:9c0917bfde97 | 1328 | break; |
GregCr | 0:9c0917bfde97 | 1329 | |
GregCr | 0:9c0917bfde97 | 1330 | case DEMO_RNG_ANT_2: |
GregCr | 8:c0a5f53fe196 | 1331 | //ANT_SW = 0; // ANT2 |
GregCr | 8:c0a5f53fe196 | 1332 | Eeprom.EepromData.DemoSettings.AntennaSwitch = 1; |
GregCr | 0:9c0917bfde97 | 1333 | CurrentChannel++; |
GregCr | 0:9c0917bfde97 | 1334 | if( CurrentChannel >= CHANNELS ) |
GregCr | 0:9c0917bfde97 | 1335 | { |
GregCr | 0:9c0917bfde97 | 1336 | CurrentChannel -= CHANNELS; |
GregCr | 0:9c0917bfde97 | 1337 | } |
GregCr | 0:9c0917bfde97 | 1338 | break; |
GregCr | 0:9c0917bfde97 | 1339 | |
GregCr | 0:9c0917bfde97 | 1340 | case DEMO_RNG_ANT_BOTH: |
GregCr | 0:9c0917bfde97 | 1341 | if( ANT_SW == 1 ) |
GregCr | 0:9c0917bfde97 | 1342 | { |
GregCr | 8:c0a5f53fe196 | 1343 | //ANT_SW = 0; |
GregCr | 8:c0a5f53fe196 | 1344 | Eeprom.EepromData.DemoSettings.AntennaSwitch = 1; |
GregCr | 0:9c0917bfde97 | 1345 | } |
GregCr | 0:9c0917bfde97 | 1346 | else |
GregCr | 0:9c0917bfde97 | 1347 | { |
GregCr | 8:c0a5f53fe196 | 1348 | //ANT_SW = 1; |
GregCr | 8:c0a5f53fe196 | 1349 | Eeprom.EepromData.DemoSettings.AntennaSwitch = 0; |
GregCr | 0:9c0917bfde97 | 1350 | CurrentChannel++; |
GregCr | 0:9c0917bfde97 | 1351 | if( CurrentChannel >= CHANNELS ) |
GregCr | 0:9c0917bfde97 | 1352 | { |
GregCr | 0:9c0917bfde97 | 1353 | CurrentChannel -= CHANNELS; |
GregCr | 0:9c0917bfde97 | 1354 | } |
GregCr | 0:9c0917bfde97 | 1355 | } |
GregCr | 0:9c0917bfde97 | 1356 | break; |
GregCr | 0:9c0917bfde97 | 1357 | } |
GregCr | 0:9c0917bfde97 | 1358 | SetAntennaSwitch( ); |
GregCr | 0:9c0917bfde97 | 1359 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 1360 | Radio.SetRx( ( TickTime_t ){ RADIO_TICK_SIZE_1000_US, Eeprom.EepromData.DemoSettings.RngReqDelay } ); |
GregCr | 0:9c0917bfde97 | 1361 | } |
GregCr | 0:9c0917bfde97 | 1362 | else |
GregCr | 0:9c0917bfde97 | 1363 | { |
mverdy | 14:ebd89dacc807 | 1364 | Radio.SetStandby( STDBY_RC ); |
GregCr | 0:9c0917bfde97 | 1365 | refreshDisplay = 1; |
GregCr | 0:9c0917bfde97 | 1366 | SendNextPacket.detach( ); |
GregCr | 0:9c0917bfde97 | 1367 | Eeprom.EepromData.DemoSettings.RngStatus = RNG_VALID; |
GregCr | 0:9c0917bfde97 | 1368 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1369 | } |
GregCr | 0:9c0917bfde97 | 1370 | } |
GregCr | 0:9c0917bfde97 | 1371 | break; |
GregCr | 0:9c0917bfde97 | 1372 | |
GregCr | 0:9c0917bfde97 | 1373 | case APP_RANGING_DONE: |
GregCr | 0:9c0917bfde97 | 1374 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1375 | Eeprom.EepromData.DemoSettings.CntPacketRxOK++; |
GregCr | 0:9c0917bfde97 | 1376 | DemoInternalState = APP_RNG; |
GregCr | 0:9c0917bfde97 | 1377 | break; |
GregCr | 0:9c0917bfde97 | 1378 | |
GregCr | 0:9c0917bfde97 | 1379 | case APP_RANGING_TIMEOUT: |
GregCr | 0:9c0917bfde97 | 1380 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1381 | DemoInternalState = APP_RNG; |
GregCr | 0:9c0917bfde97 | 1382 | break; |
GregCr | 0:9c0917bfde97 | 1383 | |
GregCr | 0:9c0917bfde97 | 1384 | case APP_RX: |
GregCr | 0:9c0917bfde97 | 1385 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1386 | if( Eeprom.EepromData.DemoSettings.RngStatus == RNG_INIT ) |
GregCr | 0:9c0917bfde97 | 1387 | { |
GregCr | 0:9c0917bfde97 | 1388 | Radio.GetPayload( Buffer, &BufferSize, BUFFER_SIZE ); |
GregCr | 1:dbcb3698f73a | 1389 | Radio.GetPacketStatus( &PacketStatus ); |
GregCr | 0:9c0917bfde97 | 1390 | if( ( BufferSize > 0 ) && \ |
GregCr | 0:9c0917bfde97 | 1391 | ( Buffer[0] == ( ( Eeprom.EepromData.DemoSettings.RngAddress >> 24 ) & 0xFF ) ) && \ |
GregCr | 0:9c0917bfde97 | 1392 | ( Buffer[1] == ( ( Eeprom.EepromData.DemoSettings.RngAddress >> 16 ) & 0xFF ) ) && \ |
GregCr | 0:9c0917bfde97 | 1393 | ( Buffer[2] == ( ( Eeprom.EepromData.DemoSettings.RngAddress >> 8 ) & 0xFF ) ) && \ |
GregCr | 0:9c0917bfde97 | 1394 | ( Buffer[3] == ( Eeprom.EepromData.DemoSettings.RngAddress & 0xFF ) ) ) |
GregCr | 0:9c0917bfde97 | 1395 | { |
GregCr | 0:9c0917bfde97 | 1396 | Eeprom.EepromData.DemoSettings.RngFei = Radio.GetFrequencyError( ); |
GregCr | 1:dbcb3698f73a | 1397 | Eeprom.EepromData.DemoSettings.RssiValue = PacketStatus.LoRa.RssiPkt; |
GregCr | 0:9c0917bfde97 | 1398 | Eeprom.EepromData.DemoSettings.CntPacketTx++; |
GregCr | 0:9c0917bfde97 | 1399 | CurrentChannel = Buffer[4]; |
GregCr | 0:9c0917bfde97 | 1400 | Eeprom.EepromData.DemoSettings.RngAntenna = Buffer[5]; |
GregCr | 0:9c0917bfde97 | 1401 | Eeprom.EepromData.DemoSettings.RngRequestCount = Buffer[6]; |
GregCr | 0:9c0917bfde97 | 1402 | wait_us( 10 ); |
GregCr | 0:9c0917bfde97 | 1403 | Buffer[4] = ( ( ( int32_t )Eeprom.EepromData.DemoSettings.RngFei ) >> 24 ) & 0xFF ; |
GregCr | 0:9c0917bfde97 | 1404 | Buffer[5] = ( ( ( int32_t )Eeprom.EepromData.DemoSettings.RngFei ) >> 16 ) & 0xFF ; |
GregCr | 0:9c0917bfde97 | 1405 | Buffer[6] = ( ( ( int32_t )Eeprom.EepromData.DemoSettings.RngFei ) >> 8 ) & 0xFF ; |
GregCr | 0:9c0917bfde97 | 1406 | Buffer[7] = ( ( ( int32_t )Eeprom.EepromData.DemoSettings.RngFei ) & 0xFF ); |
GregCr | 0:9c0917bfde97 | 1407 | Buffer[8] = Eeprom.EepromData.DemoSettings.RssiValue; |
GregCr | 0:9c0917bfde97 | 1408 | TX_LED = 1; |
GregCr | 0:9c0917bfde97 | 1409 | Radio.SendPayload( Buffer, 9, ( TickTime_t ){ RADIO_TICK_SIZE_1000_US, RNG_COM_TIMEOUT } ); |
GregCr | 0:9c0917bfde97 | 1410 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 1411 | } |
GregCr | 0:9c0917bfde97 | 1412 | } |
GregCr | 0:9c0917bfde97 | 1413 | else |
GregCr | 0:9c0917bfde97 | 1414 | { |
GregCr | 0:9c0917bfde97 | 1415 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1416 | } |
GregCr | 0:9c0917bfde97 | 1417 | break; |
GregCr | 0:9c0917bfde97 | 1418 | |
GregCr | 0:9c0917bfde97 | 1419 | case APP_TX: |
GregCr | 0:9c0917bfde97 | 1420 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1421 | if( Eeprom.EepromData.DemoSettings.RngStatus == RNG_INIT ) |
GregCr | 0:9c0917bfde97 | 1422 | { |
GregCr | 0:9c0917bfde97 | 1423 | Eeprom.EepromData.DemoSettings.RngStatus = RNG_PROCESS; |
GregCr | 0:9c0917bfde97 | 1424 | |
GregCr | 0:9c0917bfde97 | 1425 | ModulationParams.PacketType = PACKET_TYPE_RANGING; |
GregCr | 0:9c0917bfde97 | 1426 | PacketParams.PacketType = PACKET_TYPE_RANGING; |
GregCr | 0:9c0917bfde97 | 1427 | |
GregCr | 0:9c0917bfde97 | 1428 | memcpy( &( ModulationParams.Params.LoRa.SpreadingFactor ), Eeprom.Buffer + MOD_RNG_SPREADF_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1429 | memcpy( &( ModulationParams.Params.LoRa.Bandwidth ), Eeprom.Buffer + MOD_RNG_BW_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1430 | memcpy( &( ModulationParams.Params.LoRa.CodingRate ), Eeprom.Buffer + MOD_RNG_CODERATE_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1431 | memcpy( &( PacketParams.Params.LoRa.PreambleLength ), Eeprom.Buffer + PAK_RNG_PREAMBLE_LEN_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1432 | memcpy( &( PacketParams.Params.LoRa.HeaderType ), Eeprom.Buffer + PAK_RNG_HEADERTYPE_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1433 | PacketParams.Params.LoRa.PayloadLength = 10; |
GregCr | 8:c0a5f53fe196 | 1434 | memcpy( &( PacketParams.Params.LoRa.Crc ), Eeprom.Buffer + PAK_RNG_CRC_MODE_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1435 | memcpy( &( PacketParams.Params.LoRa.InvertIQ ), Eeprom.Buffer + PAK_RNG_IQ_INV_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1436 | |
GregCr | 0:9c0917bfde97 | 1437 | Radio.SetPacketType( ModulationParams.PacketType ); |
GregCr | 4:e9daf4ed7b4c | 1438 | |
GregCr | 0:9c0917bfde97 | 1439 | Radio.SetModulationParams( &ModulationParams ); |
GregCr | 0:9c0917bfde97 | 1440 | Radio.SetPacketParams( &PacketParams ); |
GregCr | 0:9c0917bfde97 | 1441 | Radio.SetDeviceRangingAddress( Eeprom.EepromData.DemoSettings.RngAddress ); |
GregCr | 0:9c0917bfde97 | 1442 | Radio.SetRangingCalibration( Eeprom.EepromData.DemoSettings.RngCalib ); |
GregCr | 0:9c0917bfde97 | 1443 | Radio.SetTxParams( Eeprom.EepromData.DemoSettings.TxPower, RADIO_RAMP_20_US ); |
GregCr | 0:9c0917bfde97 | 1444 | Eeprom.EepromData.DemoSettings.CntPacketRxOK = 0; |
GregCr | 0:9c0917bfde97 | 1445 | MeasuredChannels = 0; |
GregCr | 0:9c0917bfde97 | 1446 | Eeprom.EepromData.DemoSettings.CntPacketRxKOSlave = 0; |
GregCr | 0:9c0917bfde97 | 1447 | SendNextPacket.attach_us( &SendNextPacketEvent, Eeprom.EepromData.DemoSettings.RngReqDelay * 1000 ); |
GregCr | 0:9c0917bfde97 | 1448 | DemoInternalState = APP_RNG; |
GregCr | 0:9c0917bfde97 | 1449 | } |
GregCr | 0:9c0917bfde97 | 1450 | else |
GregCr | 0:9c0917bfde97 | 1451 | { |
GregCr | 0:9c0917bfde97 | 1452 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1453 | } |
GregCr | 0:9c0917bfde97 | 1454 | break; |
GregCr | 0:9c0917bfde97 | 1455 | |
GregCr | 0:9c0917bfde97 | 1456 | case APP_RX_TIMEOUT: |
GregCr | 0:9c0917bfde97 | 1457 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1458 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1459 | break; |
GregCr | 0:9c0917bfde97 | 1460 | |
GregCr | 0:9c0917bfde97 | 1461 | case APP_RX_ERROR: |
GregCr | 0:9c0917bfde97 | 1462 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1463 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1464 | break; |
GregCr | 0:9c0917bfde97 | 1465 | |
GregCr | 0:9c0917bfde97 | 1466 | case APP_TX_TIMEOUT: |
GregCr | 0:9c0917bfde97 | 1467 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1468 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1469 | break; |
GregCr | 0:9c0917bfde97 | 1470 | |
GregCr | 0:9c0917bfde97 | 1471 | case APP_IDLE: // do nothing |
GregCr | 0:9c0917bfde97 | 1472 | if( Eeprom.EepromData.DemoSettings.CntPacketRxKOSlave > DEMO_RNG_CHANNELS_COUNT_MAX ) |
GregCr | 0:9c0917bfde97 | 1473 | { |
GregCr | 0:9c0917bfde97 | 1474 | Eeprom.EepromData.DemoSettings.CntPacketRxKOSlave = 0; |
GregCr | 0:9c0917bfde97 | 1475 | refreshDisplay = 1; |
GregCr | 0:9c0917bfde97 | 1476 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1477 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1478 | SendNextPacket.detach( ); |
GregCr | 0:9c0917bfde97 | 1479 | } |
GregCr | 0:9c0917bfde97 | 1480 | break; |
GregCr | 0:9c0917bfde97 | 1481 | |
GregCr | 0:9c0917bfde97 | 1482 | default: |
GregCr | 0:9c0917bfde97 | 1483 | DemoInternalState = APP_RANGING_CONFIG; |
GregCr | 0:9c0917bfde97 | 1484 | SendNextPacket.detach( ); |
GregCr | 0:9c0917bfde97 | 1485 | break; |
GregCr | 0:9c0917bfde97 | 1486 | } |
GregCr | 0:9c0917bfde97 | 1487 | } |
GregCr | 0:9c0917bfde97 | 1488 | return refreshDisplay; |
GregCr | 0:9c0917bfde97 | 1489 | } |
GregCr | 0:9c0917bfde97 | 1490 | |
GregCr | 0:9c0917bfde97 | 1491 | // ************************ Utils **************************** |
GregCr | 0:9c0917bfde97 | 1492 | // * * |
GregCr | 0:9c0917bfde97 | 1493 | // * * |
GregCr | 0:9c0917bfde97 | 1494 | // * * |
GregCr | 0:9c0917bfde97 | 1495 | // ***************************************************************************** |
GregCr | 0:9c0917bfde97 | 1496 | |
GregCr | 0:9c0917bfde97 | 1497 | void InitDemoApplication( void ) |
GregCr | 0:9c0917bfde97 | 1498 | { |
GregCr | 0:9c0917bfde97 | 1499 | RX_LED = 1; |
GregCr | 0:9c0917bfde97 | 1500 | TX_LED = 1; |
GregCr | 0:9c0917bfde97 | 1501 | |
GregCr | 0:9c0917bfde97 | 1502 | SetAntennaSwitch( ); |
GregCr | 0:9c0917bfde97 | 1503 | |
GregCr | 0:9c0917bfde97 | 1504 | wait_ms( 500 ); // wait for on board DC/DC start-up time |
GregCr | 0:9c0917bfde97 | 1505 | |
GregCr | 0:9c0917bfde97 | 1506 | Radio.Init( ); |
GregCr | 0:9c0917bfde97 | 1507 | |
GregCr | 0:9c0917bfde97 | 1508 | // Can also be set in LDO mode but consume more power |
GregCr | 0:9c0917bfde97 | 1509 | Radio.SetRegulatorMode( ( RadioRegulatorModes_t )Eeprom.EepromData.DemoSettings.RadioPowerMode ); |
GregCr | 0:9c0917bfde97 | 1510 | Radio.SetStandby( STDBY_RC ); |
GregCr | 0:9c0917bfde97 | 1511 | |
GregCr | 0:9c0917bfde97 | 1512 | memset( &Buffer, 0x00, BufferSize ); |
GregCr | 0:9c0917bfde97 | 1513 | |
GregCr | 0:9c0917bfde97 | 1514 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1515 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1516 | |
GregCr | 0:9c0917bfde97 | 1517 | PacketRxSequence = 0; |
GregCr | 0:9c0917bfde97 | 1518 | PacketRxSequencePrev = 0; |
GregCr | 0:9c0917bfde97 | 1519 | Eeprom.EepromData.DemoSettings.CntPacketTx = 0; |
GregCr | 0:9c0917bfde97 | 1520 | Eeprom.EepromData.DemoSettings.CntPacketRxOK = 0; |
GregCr | 0:9c0917bfde97 | 1521 | Eeprom.EepromData.DemoSettings.CntPacketRxKO = 0; |
GregCr | 0:9c0917bfde97 | 1522 | Eeprom.EepromData.DemoSettings.RxTimeOutCount = 0; |
GregCr | 0:9c0917bfde97 | 1523 | } |
GregCr | 0:9c0917bfde97 | 1524 | |
GregCr | 0:9c0917bfde97 | 1525 | void StopDemoApplication( void ) |
GregCr | 0:9c0917bfde97 | 1526 | { |
GregCr | 0:9c0917bfde97 | 1527 | if( DemoRunning == true ) |
GregCr | 0:9c0917bfde97 | 1528 | { |
GregCr | 0:9c0917bfde97 | 1529 | __disable_irq( ); // Disable Interrupts |
GregCr | 0:9c0917bfde97 | 1530 | |
GregCr | 17:a0bbfc228415 | 1531 | #ifdef PRINT_DEBUG |
GregCr | 0:9c0917bfde97 | 1532 | printf( "StopDemoApplication\n\r" ); |
GregCr | 17:a0bbfc228415 | 1533 | #endif |
GregCr | 17:a0bbfc228415 | 1534 | |
GregCr | 0:9c0917bfde97 | 1535 | if( Radio.GetOpMode( ) == MODE_SLEEP ) |
GregCr | 0:9c0917bfde97 | 1536 | { |
GregCr | 5:a0f5842fb337 | 1537 | Radio.Wakeup( ); |
GregCr | 0:9c0917bfde97 | 1538 | InitializeDemoParameters( Eeprom.EepromData.DemoSettings.ModulationType ); |
GregCr | 0:9c0917bfde97 | 1539 | } |
GregCr | 0:9c0917bfde97 | 1540 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1541 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 1542 | DemoRunning = false; |
GregCr | 0:9c0917bfde97 | 1543 | SendNext = false; |
GregCr | 17:a0bbfc228415 | 1544 | ReceiveNext = false; |
GregCr | 0:9c0917bfde97 | 1545 | PacketRxSequence = 0; |
GregCr | 0:9c0917bfde97 | 1546 | PacketRxSequencePrev = 0; |
GregCr | 0:9c0917bfde97 | 1547 | Eeprom.EepromData.DemoSettings.CntPacketTx = 0; |
GregCr | 0:9c0917bfde97 | 1548 | Eeprom.EepromData.DemoSettings.CntPacketRxOK = 0; |
GregCr | 0:9c0917bfde97 | 1549 | Eeprom.EepromData.DemoSettings.CntPacketRxKO = 0; |
GregCr | 0:9c0917bfde97 | 1550 | Eeprom.EepromData.DemoSettings.RxTimeOutCount = 0; |
GregCr | 0:9c0917bfde97 | 1551 | |
GregCr | 0:9c0917bfde97 | 1552 | Radio.SetAutoFs( false ); |
GregCr | 0:9c0917bfde97 | 1553 | DemoInternalState = APP_IDLE; |
GregCr | 0:9c0917bfde97 | 1554 | Radio.SetStandby( STDBY_RC ); |
GregCr | 0:9c0917bfde97 | 1555 | Radio.ClearIrqStatus( IRQ_RADIO_ALL ); |
GregCr | 17:a0bbfc228415 | 1556 | SendNextPacket.detach( ); |
GregCr | 17:a0bbfc228415 | 1557 | ReceiveNextPacket.detach( ); |
GregCr | 17:a0bbfc228415 | 1558 | |
GregCr | 0:9c0917bfde97 | 1559 | __enable_irq( ); // Enable Interrupts |
GregCr | 0:9c0917bfde97 | 1560 | } |
GregCr | 0:9c0917bfde97 | 1561 | } |
GregCr | 0:9c0917bfde97 | 1562 | |
GregCr | 0:9c0917bfde97 | 1563 | /* |
GregCr | 0:9c0917bfde97 | 1564 | * Function still being implemented >>> To be completed |
GregCr | 0:9c0917bfde97 | 1565 | * WARNING: Computation is in float and his really slow |
GregCr | 0:9c0917bfde97 | 1566 | * LongInterLeaving vs LegacyInterLeaving has no influence on TimeOnAir. |
GregCr | 0:9c0917bfde97 | 1567 | */ |
GregCr | 0:9c0917bfde97 | 1568 | uint16_t GetTimeOnAir( uint8_t modulation ) |
GregCr | 0:9c0917bfde97 | 1569 | { |
GregCr | 0:9c0917bfde97 | 1570 | uint16_t result = 2000; |
GregCr | 17:a0bbfc228415 | 1571 | double tPayload = 0.0; |
GregCr | 17:a0bbfc228415 | 1572 | |
GregCr | 0:9c0917bfde97 | 1573 | if( modulation == PACKET_TYPE_LORA ) |
GregCr | 0:9c0917bfde97 | 1574 | { |
GregCr | 17:a0bbfc228415 | 1575 | uint16_t bw = 0.0; |
GregCr | 17:a0bbfc228415 | 1576 | double nPayload = 0.0; |
GregCr | 17:a0bbfc228415 | 1577 | double ts = 0.0; |
GregCr | 17:a0bbfc228415 | 1578 | |
GregCr | 17:a0bbfc228415 | 1579 | uint8_t SF = Eeprom.EepromData.ModulationParams.Params.LoRa.SpreadingFactor >> 4; |
GregCr | 17:a0bbfc228415 | 1580 | uint8_t crc = ( Eeprom.EepromData.PacketParams.Params.LoRa.Crc == LORA_CRC_ON ) ? 16 : 0; // 16 bit if present else 0 |
GregCr | 17:a0bbfc228415 | 1581 | uint8_t header = ( Eeprom.EepromData.PacketParams.Params.LoRa.HeaderType == LORA_PACKET_VARIABLE_LENGTH ) ? 20 : 0; // 20 if present else 0 |
GregCr | 17:a0bbfc228415 | 1582 | uint16_t payload = 8 * Eeprom.EepromData.PacketParams.Params.LoRa.PayloadLength; |
GregCr | 17:a0bbfc228415 | 1583 | uint8_t CR = Eeprom.EepromData.ModulationParams.Params.LoRa.CodingRate; |
GregCr | 0:9c0917bfde97 | 1584 | |
GregCr | 0:9c0917bfde97 | 1585 | switch( Eeprom.EepromData.ModulationParams.Params.LoRa.Bandwidth ) |
GregCr | 0:9c0917bfde97 | 1586 | { |
GregCr | 0:9c0917bfde97 | 1587 | case LORA_BW_0200: |
GregCr | 17:a0bbfc228415 | 1588 | bw = 203; |
GregCr | 0:9c0917bfde97 | 1589 | break; |
GregCr | 0:9c0917bfde97 | 1590 | |
GregCr | 0:9c0917bfde97 | 1591 | case LORA_BW_0400: |
GregCr | 17:a0bbfc228415 | 1592 | bw = 406; |
GregCr | 0:9c0917bfde97 | 1593 | break; |
GregCr | 0:9c0917bfde97 | 1594 | |
GregCr | 0:9c0917bfde97 | 1595 | case LORA_BW_0800: |
GregCr | 17:a0bbfc228415 | 1596 | bw = 812; |
GregCr | 0:9c0917bfde97 | 1597 | break; |
GregCr | 0:9c0917bfde97 | 1598 | |
GregCr | 0:9c0917bfde97 | 1599 | case LORA_BW_1600: |
GregCr | 17:a0bbfc228415 | 1600 | bw = 1625; |
GregCr | 0:9c0917bfde97 | 1601 | break; |
GregCr | 0:9c0917bfde97 | 1602 | |
GregCr | 0:9c0917bfde97 | 1603 | default: |
GregCr | 0:9c0917bfde97 | 1604 | break; |
GregCr | 0:9c0917bfde97 | 1605 | } |
GregCr | 0:9c0917bfde97 | 1606 | |
GregCr | 17:a0bbfc228415 | 1607 | if( SF < 7 ) |
GregCr | 17:a0bbfc228415 | 1608 | { |
GregCr | 17:a0bbfc228415 | 1609 | nPayload = max( ( ( double )( payload + crc -(4 * SF) + header ) ), 0.0 ); |
GregCr | 17:a0bbfc228415 | 1610 | nPayload = nPayload / ( double )( 4 * SF ); |
GregCr | 17:a0bbfc228415 | 1611 | nPayload = ceil( nPayload ); |
GregCr | 17:a0bbfc228415 | 1612 | nPayload = nPayload * ( CR + 4 ); |
GregCr | 17:a0bbfc228415 | 1613 | nPayload = nPayload + Eeprom.EepromData.PacketParams.Params.LoRa.PreambleLength + 6.25 + 8; |
GregCr | 17:a0bbfc228415 | 1614 | } |
GregCr | 17:a0bbfc228415 | 1615 | else if( SF > 10 ) |
GregCr | 17:a0bbfc228415 | 1616 | { |
GregCr | 17:a0bbfc228415 | 1617 | nPayload = max( ( ( double )( payload + crc -(4 * SF) + 8 + header ) ), 0.0 ); |
GregCr | 17:a0bbfc228415 | 1618 | nPayload = nPayload / ( double )( 4 * ( SF - 2 ) ); |
GregCr | 17:a0bbfc228415 | 1619 | nPayload = ceil( nPayload ); |
GregCr | 17:a0bbfc228415 | 1620 | nPayload = nPayload * ( CR + 4 ); |
GregCr | 17:a0bbfc228415 | 1621 | nPayload = nPayload + Eeprom.EepromData.PacketParams.Params.LoRa.PreambleLength + 4.25 + 8; |
GregCr | 17:a0bbfc228415 | 1622 | } |
GregCr | 17:a0bbfc228415 | 1623 | else |
GregCr | 17:a0bbfc228415 | 1624 | { |
GregCr | 17:a0bbfc228415 | 1625 | nPayload = max( ( ( double )( payload + crc -(4 * SF) + 8 + header ) ), 0.0 ); |
GregCr | 17:a0bbfc228415 | 1626 | nPayload = nPayload / ( double )( 4 * SF ); |
GregCr | 17:a0bbfc228415 | 1627 | nPayload = ceil( nPayload ); |
GregCr | 17:a0bbfc228415 | 1628 | nPayload = nPayload * ( CR + 4 ); |
GregCr | 17:a0bbfc228415 | 1629 | nPayload = nPayload + Eeprom.EepromData.PacketParams.Params.LoRa.PreambleLength + 4.25 + 8; |
GregCr | 17:a0bbfc228415 | 1630 | } |
GregCr | 17:a0bbfc228415 | 1631 | ts = ( double )( 1 << SF ) / ( double )( bw ); |
GregCr | 17:a0bbfc228415 | 1632 | tPayload = nPayload * ts; |
GregCr | 17:a0bbfc228415 | 1633 | #ifdef PRINT_DEBUG |
GregCr | 17:a0bbfc228415 | 1634 | printf( "ToA LoRa: %f \n\r", tPayload ); |
GregCr | 17:a0bbfc228415 | 1635 | #endif |
GregCr | 17:a0bbfc228415 | 1636 | result = ceil( tPayload ); |
GregCr | 0:9c0917bfde97 | 1637 | } |
GregCr | 0:9c0917bfde97 | 1638 | else if( modulation == PACKET_TYPE_FLRC ) |
GregCr | 0:9c0917bfde97 | 1639 | { |
GregCr | 17:a0bbfc228415 | 1640 | uint16_t BitCount = 0; |
GregCr | 17:a0bbfc228415 | 1641 | uint16_t BitCountCoded = 0; |
GregCr | 0:9c0917bfde97 | 1642 | |
GregCr | 17:a0bbfc228415 | 1643 | BitCount = 4 + ( Eeprom.EepromData.PacketParams.Params.Flrc.PreambleLength >> 4 ) * 4; // AGC preamble |
GregCr | 17:a0bbfc228415 | 1644 | BitCount = BitCount + 32; // Sync Word |
GregCr | 17:a0bbfc228415 | 1645 | BitCount = BitCount + 21; // Preamble |
GregCr | 17:a0bbfc228415 | 1646 | BitCount = BitCount + ( ( Eeprom.EepromData.PacketParams.Params.Flrc.HeaderType == RADIO_PACKET_VARIABLE_LENGTH ) ? 16 : 0 ); |
GregCr | 0:9c0917bfde97 | 1647 | |
GregCr | 0:9c0917bfde97 | 1648 | switch( Eeprom.EepromData.ModulationParams.Params.Flrc.CodingRate ) |
GregCr | 0:9c0917bfde97 | 1649 | { |
GregCr | 0:9c0917bfde97 | 1650 | case FLRC_CR_3_4: |
GregCr | 17:a0bbfc228415 | 1651 | BitCountCoded = 6 + ( Eeprom.EepromData.PacketParams.Params.Flrc.CrcLength >> 4 ) * 8; |
GregCr | 17:a0bbfc228415 | 1652 | BitCountCoded = BitCountCoded + Eeprom.EepromData.PacketParams.Params.Flrc.PayloadLength * 8; |
GregCr | 17:a0bbfc228415 | 1653 | BitCountCoded = ( uint16_t )( ( ( double )BitCountCoded * 4.0 ) / 3.0 ); |
GregCr | 0:9c0917bfde97 | 1654 | break; |
GregCr | 0:9c0917bfde97 | 1655 | |
GregCr | 0:9c0917bfde97 | 1656 | case FLRC_CR_1_0: |
GregCr | 17:a0bbfc228415 | 1657 | BitCountCoded = ( Eeprom.EepromData.PacketParams.Params.Flrc.CrcLength >> 4 ) * 8; |
GregCr | 17:a0bbfc228415 | 1658 | BitCountCoded = BitCountCoded + Eeprom.EepromData.PacketParams.Params.Flrc.PayloadLength * 8; |
GregCr | 0:9c0917bfde97 | 1659 | break; |
GregCr | 0:9c0917bfde97 | 1660 | |
GregCr | 0:9c0917bfde97 | 1661 | default: |
GregCr | 0:9c0917bfde97 | 1662 | case FLRC_CR_1_2: |
GregCr | 17:a0bbfc228415 | 1663 | BitCountCoded = 6 + ( Eeprom.EepromData.PacketParams.Params.Flrc.CrcLength >> 4 ) * 8; |
GregCr | 17:a0bbfc228415 | 1664 | BitCountCoded = BitCountCoded + Eeprom.EepromData.PacketParams.Params.Flrc.PayloadLength * 8; |
GregCr | 17:a0bbfc228415 | 1665 | BitCountCoded = BitCountCoded << 1; |
GregCr | 0:9c0917bfde97 | 1666 | break; |
GregCr | 0:9c0917bfde97 | 1667 | } |
GregCr | 17:a0bbfc228415 | 1668 | BitCount = BitCount + BitCountCoded; |
GregCr | 17:a0bbfc228415 | 1669 | |
GregCr | 0:9c0917bfde97 | 1670 | switch( Eeprom.EepromData.ModulationParams.Params.Flrc.BitrateBandwidth ) |
GregCr | 0:9c0917bfde97 | 1671 | { |
GregCr | 0:9c0917bfde97 | 1672 | case FLRC_BR_1_300_BW_1_2: |
GregCr | 17:a0bbfc228415 | 1673 | tPayload = ( double )BitCount / 1300.0; |
GregCr | 0:9c0917bfde97 | 1674 | break; |
GregCr | 0:9c0917bfde97 | 1675 | |
GregCr | 0:9c0917bfde97 | 1676 | case FLRC_BR_1_040_BW_1_2: |
GregCr | 17:a0bbfc228415 | 1677 | tPayload = ( double )BitCount / 1040.0; |
GregCr | 0:9c0917bfde97 | 1678 | break; |
GregCr | 0:9c0917bfde97 | 1679 | |
GregCr | 0:9c0917bfde97 | 1680 | case FLRC_BR_0_650_BW_0_6: |
GregCr | 17:a0bbfc228415 | 1681 | tPayload = ( double )BitCount / 650.0; |
GregCr | 0:9c0917bfde97 | 1682 | break; |
GregCr | 0:9c0917bfde97 | 1683 | |
GregCr | 0:9c0917bfde97 | 1684 | case FLRC_BR_0_520_BW_0_6: |
GregCr | 17:a0bbfc228415 | 1685 | tPayload = ( double )BitCount / 520.0; |
GregCr | 0:9c0917bfde97 | 1686 | break; |
GregCr | 0:9c0917bfde97 | 1687 | |
GregCr | 0:9c0917bfde97 | 1688 | case FLRC_BR_0_325_BW_0_3: |
GregCr | 17:a0bbfc228415 | 1689 | tPayload = ( double )BitCount / 325.0; |
GregCr | 0:9c0917bfde97 | 1690 | break; |
GregCr | 0:9c0917bfde97 | 1691 | |
GregCr | 17:a0bbfc228415 | 1692 | case FLRC_BR_0_260_BW_0_3: |
GregCr | 17:a0bbfc228415 | 1693 | tPayload = ( double )BitCount / 260.0; |
GregCr | 17:a0bbfc228415 | 1694 | break; |
GregCr | 17:a0bbfc228415 | 1695 | |
GregCr | 0:9c0917bfde97 | 1696 | default: |
GregCr | 0:9c0917bfde97 | 1697 | break; |
GregCr | 0:9c0917bfde97 | 1698 | } |
GregCr | 17:a0bbfc228415 | 1699 | |
GregCr | 17:a0bbfc228415 | 1700 | printf( "ToA FLRC: %f \n\r", tPayload ); |
GregCr | 17:a0bbfc228415 | 1701 | |
GregCr | 17:a0bbfc228415 | 1702 | result = ceil( tPayload ); |
GregCr | 0:9c0917bfde97 | 1703 | } |
GregCr | 0:9c0917bfde97 | 1704 | else if( modulation == PACKET_TYPE_GFSK ) |
GregCr | 0:9c0917bfde97 | 1705 | { |
GregCr | 17:a0bbfc228415 | 1706 | uint16_t BitCount = 0; |
GregCr | 17:a0bbfc228415 | 1707 | |
GregCr | 17:a0bbfc228415 | 1708 | BitCount = 4 + ( Eeprom.EepromData.PacketParams.Params.Gfsk.PreambleLength >> 4 ) * 4; // preamble |
GregCr | 17:a0bbfc228415 | 1709 | BitCount = BitCount + 8 + ( Eeprom.EepromData.PacketParams.Params.Gfsk.SyncWordLength >> 1 ) * 8; // sync word |
GregCr | 17:a0bbfc228415 | 1710 | BitCount = BitCount + ( ( Eeprom.EepromData.PacketParams.Params.Gfsk.HeaderType == RADIO_PACKET_VARIABLE_LENGTH ) ? 8 : 0 ); |
GregCr | 17:a0bbfc228415 | 1711 | BitCount = BitCount + Eeprom.EepromData.PacketParams.Params.Gfsk.PayloadLength * 8; |
GregCr | 17:a0bbfc228415 | 1712 | BitCount = BitCount + ( Eeprom.EepromData.PacketParams.Params.Gfsk.CrcLength >> 4 ) * 8; |
GregCr | 17:a0bbfc228415 | 1713 | |
GregCr | 0:9c0917bfde97 | 1714 | switch( Eeprom.EepromData.ModulationParams.Params.Gfsk.BitrateBandwidth ) |
GregCr | 0:9c0917bfde97 | 1715 | { |
GregCr | 0:9c0917bfde97 | 1716 | case GFSK_BLE_BR_2_000_BW_2_4: |
GregCr | 17:a0bbfc228415 | 1717 | tPayload = ( double )BitCount / 2000.0 ; |
GregCr | 0:9c0917bfde97 | 1718 | break; |
GregCr | 0:9c0917bfde97 | 1719 | |
GregCr | 0:9c0917bfde97 | 1720 | case GFSK_BLE_BR_1_600_BW_2_4: |
GregCr | 17:a0bbfc228415 | 1721 | tPayload = ( double )BitCount / 1600.0 ; |
GregCr | 0:9c0917bfde97 | 1722 | break; |
GregCr | 0:9c0917bfde97 | 1723 | |
GregCr | 0:9c0917bfde97 | 1724 | case GFSK_BLE_BR_1_000_BW_2_4: |
GregCr | 0:9c0917bfde97 | 1725 | case GFSK_BLE_BR_1_000_BW_1_2: |
GregCr | 17:a0bbfc228415 | 1726 | tPayload = ( double )BitCount / 1000.0; |
GregCr | 0:9c0917bfde97 | 1727 | break; |
GregCr | 0:9c0917bfde97 | 1728 | |
GregCr | 0:9c0917bfde97 | 1729 | case GFSK_BLE_BR_0_800_BW_2_4: |
GregCr | 0:9c0917bfde97 | 1730 | case GFSK_BLE_BR_0_800_BW_1_2: |
GregCr | 17:a0bbfc228415 | 1731 | tPayload = ( double )BitCount / 800.0; |
GregCr | 0:9c0917bfde97 | 1732 | break; |
GregCr | 0:9c0917bfde97 | 1733 | |
GregCr | 0:9c0917bfde97 | 1734 | case GFSK_BLE_BR_0_500_BW_1_2: |
GregCr | 0:9c0917bfde97 | 1735 | case GFSK_BLE_BR_0_500_BW_0_6: |
GregCr | 17:a0bbfc228415 | 1736 | tPayload = ( double )BitCount / 500.0; |
GregCr | 0:9c0917bfde97 | 1737 | break; |
GregCr | 0:9c0917bfde97 | 1738 | |
GregCr | 0:9c0917bfde97 | 1739 | case GFSK_BLE_BR_0_400_BW_1_2: |
GregCr | 0:9c0917bfde97 | 1740 | case GFSK_BLE_BR_0_400_BW_0_6: |
GregCr | 17:a0bbfc228415 | 1741 | tPayload = ( double )BitCount / 400.0; |
GregCr | 0:9c0917bfde97 | 1742 | break; |
GregCr | 0:9c0917bfde97 | 1743 | |
GregCr | 0:9c0917bfde97 | 1744 | case GFSK_BLE_BR_0_250_BW_0_6: |
GregCr | 0:9c0917bfde97 | 1745 | case GFSK_BLE_BR_0_250_BW_0_3: |
GregCr | 17:a0bbfc228415 | 1746 | tPayload = ( double )BitCount / 250.0; |
GregCr | 0:9c0917bfde97 | 1747 | break; |
GregCr | 0:9c0917bfde97 | 1748 | |
GregCr | 0:9c0917bfde97 | 1749 | case GFSK_BLE_BR_0_125_BW_0_3: |
GregCr | 17:a0bbfc228415 | 1750 | tPayload = ( double )BitCount / 125.0; |
GregCr | 0:9c0917bfde97 | 1751 | break; |
GregCr | 0:9c0917bfde97 | 1752 | |
GregCr | 0:9c0917bfde97 | 1753 | default: |
GregCr | 0:9c0917bfde97 | 1754 | break; |
GregCr | 0:9c0917bfde97 | 1755 | } |
GregCr | 17:a0bbfc228415 | 1756 | #ifdef PRINT_DEBUG |
GregCr | 17:a0bbfc228415 | 1757 | printf( "ToA GFSK: %f \n\r", tPayload ); |
GregCr | 17:a0bbfc228415 | 1758 | #endif |
GregCr | 17:a0bbfc228415 | 1759 | result = ceil( tPayload ); |
GregCr | 0:9c0917bfde97 | 1760 | } |
GregCr | 17:a0bbfc228415 | 1761 | |
GregCr | 0:9c0917bfde97 | 1762 | return result; |
GregCr | 0:9c0917bfde97 | 1763 | } |
GregCr | 0:9c0917bfde97 | 1764 | |
GregCr | 0:9c0917bfde97 | 1765 | void InitializeDemoParameters( uint8_t modulation ) |
GregCr | 0:9c0917bfde97 | 1766 | { |
GregCr | 0:9c0917bfde97 | 1767 | Radio.SetStandby( STDBY_RC ); |
GregCr | 0:9c0917bfde97 | 1768 | |
GregCr | 0:9c0917bfde97 | 1769 | Radio.SetRegulatorMode( ( RadioRegulatorModes_t )Eeprom.EepromData.DemoSettings.RadioPowerMode ); |
GregCr | 0:9c0917bfde97 | 1770 | |
GregCr | 17:a0bbfc228415 | 1771 | #ifdef PRINT_DEBUG |
GregCr | 0:9c0917bfde97 | 1772 | printf("> InitializeDemoParameters\n\r"); |
GregCr | 17:a0bbfc228415 | 1773 | #endif |
GregCr | 0:9c0917bfde97 | 1774 | if( modulation == PACKET_TYPE_LORA ) |
GregCr | 0:9c0917bfde97 | 1775 | { |
GregCr | 17:a0bbfc228415 | 1776 | #ifdef PRINT_DEBUG |
GregCr | 0:9c0917bfde97 | 1777 | printf("set param LORA for demo\n\r"); |
GregCr | 17:a0bbfc228415 | 1778 | #endif |
GregCr | 0:9c0917bfde97 | 1779 | ModulationParams.PacketType = PACKET_TYPE_LORA; |
GregCr | 0:9c0917bfde97 | 1780 | PacketParams.PacketType = PACKET_TYPE_LORA; |
GregCr | 0:9c0917bfde97 | 1781 | |
GregCr | 0:9c0917bfde97 | 1782 | ModulationParams.Params.LoRa.SpreadingFactor = ( RadioLoRaSpreadingFactors_t ) Eeprom.EepromData.DemoSettings.ModulationParam1; |
GregCr | 0:9c0917bfde97 | 1783 | ModulationParams.Params.LoRa.Bandwidth = ( RadioLoRaBandwidths_t ) Eeprom.EepromData.DemoSettings.ModulationParam2; |
GregCr | 0:9c0917bfde97 | 1784 | ModulationParams.Params.LoRa.CodingRate = ( RadioLoRaCodingRates_t ) Eeprom.EepromData.DemoSettings.ModulationParam3; |
GregCr | 0:9c0917bfde97 | 1785 | PacketParams.Params.LoRa.PreambleLength = Eeprom.EepromData.DemoSettings.PacketParam1; |
GregCr | 0:9c0917bfde97 | 1786 | PacketParams.Params.LoRa.HeaderType = ( RadioLoRaPacketLengthsModes_t )Eeprom.EepromData.DemoSettings.PacketParam2; |
GregCr | 0:9c0917bfde97 | 1787 | PacketParams.Params.LoRa.PayloadLength = Eeprom.EepromData.DemoSettings.PacketParam3; |
GregCr | 8:c0a5f53fe196 | 1788 | PacketParams.Params.LoRa.Crc = ( RadioLoRaCrcModes_t ) Eeprom.EepromData.DemoSettings.PacketParam4; |
GregCr | 0:9c0917bfde97 | 1789 | PacketParams.Params.LoRa.InvertIQ = ( RadioLoRaIQModes_t ) Eeprom.EepromData.DemoSettings.PacketParam5; |
GregCr | 0:9c0917bfde97 | 1790 | |
GregCr | 0:9c0917bfde97 | 1791 | Eeprom.EepromData.DemoSettings.PayloadLength = PacketParams.Params.LoRa.PayloadLength; |
GregCr | 17:a0bbfc228415 | 1792 | |
GregCr | 17:a0bbfc228415 | 1793 | Radio.WriteRegister( REG_HIGH_SENSITIVITY, Radio.ReadRegister( REG_HIGH_SENSITIVITY ) & ~LNA_HIGH_SENSITIVITY_MASK ); |
GregCr | 0:9c0917bfde97 | 1794 | } |
GregCr | 0:9c0917bfde97 | 1795 | else if( modulation == PACKET_TYPE_FLRC ) |
GregCr | 0:9c0917bfde97 | 1796 | { |
GregCr | 17:a0bbfc228415 | 1797 | #ifdef PRINT_DEBUG |
GregCr | 0:9c0917bfde97 | 1798 | printf("set param FLRC for demo\n\r"); |
GregCr | 17:a0bbfc228415 | 1799 | #endif |
GregCr | 0:9c0917bfde97 | 1800 | ModulationParams.PacketType = PACKET_TYPE_FLRC; |
GregCr | 0:9c0917bfde97 | 1801 | PacketParams.PacketType = PACKET_TYPE_FLRC; |
GregCr | 0:9c0917bfde97 | 1802 | |
GregCr | 0:9c0917bfde97 | 1803 | ModulationParams.Params.Flrc.BitrateBandwidth = ( RadioFlrcBitrates_t ) Eeprom.EepromData.DemoSettings.ModulationParam1; |
GregCr | 0:9c0917bfde97 | 1804 | ModulationParams.Params.Flrc.CodingRate = ( RadioFlrcCodingRates_t ) Eeprom.EepromData.DemoSettings.ModulationParam2; |
GregCr | 0:9c0917bfde97 | 1805 | ModulationParams.Params.Flrc.ModulationShaping = ( RadioModShapings_t ) Eeprom.EepromData.DemoSettings.ModulationParam3; |
GregCr | 0:9c0917bfde97 | 1806 | PacketParams.Params.Flrc.PreambleLength = ( RadioPreambleLengths_t ) Eeprom.EepromData.DemoSettings.PacketParam1; |
GregCr | 0:9c0917bfde97 | 1807 | PacketParams.Params.Flrc.SyncWordLength = ( RadioFlrcSyncWordLengths_t )Eeprom.EepromData.DemoSettings.PacketParam2; |
GregCr | 0:9c0917bfde97 | 1808 | PacketParams.Params.Flrc.SyncWordMatch = ( RadioSyncWordRxMatchs_t ) Eeprom.EepromData.DemoSettings.PacketParam3; |
GregCr | 0:9c0917bfde97 | 1809 | PacketParams.Params.Flrc.HeaderType = ( RadioPacketLengthModes_t ) Eeprom.EepromData.DemoSettings.PacketParam4; |
GregCr | 0:9c0917bfde97 | 1810 | PacketParams.Params.Flrc.PayloadLength = Eeprom.EepromData.DemoSettings.PacketParam5; |
GregCr | 0:9c0917bfde97 | 1811 | PacketParams.Params.Flrc.CrcLength = ( RadioCrcTypes_t ) Eeprom.EepromData.DemoSettings.PacketParam6; |
GregCr | 0:9c0917bfde97 | 1812 | PacketParams.Params.Flrc.Whitening = ( RadioWhiteningModes_t ) Eeprom.EepromData.DemoSettings.PacketParam7; |
GregCr | 0:9c0917bfde97 | 1813 | |
GregCr | 0:9c0917bfde97 | 1814 | Eeprom.EepromData.DemoSettings.PayloadLength = PacketParams.Params.Flrc.PayloadLength; |
GregCr | 17:a0bbfc228415 | 1815 | |
GregCr | 17:a0bbfc228415 | 1816 | Radio.WriteRegister( REG_HIGH_SENSITIVITY, Radio.ReadRegister( REG_HIGH_SENSITIVITY ) | LNA_HIGH_SENSITIVITY_MASK ); |
GregCr | 0:9c0917bfde97 | 1817 | } |
GregCr | 0:9c0917bfde97 | 1818 | else if( modulation == PACKET_TYPE_GFSK ) |
GregCr | 0:9c0917bfde97 | 1819 | { |
GregCr | 17:a0bbfc228415 | 1820 | #ifdef PRINT_DEBUG |
GregCr | 0:9c0917bfde97 | 1821 | printf("set param GFSK for demo\n\r"); |
GregCr | 17:a0bbfc228415 | 1822 | #endif |
GregCr | 0:9c0917bfde97 | 1823 | ModulationParams.PacketType = PACKET_TYPE_GFSK; |
GregCr | 0:9c0917bfde97 | 1824 | PacketParams.PacketType = PACKET_TYPE_GFSK; |
GregCr | 0:9c0917bfde97 | 1825 | |
GregCr | 0:9c0917bfde97 | 1826 | ModulationParams.Params.Gfsk.BitrateBandwidth = ( RadioGfskBleBitrates_t ) Eeprom.EepromData.DemoSettings.ModulationParam1; |
GregCr | 0:9c0917bfde97 | 1827 | ModulationParams.Params.Gfsk.ModulationIndex = ( RadioGfskBleModIndexes_t )Eeprom.EepromData.DemoSettings.ModulationParam2; |
GregCr | 0:9c0917bfde97 | 1828 | ModulationParams.Params.Gfsk.ModulationShaping = ( RadioModShapings_t ) Eeprom.EepromData.DemoSettings.ModulationParam3; |
GregCr | 0:9c0917bfde97 | 1829 | PacketParams.Params.Gfsk.PreambleLength = ( RadioPreambleLengths_t ) Eeprom.EepromData.DemoSettings.PacketParam1; |
GregCr | 0:9c0917bfde97 | 1830 | PacketParams.Params.Gfsk.SyncWordLength = ( RadioSyncWordLengths_t ) Eeprom.EepromData.DemoSettings.PacketParam2; |
GregCr | 0:9c0917bfde97 | 1831 | PacketParams.Params.Gfsk.SyncWordMatch = ( RadioSyncWordRxMatchs_t ) Eeprom.EepromData.DemoSettings.PacketParam3; |
GregCr | 0:9c0917bfde97 | 1832 | PacketParams.Params.Gfsk.HeaderType = ( RadioPacketLengthModes_t )Eeprom.EepromData.DemoSettings.PacketParam4; |
GregCr | 0:9c0917bfde97 | 1833 | PacketParams.Params.Gfsk.PayloadLength = Eeprom.EepromData.DemoSettings.PacketParam5; |
GregCr | 0:9c0917bfde97 | 1834 | PacketParams.Params.Gfsk.CrcLength = ( RadioCrcTypes_t ) Eeprom.EepromData.DemoSettings.PacketParam6; |
GregCr | 0:9c0917bfde97 | 1835 | PacketParams.Params.Gfsk.Whitening = ( RadioWhiteningModes_t ) Eeprom.EepromData.DemoSettings.PacketParam7; |
GregCr | 0:9c0917bfde97 | 1836 | |
GregCr | 0:9c0917bfde97 | 1837 | Eeprom.EepromData.DemoSettings.PayloadLength = PacketParams.Params.Gfsk.PayloadLength; |
GregCr | 17:a0bbfc228415 | 1838 | |
GregCr | 17:a0bbfc228415 | 1839 | Radio.WriteRegister( REG_HIGH_SENSITIVITY, Radio.ReadRegister( REG_HIGH_SENSITIVITY ) | LNA_HIGH_SENSITIVITY_MASK ); |
GregCr | 0:9c0917bfde97 | 1840 | } |
GregCr | 0:9c0917bfde97 | 1841 | if( modulation == PACKET_TYPE_RANGING ) |
GregCr | 0:9c0917bfde97 | 1842 | { |
GregCr | 0:9c0917bfde97 | 1843 | Radio.SetBufferBaseAddresses( 0x00, 0x00 ); |
GregCr | 0:9c0917bfde97 | 1844 | Radio.SetTxParams( Eeprom.EepromData.DemoSettings.TxPower, RADIO_RAMP_20_US ); |
GregCr | 0:9c0917bfde97 | 1845 | memcpy( &( ModulationParams.Params.LoRa.SpreadingFactor ), Eeprom.Buffer + MOD_RNG_SPREADF_EEPROM_ADDR, 1 ); |
GregCr | 0:9c0917bfde97 | 1846 | memcpy( &( ModulationParams.Params.LoRa.Bandwidth ), Eeprom.Buffer + MOD_RNG_BW_EEPROM_ADDR, 1 ); |
GregCr | 5:a0f5842fb337 | 1847 | switch( ModulationParams.Params.LoRa.Bandwidth ) |
GregCr | 0:9c0917bfde97 | 1848 | { |
GregCr | 0:9c0917bfde97 | 1849 | case LORA_BW_0400: |
GregCr | 0:9c0917bfde97 | 1850 | Eeprom.EepromData.DemoSettings.RngCalib = RNG_CALIB_0400[ ( ModulationParams.Params.LoRa.SpreadingFactor >> 4 ) - 5 ]; |
GregCr | 0:9c0917bfde97 | 1851 | Eeprom.EepromData.DemoSettings.RngFeiFactor = ( double )RNG_FGRAD_0400[ ( ModulationParams.Params.LoRa.SpreadingFactor >> 4 ) - 5 ]; |
GregCr | 0:9c0917bfde97 | 1852 | Eeprom.EepromData.DemoSettings.RngReqDelay = RNG_TIMER_MS >> ( 0 + 10 - ( ModulationParams.Params.LoRa.SpreadingFactor >> 4 ) ); |
GregCr | 0:9c0917bfde97 | 1853 | break; |
GregCr | 0:9c0917bfde97 | 1854 | |
GregCr | 0:9c0917bfde97 | 1855 | case LORA_BW_0800: |
GregCr | 0:9c0917bfde97 | 1856 | Eeprom.EepromData.DemoSettings.RngCalib = RNG_CALIB_0800[ ( ModulationParams.Params.LoRa.SpreadingFactor >> 4 ) - 5 ]; |
GregCr | 0:9c0917bfde97 | 1857 | Eeprom.EepromData.DemoSettings.RngFeiFactor = ( double )RNG_FGRAD_0800[ ( ModulationParams.Params.LoRa.SpreadingFactor >> 4 ) - 5 ]; |
GregCr | 0:9c0917bfde97 | 1858 | Eeprom.EepromData.DemoSettings.RngReqDelay = RNG_TIMER_MS >> ( 1 + 10 - ( ModulationParams.Params.LoRa.SpreadingFactor >> 4 ) ); |
GregCr | 0:9c0917bfde97 | 1859 | break; |
GregCr | 0:9c0917bfde97 | 1860 | |
GregCr | 0:9c0917bfde97 | 1861 | case LORA_BW_1600: |
GregCr | 0:9c0917bfde97 | 1862 | Eeprom.EepromData.DemoSettings.RngCalib = RNG_CALIB_1600[ ( ModulationParams.Params.LoRa.SpreadingFactor >> 4 ) - 5 ]; |
GregCr | 0:9c0917bfde97 | 1863 | Eeprom.EepromData.DemoSettings.RngFeiFactor = ( double )RNG_FGRAD_1600[ ( ModulationParams.Params.LoRa.SpreadingFactor >> 4 ) - 5 ]; |
GregCr | 0:9c0917bfde97 | 1864 | Eeprom.EepromData.DemoSettings.RngReqDelay = RNG_TIMER_MS >> ( 2 + 10 - ( ModulationParams.Params.LoRa.SpreadingFactor >> 4 ) ); |
GregCr | 0:9c0917bfde97 | 1865 | break; |
GregCr | 0:9c0917bfde97 | 1866 | } |
GregCr | 17:a0bbfc228415 | 1867 | |
GregCr | 17:a0bbfc228415 | 1868 | Radio.SetPollingMode( ); |
GregCr | 17:a0bbfc228415 | 1869 | Radio.WriteRegister( REG_HIGH_SENSITIVITY, Radio.ReadRegister( REG_HIGH_SENSITIVITY ) & ~LNA_HIGH_SENSITIVITY_MASK ); |
GregCr | 0:9c0917bfde97 | 1870 | } |
GregCr | 0:9c0917bfde97 | 1871 | else |
GregCr | 0:9c0917bfde97 | 1872 | { |
GregCr | 0:9c0917bfde97 | 1873 | Radio.SetStandby( STDBY_RC ); |
GregCr | 0:9c0917bfde97 | 1874 | Radio.SetPacketType( ModulationParams.PacketType ); |
GregCr | 0:9c0917bfde97 | 1875 | Radio.SetRfFrequency( Eeprom.EepromData.DemoSettings.Frequency ); |
GregCr | 0:9c0917bfde97 | 1876 | Radio.SetBufferBaseAddresses( 0x00, 0x00 ); |
GregCr | 0:9c0917bfde97 | 1877 | Radio.SetModulationParams( &ModulationParams ); |
GregCr | 0:9c0917bfde97 | 1878 | Radio.SetPacketParams( &PacketParams ); |
GregCr | 0:9c0917bfde97 | 1879 | // only used in GFSK, FLRC (4 bytes max) and BLE mode |
GregCr | 0:9c0917bfde97 | 1880 | Radio.SetSyncWord( 1, ( uint8_t[] ){ 0xDD, 0xA0, 0x96, 0x69, 0xDD } ); |
GregCr | 0:9c0917bfde97 | 1881 | // only used in GFSK, FLRC |
GregCr | 17:a0bbfc228415 | 1882 | uint8_t crcSeedLocal[2] = {0x45, 0x67}; |
GregCr | 8:c0a5f53fe196 | 1883 | Radio.SetCrcSeed( crcSeedLocal ); |
GregCr | 0:9c0917bfde97 | 1884 | Radio.SetCrcPolynomial( 0x0123 ); |
GregCr | 0:9c0917bfde97 | 1885 | Radio.SetTxParams( Eeprom.EepromData.DemoSettings.TxPower, RADIO_RAMP_20_US ); |
mverdy | 14:ebd89dacc807 | 1886 | Radio.SetPollingMode( ); |
GregCr | 0:9c0917bfde97 | 1887 | } |
GregCr | 0:9c0917bfde97 | 1888 | } |
GregCr | 0:9c0917bfde97 | 1889 | |
GregCr | 0:9c0917bfde97 | 1890 | /*! |
GregCr | 0:9c0917bfde97 | 1891 | * \brief Callback of ticker PerSendNextPacket |
GregCr | 0:9c0917bfde97 | 1892 | */ |
GregCr | 0:9c0917bfde97 | 1893 | void SendNextPacketEvent( void ) |
GregCr | 0:9c0917bfde97 | 1894 | { |
GregCr | 0:9c0917bfde97 | 1895 | SendNext = true; |
GregCr | 0:9c0917bfde97 | 1896 | if( Eeprom.EepromData.DemoSettings.RngStatus == RNG_PROCESS ) |
GregCr | 0:9c0917bfde97 | 1897 | { |
GregCr | 0:9c0917bfde97 | 1898 | Eeprom.EepromData.DemoSettings.CntPacketRxKOSlave++; |
GregCr | 0:9c0917bfde97 | 1899 | } |
GregCr | 0:9c0917bfde97 | 1900 | } |
GregCr | 0:9c0917bfde97 | 1901 | |
GregCr | 17:a0bbfc228415 | 1902 | /*! |
GregCr | 17:a0bbfc228415 | 1903 | * \brief Callback of ticker ReceiveNextPacket |
GregCr | 17:a0bbfc228415 | 1904 | */ |
GregCr | 17:a0bbfc228415 | 1905 | void ReceiveNextPacketEvent( void ) |
GregCr | 17:a0bbfc228415 | 1906 | { |
GregCr | 17:a0bbfc228415 | 1907 | ReceiveNext = true; |
GregCr | 17:a0bbfc228415 | 1908 | } |
GregCr | 17:a0bbfc228415 | 1909 | |
GregCr | 0:9c0917bfde97 | 1910 | uint8_t CheckDistance( void ) |
GregCr | 0:9c0917bfde97 | 1911 | { |
GregCr | 13:94a3f92fd49c | 1912 | double displayRange = 0.0; |
GregCr | 8:c0a5f53fe196 | 1913 | double rssi = Eeprom.EepromData.DemoSettings.RssiValue; |
GregCr | 8:c0a5f53fe196 | 1914 | |
GregCr | 8:c0a5f53fe196 | 1915 | uint16_t j = 0; |
GregCr | 8:c0a5f53fe196 | 1916 | uint16_t i; |
GregCr | 0:9c0917bfde97 | 1917 | |
GregCr | 17:a0bbfc228415 | 1918 | #ifdef PRINT_DEBUG |
GregCr | 0:9c0917bfde97 | 1919 | printf( "#id: %d", Eeprom.EepromData.DemoSettings.CntPacketTx ); |
GregCr | 17:a0bbfc228415 | 1920 | #endif |
GregCr | 0:9c0917bfde97 | 1921 | if( RngResultIndex > 0 ) |
GregCr | 0:9c0917bfde97 | 1922 | { |
GregCr | 0:9c0917bfde97 | 1923 | for( i = 0; i < RngResultIndex; ++i ) |
GregCr | 0:9c0917bfde97 | 1924 | { |
GregCr | 8:c0a5f53fe196 | 1925 | RawRngResults[i] = RawRngResults[i] - ( Eeprom.EepromData.DemoSettings.RngFeiFactor * Eeprom.EepromData.DemoSettings.RngFei / 1000 ); |
GregCr | 0:9c0917bfde97 | 1926 | } |
GregCr | 0:9c0917bfde97 | 1927 | |
GregCr | 8:c0a5f53fe196 | 1928 | for (int i = RngResultIndex - 1; i > 0; --i) |
GregCr | 0:9c0917bfde97 | 1929 | { |
GregCr | 8:c0a5f53fe196 | 1930 | for (int j = 0; j < i; ++j) |
GregCr | 0:9c0917bfde97 | 1931 | { |
GregCr | 8:c0a5f53fe196 | 1932 | if (RawRngResults[j] > RawRngResults[j+1]) |
GregCr | 8:c0a5f53fe196 | 1933 | { |
GregCr | 8:c0a5f53fe196 | 1934 | int temp = RawRngResults[j]; |
GregCr | 8:c0a5f53fe196 | 1935 | RawRngResults[j] = RawRngResults[j+1]; |
GregCr | 8:c0a5f53fe196 | 1936 | RawRngResults[j+1] = temp; |
GregCr | 8:c0a5f53fe196 | 1937 | } |
GregCr | 0:9c0917bfde97 | 1938 | } |
GregCr | 0:9c0917bfde97 | 1939 | } |
GregCr | 8:c0a5f53fe196 | 1940 | double median; |
GregCr | 8:c0a5f53fe196 | 1941 | if ((RngResultIndex % 2) == 0) |
GregCr | 0:9c0917bfde97 | 1942 | { |
GregCr | 8:c0a5f53fe196 | 1943 | median = (RawRngResults[RngResultIndex/2] + RawRngResults[(RngResultIndex/2) - 1])/2.0; |
GregCr | 8:c0a5f53fe196 | 1944 | } |
GregCr | 8:c0a5f53fe196 | 1945 | else |
GregCr | 8:c0a5f53fe196 | 1946 | { |
GregCr | 8:c0a5f53fe196 | 1947 | median = RawRngResults[RngResultIndex/2]; |
GregCr | 0:9c0917bfde97 | 1948 | } |
GregCr | 8:c0a5f53fe196 | 1949 | |
GregCr | 13:94a3f92fd49c | 1950 | if( median < 50 ) |
GregCr | 13:94a3f92fd49c | 1951 | { |
GregCr | 13:94a3f92fd49c | 1952 | // Apply the short range correction and RSSI short range improvement below 50 m |
GregCr | 13:94a3f92fd49c | 1953 | displayRange = t0 + t1 * rssi + t2 * pow(rssi,2) + t3 * pow(rssi, 3) +t4 * median + t5 * pow(median,2) + t6 * pow(median, 3) + t7 * pow(median, 4) ; |
GregCr | 13:94a3f92fd49c | 1954 | } |
GregCr | 13:94a3f92fd49c | 1955 | else |
GregCr | 13:94a3f92fd49c | 1956 | { |
GregCr | 13:94a3f92fd49c | 1957 | displayRange = median; |
GregCr | 13:94a3f92fd49c | 1958 | } |
GregCr | 13:94a3f92fd49c | 1959 | |
GregCr | 0:9c0917bfde97 | 1960 | if( j < DEMO_RNG_CHANNELS_COUNT_MIN ) |
GregCr | 0:9c0917bfde97 | 1961 | { |
GregCr | 0:9c0917bfde97 | 1962 | Eeprom.EepromData.DemoSettings.RngStatus = RNG_PER_ERROR; |
GregCr | 0:9c0917bfde97 | 1963 | } |
GregCr | 0:9c0917bfde97 | 1964 | else |
GregCr | 0:9c0917bfde97 | 1965 | { |
GregCr | 0:9c0917bfde97 | 1966 | Eeprom.EepromData.DemoSettings.RngStatus = RNG_VALID; |
GregCr | 0:9c0917bfde97 | 1967 | } |
GregCr | 8:c0a5f53fe196 | 1968 | |
GregCr | 13:94a3f92fd49c | 1969 | if( displayRange < 0 ) |
GregCr | 0:9c0917bfde97 | 1970 | { |
GregCr | 0:9c0917bfde97 | 1971 | Eeprom.EepromData.DemoSettings.RngDistance = 0.0; |
GregCr | 0:9c0917bfde97 | 1972 | } |
GregCr | 0:9c0917bfde97 | 1973 | else |
GregCr | 0:9c0917bfde97 | 1974 | { |
GregCr | 0:9c0917bfde97 | 1975 | switch( Eeprom.EepromData.DemoSettings.RngUnit ) |
GregCr | 0:9c0917bfde97 | 1976 | { |
GregCr | 0:9c0917bfde97 | 1977 | case DEMO_RNG_UNIT_SEL_M: |
GregCr | 13:94a3f92fd49c | 1978 | Eeprom.EepromData.DemoSettings.RngDistance = displayRange; |
GregCr | 0:9c0917bfde97 | 1979 | break; |
GregCr | 0:9c0917bfde97 | 1980 | |
GregCr | 0:9c0917bfde97 | 1981 | case DEMO_RNG_UNIT_SEL_YD: |
GregCr | 13:94a3f92fd49c | 1982 | Eeprom.EepromData.DemoSettings.RngDistance = displayRange * DEMO_RNG_UNIT_CONV_YD; |
GregCr | 0:9c0917bfde97 | 1983 | break; |
GregCr | 0:9c0917bfde97 | 1984 | |
GregCr | 0:9c0917bfde97 | 1985 | case DEMO_RNG_UNIT_SEL_MI: |
GregCr | 13:94a3f92fd49c | 1986 | Eeprom.EepromData.DemoSettings.RngDistance = displayRange * DEMO_RNG_UNIT_CONV_MI; |
GregCr | 0:9c0917bfde97 | 1987 | break; |
GregCr | 0:9c0917bfde97 | 1988 | } |
GregCr | 0:9c0917bfde97 | 1989 | } |
GregCr | 0:9c0917bfde97 | 1990 | } |
GregCr | 13:94a3f92fd49c | 1991 | printf( ", Rssi: %d, Zn: %3d, Zmoy: %5.1f, FEI: %d\r\n", Eeprom.EepromData.DemoSettings.RssiValue, j, displayRange, ( int32_t )Eeprom.EepromData.DemoSettings.RngFei ); |
GregCr | 0:9c0917bfde97 | 1992 | |
GregCr | 0:9c0917bfde97 | 1993 | return j; |
GregCr | 0:9c0917bfde97 | 1994 | } |
GregCr | 0:9c0917bfde97 | 1995 | |
GregCr | 0:9c0917bfde97 | 1996 | void LedBlink( void ) |
GregCr | 0:9c0917bfde97 | 1997 | { |
GregCr | 0:9c0917bfde97 | 1998 | if( ( TX_LED == 0 ) && ( RX_LED == 0 ) ) |
GregCr | 0:9c0917bfde97 | 1999 | { |
GregCr | 0:9c0917bfde97 | 2000 | TX_LED = 1; |
GregCr | 0:9c0917bfde97 | 2001 | } |
GregCr | 0:9c0917bfde97 | 2002 | else if( ( TX_LED == 1 ) && ( RX_LED == 0 ) ) |
GregCr | 0:9c0917bfde97 | 2003 | { |
GregCr | 0:9c0917bfde97 | 2004 | RX_LED = 1; |
GregCr | 0:9c0917bfde97 | 2005 | } |
GregCr | 0:9c0917bfde97 | 2006 | else if( ( TX_LED == 1 ) && ( RX_LED == 1 ) ) |
GregCr | 0:9c0917bfde97 | 2007 | { |
GregCr | 0:9c0917bfde97 | 2008 | TX_LED = 0; |
GregCr | 0:9c0917bfde97 | 2009 | } |
GregCr | 0:9c0917bfde97 | 2010 | else |
GregCr | 0:9c0917bfde97 | 2011 | { |
GregCr | 0:9c0917bfde97 | 2012 | RX_LED = 0; |
GregCr | 0:9c0917bfde97 | 2013 | } |
GregCr | 0:9c0917bfde97 | 2014 | } |
GregCr | 0:9c0917bfde97 | 2015 | |
GregCr | 0:9c0917bfde97 | 2016 | void SetAntennaSwitch( void ) |
GregCr | 0:9c0917bfde97 | 2017 | { |
GregCr | 0:9c0917bfde97 | 2018 | if( Eeprom.EepromData.DemoSettings.AntennaSwitch == 0 ) |
GregCr | 0:9c0917bfde97 | 2019 | { |
GregCr | 0:9c0917bfde97 | 2020 | ANT_SW = 1; // ANT1 |
GregCr | 0:9c0917bfde97 | 2021 | } |
GregCr | 0:9c0917bfde97 | 2022 | else |
GregCr | 0:9c0917bfde97 | 2023 | { |
GregCr | 0:9c0917bfde97 | 2024 | ANT_SW = 0; // ANT2 |
GregCr | 0:9c0917bfde97 | 2025 | } |
GregCr | 0:9c0917bfde97 | 2026 | } |
GregCr | 0:9c0917bfde97 | 2027 | |
GregCr | 0:9c0917bfde97 | 2028 | // ************************ Radio Callbacks **************************** |
GregCr | 0:9c0917bfde97 | 2029 | // * * |
GregCr | 0:9c0917bfde97 | 2030 | // * These functions are called through function pointer by the Radio low * |
GregCr | 0:9c0917bfde97 | 2031 | // * level drivers * |
GregCr | 0:9c0917bfde97 | 2032 | // * * |
GregCr | 0:9c0917bfde97 | 2033 | // ***************************************************************************** |
GregCr | 0:9c0917bfde97 | 2034 | void OnTxDone( void ) |
GregCr | 0:9c0917bfde97 | 2035 | { |
GregCr | 0:9c0917bfde97 | 2036 | DemoInternalState = APP_TX; |
GregCr | 0:9c0917bfde97 | 2037 | } |
GregCr | 0:9c0917bfde97 | 2038 | |
GregCr | 0:9c0917bfde97 | 2039 | void OnRxDone( void ) |
GregCr | 0:9c0917bfde97 | 2040 | { |
GregCr | 0:9c0917bfde97 | 2041 | DemoInternalState = APP_RX; |
GregCr | 0:9c0917bfde97 | 2042 | } |
GregCr | 0:9c0917bfde97 | 2043 | |
GregCr | 0:9c0917bfde97 | 2044 | void OnTxTimeout( void ) |
GregCr | 0:9c0917bfde97 | 2045 | { |
GregCr | 0:9c0917bfde97 | 2046 | DemoInternalState = APP_TX_TIMEOUT; |
GregCr | 0:9c0917bfde97 | 2047 | } |
GregCr | 0:9c0917bfde97 | 2048 | |
GregCr | 0:9c0917bfde97 | 2049 | void OnRxTimeout( void ) |
GregCr | 0:9c0917bfde97 | 2050 | { |
GregCr | 0:9c0917bfde97 | 2051 | DemoInternalState = APP_RX_TIMEOUT; |
GregCr | 0:9c0917bfde97 | 2052 | } |
GregCr | 0:9c0917bfde97 | 2053 | |
GregCr | 0:9c0917bfde97 | 2054 | void OnRxError( IrqErrorCode_t errorCode ) |
GregCr | 0:9c0917bfde97 | 2055 | { |
GregCr | 0:9c0917bfde97 | 2056 | DemoInternalState = APP_RX_ERROR; |
GregCr | 0:9c0917bfde97 | 2057 | } |
GregCr | 0:9c0917bfde97 | 2058 | |
GregCr | 0:9c0917bfde97 | 2059 | void OnRangingDone( IrqRangingCode_t val ) |
GregCr | 0:9c0917bfde97 | 2060 | { |
GregCr | 0:9c0917bfde97 | 2061 | if( val == IRQ_RANGING_MASTER_VALID_CODE || val == IRQ_RANGING_SLAVE_VALID_CODE ) |
GregCr | 0:9c0917bfde97 | 2062 | { |
GregCr | 0:9c0917bfde97 | 2063 | DemoInternalState = APP_RANGING_DONE; |
GregCr | 0:9c0917bfde97 | 2064 | } |
GregCr | 0:9c0917bfde97 | 2065 | else if( val == IRQ_RANGING_MASTER_ERROR_CODE || val == IRQ_RANGING_SLAVE_ERROR_CODE ) |
GregCr | 0:9c0917bfde97 | 2066 | { |
GregCr | 0:9c0917bfde97 | 2067 | DemoInternalState = APP_RANGING_TIMEOUT; |
GregCr | 0:9c0917bfde97 | 2068 | } |
GregCr | 0:9c0917bfde97 | 2069 | else |
GregCr | 0:9c0917bfde97 | 2070 | { |
GregCr | 0:9c0917bfde97 | 2071 | DemoInternalState = APP_RANGING_TIMEOUT; |
GregCr | 0:9c0917bfde97 | 2072 | } |
GregCr | 0:9c0917bfde97 | 2073 | } |
GregCr | 0:9c0917bfde97 | 2074 | |
GregCr | 0:9c0917bfde97 | 2075 | void OnCadDone( bool channelActivityDetected ) |
GregCr | 0:9c0917bfde97 | 2076 | { |
GregCr | 0:9c0917bfde97 | 2077 | } |