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