
1st Fork
Dependencies: mbed QEI DmTftLibrary
Diff: Demo/DemoApplication.cpp
- Revision:
- 19:45d0ce0f0677
- Parent:
- 18:22796c3be774
--- a/Demo/DemoApplication.cpp Fri Aug 24 08:01:53 2018 +0000 +++ b/Demo/DemoApplication.cpp Thu Nov 08 10:13:23 2018 +0000 @@ -19,6 +19,7 @@ #include "Eeprom.h" #include "DemoApplication.h" #include "FreqLUT.h" +#include "RangingCorrection.h" #define max(a,b) \ ({ __typeof__ (a) _a = (a); \ @@ -35,6 +36,14 @@ double t7 = 0.000009240142234; // X2^4 +double p[8] = { 0, + -4.1e-9, + 1.03e-7, + 1.971e-5, + -0.00107, + 0.018757, + 0.869171, + 3.072450 }; /*! * \brief Defines the local payload buffer size @@ -346,7 +355,6 @@ InitializeDemoParameters( Eeprom.EepromData.DemoSettings.ModulationType ); TX_LED = 0; RX_LED = 0; - IrqMask = IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT; Radio.SetDioIrqParams( IrqMask, IrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); for( i = 0; i < localPayloadSize; i++ ) @@ -1054,8 +1062,8 @@ if( Eeprom.EepromData.DemoSettings.Entity == MASTER ) { Eeprom.EepromData.DemoSettings.TimeOnAir = RX_TX_INTER_PACKET_DELAY; - Radio.SetDioIrqParams( IRQ_RADIO_ALL /*IRQ_RX_DONE | IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT | IRQ_RANGING_MASTER_RESULT_VALID | IRQ_RANGING_MASTER_ERROR_CODE*/, - IRQ_RADIO_ALL /*IRQ_RX_DONE | IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT | IRQ_RANGING_MASTER_RESULT_VALID | IRQ_RANGING_MASTER_ERROR_CODE*/, + Radio.SetDioIrqParams( IRQ_RX_DONE | IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT | IRQ_RANGING_MASTER_RESULT_VALID | IRQ_RANGING_MASTER_TIMEOUT, + IRQ_RX_DONE | IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT | IRQ_RANGING_MASTER_RESULT_VALID | IRQ_RANGING_MASTER_TIMEOUT, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); Eeprom.EepromData.DemoSettings.RngDistance = 0.0; DemoInternalState = APP_RANGING_CONFIG; @@ -1130,8 +1138,8 @@ } break; - case DEMO_RNG_ANT_2: - //ANT_SW = 0; // ANT2 + case DEMO_RNG_ANT_0: + //ANT_SW = 0; // ANT0 Eeprom.EepromData.DemoSettings.AntennaSwitch = 1; CurrentChannel++; if( CurrentChannel >= CHANNELS ) @@ -1170,13 +1178,21 @@ Eeprom.EepromData.DemoSettings.HoldDemo = true; SendNext = false; DemoInternalState = APP_RANGING_CONFIG; + Eeprom.EepromData.DemoSettings.RngStatus = RNG_INIT; } } break; case APP_RANGING_DONE: TX_LED = 0; - RawRngResults[RngResultIndex++] = Radio.GetRangingResult( RANGING_RESULT_RAW ); + RawRngResults[RngResultIndex] = Radio.GetRangingResult( RANGING_RESULT_RAW ); + RawRngResults[RngResultIndex] += Sx1280RangingCorrection::GetRangingCorrectionPerSfBwGain( + ModulationParams.Params.LoRa.SpreadingFactor, + ModulationParams.Params.LoRa.Bandwidth, + Radio.GetRangingPowerDeltaThresholdIndicator( ) + ); + RngResultIndex++; + Eeprom.EepromData.DemoSettings.CntPacketRxOK++; DemoInternalState = APP_RNG; break; @@ -1327,8 +1343,8 @@ } break; - case DEMO_RNG_ANT_2: - //ANT_SW = 0; // ANT2 + case DEMO_RNG_ANT_0: + //ANT_SW = 0; // ANT0 Eeprom.EepromData.DemoSettings.AntennaSwitch = 1; CurrentChannel++; if( CurrentChannel >= CHANNELS ) @@ -1409,6 +1425,10 @@ Radio.SendPayload( Buffer, 9, ( TickTime_t ){ RADIO_TICK_SIZE_1000_US, RNG_COM_TIMEOUT } ); DemoInternalState = APP_IDLE; } + else + { + DemoInternalState = APP_RANGING_CONFIG; + } } else { @@ -1790,7 +1810,7 @@ Eeprom.EepromData.DemoSettings.PayloadLength = PacketParams.Params.LoRa.PayloadLength; - Radio.WriteRegister( REG_HIGH_SENSITIVITY, Radio.ReadRegister( REG_HIGH_SENSITIVITY ) & ~LNA_HIGH_SENSITIVITY_MASK ); + Radio.SetLNAGainSetting(LNA_LOW_POWER_MODE); } else if( modulation == PACKET_TYPE_FLRC ) { @@ -1813,7 +1833,7 @@ Eeprom.EepromData.DemoSettings.PayloadLength = PacketParams.Params.Flrc.PayloadLength; - Radio.WriteRegister( REG_HIGH_SENSITIVITY, Radio.ReadRegister( REG_HIGH_SENSITIVITY ) | LNA_HIGH_SENSITIVITY_MASK ); + Radio.SetLNAGainSetting(LNA_HIGH_SENSITIVITY_MODE); } else if( modulation == PACKET_TYPE_GFSK ) { @@ -1835,8 +1855,8 @@ PacketParams.Params.Gfsk.Whitening = ( RadioWhiteningModes_t ) Eeprom.EepromData.DemoSettings.PacketParam7; Eeprom.EepromData.DemoSettings.PayloadLength = PacketParams.Params.Gfsk.PayloadLength; - - Radio.WriteRegister( REG_HIGH_SENSITIVITY, Radio.ReadRegister( REG_HIGH_SENSITIVITY ) | LNA_HIGH_SENSITIVITY_MASK ); + + Radio.SetLNAGainSetting(LNA_HIGH_SENSITIVITY_MODE); } if( modulation == PACKET_TYPE_RANGING ) { @@ -1866,7 +1886,7 @@ } Radio.SetPollingMode( ); - Radio.WriteRegister( REG_HIGH_SENSITIVITY, Radio.ReadRegister( REG_HIGH_SENSITIVITY ) & ~LNA_HIGH_SENSITIVITY_MASK ); + Radio.SetLNAGainSetting(LNA_LOW_POWER_MODE); } else { @@ -1910,7 +1930,6 @@ uint8_t CheckDistance( void ) { double displayRange = 0.0; - double rssi = Eeprom.EepromData.DemoSettings.RssiValue; uint16_t j = 0; uint16_t i; @@ -1941,16 +1960,34 @@ if ((RngResultIndex % 2) == 0) { median = (RawRngResults[RngResultIndex/2] + RawRngResults[(RngResultIndex/2) - 1])/2.0; - } - else + } + else { median = RawRngResults[RngResultIndex/2]; } - if( median < 50 ) + if( median < 100 ) { + printf("median: %f \n\r", median ); // Apply the short range correction and RSSI short range improvement below 50 m - 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) ; + displayRange = Sx1280RangingCorrection::ComputeRangingCorrectionPolynome( + ModulationParams.Params.LoRa.SpreadingFactor, + ModulationParams.Params.LoRa.Bandwidth, + median + ); + printf("Corrected range: %f \n\r", displayRange ); + //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) ; + //printf("displayRange %f \n\r", displayRange ); +// double correctedRange = 0; +// uint8_t k = 0; +// uint8_t order = 6; +// for( k = 1; k <= (order+1); k++ ) // loop though each polynomial term and sum +// { +// correctedRange = correctedRange + p[k] * pow( median, ( order + 1 - k ) ); +// printf("correctedRange[%d] %f \n\r", k, correctedRange ); +// } +// printf("Final correctedRange %f \n\r", correctedRange ); +// displayRange = correctedRange - 2; } else { @@ -2021,7 +2058,7 @@ } else { - ANT_SW = 0; // ANT2 + ANT_SW = 0; // ANT0 } }