Driver for the SX1280 RF Transceiver

Dependents:   SX1280PingPong RangignMaster RangingSlave MSNV2-Terminal_V1-6 ... more

Committer:
mverdy
Date:
Thu Nov 08 10:08:44 2018 +0000
Revision:
12:c4f110f3fe3e
Synchronze driver on v1.3.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mverdy 12:c4f110f3fe3e 1 #include "RangingCorrection.h"
mverdy 12:c4f110f3fe3e 2
mverdy 12:c4f110f3fe3e 3 #include "rangingCorrection/rangingCorrectionSF5BW0400.h"
mverdy 12:c4f110f3fe3e 4 #include "rangingCorrection/rangingCorrectionSF6BW0400.h"
mverdy 12:c4f110f3fe3e 5 #include "rangingCorrection/rangingCorrectionSF7BW0400.h"
mverdy 12:c4f110f3fe3e 6 #include "rangingCorrection/rangingCorrectionSF8BW0400.h"
mverdy 12:c4f110f3fe3e 7 #include "rangingCorrection/rangingCorrectionSF9BW0400.h"
mverdy 12:c4f110f3fe3e 8 #include "rangingCorrection/rangingCorrectionSF10BW0400.h"
mverdy 12:c4f110f3fe3e 9 #include "rangingCorrection/rangingCorrectionSF5BW0800.h"
mverdy 12:c4f110f3fe3e 10 #include "rangingCorrection/rangingCorrectionSF6BW0800.h"
mverdy 12:c4f110f3fe3e 11 #include "rangingCorrection/rangingCorrectionSF7BW0800.h"
mverdy 12:c4f110f3fe3e 12 #include "rangingCorrection/rangingCorrectionSF8BW0800.h"
mverdy 12:c4f110f3fe3e 13 #include "rangingCorrection/rangingCorrectionSF9BW0800.h"
mverdy 12:c4f110f3fe3e 14 #include "rangingCorrection/rangingCorrectionSF10BW0800.h"
mverdy 12:c4f110f3fe3e 15 #include "rangingCorrection/rangingCorrectionSF5BW1600.h"
mverdy 12:c4f110f3fe3e 16 #include "rangingCorrection/rangingCorrectionSF6BW1600.h"
mverdy 12:c4f110f3fe3e 17 #include "rangingCorrection/rangingCorrectionSF7BW1600.h"
mverdy 12:c4f110f3fe3e 18 #include "rangingCorrection/rangingCorrectionSF8BW1600.h"
mverdy 12:c4f110f3fe3e 19 #include "rangingCorrection/rangingCorrectionSF9BW1600.h"
mverdy 12:c4f110f3fe3e 20 #include "rangingCorrection/rangingCorrectionSF10BW1600.h"
mverdy 12:c4f110f3fe3e 21
mverdy 12:c4f110f3fe3e 22 const double* RangingCorrectionPerSfBwGain[6][3] = {
mverdy 12:c4f110f3fe3e 23 { &RangingCorrectionSF5BW0400[0], &RangingCorrectionSF5BW0800[0], &RangingCorrectionSF5BW1600[0] },
mverdy 12:c4f110f3fe3e 24 { &RangingCorrectionSF6BW0400[0], &RangingCorrectionSF6BW0800[0], &RangingCorrectionSF6BW1600[0] },
mverdy 12:c4f110f3fe3e 25 { &RangingCorrectionSF7BW0400[0], &RangingCorrectionSF7BW0800[0], &RangingCorrectionSF7BW1600[0] },
mverdy 12:c4f110f3fe3e 26 { &RangingCorrectionSF8BW0400[0], &RangingCorrectionSF8BW0800[0], &RangingCorrectionSF8BW1600[0] },
mverdy 12:c4f110f3fe3e 27 { &RangingCorrectionSF9BW0400[0], &RangingCorrectionSF9BW0800[0], &RangingCorrectionSF9BW1600[0] },
mverdy 12:c4f110f3fe3e 28 { &RangingCorrectionSF10BW0400[0], &RangingCorrectionSF10BW0800[0], &RangingCorrectionSF10BW1600[0] },
mverdy 12:c4f110f3fe3e 29 };
mverdy 12:c4f110f3fe3e 30
mverdy 12:c4f110f3fe3e 31 const RangingCorrectionPolynomes_t* RangingCorrectionPolynomesPerSfBw[6][3] = {
mverdy 12:c4f110f3fe3e 32 { &correctionRangingPolynomeSF5BW0400, &correctionRangingPolynomeSF5BW0800, &correctionRangingPolynomeSF5BW1600 },
mverdy 12:c4f110f3fe3e 33 { &correctionRangingPolynomeSF6BW0400, &correctionRangingPolynomeSF6BW0800, &correctionRangingPolynomeSF6BW1600 },
mverdy 12:c4f110f3fe3e 34 { &correctionRangingPolynomeSF7BW0400, &correctionRangingPolynomeSF7BW0800, &correctionRangingPolynomeSF7BW1600 },
mverdy 12:c4f110f3fe3e 35 { &correctionRangingPolynomeSF8BW0400, &correctionRangingPolynomeSF8BW0800, &correctionRangingPolynomeSF8BW1600 },
mverdy 12:c4f110f3fe3e 36 { &correctionRangingPolynomeSF9BW0400, &correctionRangingPolynomeSF9BW0800, &correctionRangingPolynomeSF9BW1600 },
mverdy 12:c4f110f3fe3e 37 { &correctionRangingPolynomeSF10BW0400, &correctionRangingPolynomeSF10BW0800, &correctionRangingPolynomeSF10BW1600 },
mverdy 12:c4f110f3fe3e 38 };
mverdy 12:c4f110f3fe3e 39
mverdy 12:c4f110f3fe3e 40 double Sx1280RangingCorrection::GetRangingCorrectionPerSfBwGain( const RadioLoRaSpreadingFactors_t sf, const RadioLoRaBandwidths_t bw, const int8_t gain){
mverdy 12:c4f110f3fe3e 41 uint8_t sf_index, bw_index;
mverdy 12:c4f110f3fe3e 42
mverdy 12:c4f110f3fe3e 43 switch(sf){
mverdy 12:c4f110f3fe3e 44 case LORA_SF5:
mverdy 12:c4f110f3fe3e 45 sf_index = 0;
mverdy 12:c4f110f3fe3e 46 break;
mverdy 12:c4f110f3fe3e 47 case LORA_SF6:
mverdy 12:c4f110f3fe3e 48 sf_index = 1;
mverdy 12:c4f110f3fe3e 49 break;
mverdy 12:c4f110f3fe3e 50 case LORA_SF7:
mverdy 12:c4f110f3fe3e 51 sf_index = 2;
mverdy 12:c4f110f3fe3e 52 break;
mverdy 12:c4f110f3fe3e 53 case LORA_SF8:
mverdy 12:c4f110f3fe3e 54 sf_index = 3;
mverdy 12:c4f110f3fe3e 55 break;
mverdy 12:c4f110f3fe3e 56 case LORA_SF9:
mverdy 12:c4f110f3fe3e 57 sf_index = 4;
mverdy 12:c4f110f3fe3e 58 break;
mverdy 12:c4f110f3fe3e 59 case LORA_SF10:
mverdy 12:c4f110f3fe3e 60 sf_index = 5;
mverdy 12:c4f110f3fe3e 61 break;
mverdy 12:c4f110f3fe3e 62 }
mverdy 12:c4f110f3fe3e 63 switch(bw){
mverdy 12:c4f110f3fe3e 64 case LORA_BW_0400:
mverdy 12:c4f110f3fe3e 65 bw_index = 0;
mverdy 12:c4f110f3fe3e 66 break;
mverdy 12:c4f110f3fe3e 67 case LORA_BW_0800:
mverdy 12:c4f110f3fe3e 68 bw_index = 1;
mverdy 12:c4f110f3fe3e 69 break;
mverdy 12:c4f110f3fe3e 70 case LORA_BW_1600:
mverdy 12:c4f110f3fe3e 71 bw_index = 2;
mverdy 12:c4f110f3fe3e 72 break;
mverdy 12:c4f110f3fe3e 73 }
mverdy 12:c4f110f3fe3e 74
mverdy 12:c4f110f3fe3e 75 double correction = RangingCorrectionPerSfBwGain[sf_index][bw_index][gain];
mverdy 12:c4f110f3fe3e 76 return correction;
mverdy 12:c4f110f3fe3e 77 }
mverdy 12:c4f110f3fe3e 78
mverdy 12:c4f110f3fe3e 79 double Sx1280RangingCorrection::ComputeRangingCorrectionPolynome(const RadioLoRaSpreadingFactors_t sf, const RadioLoRaBandwidths_t bw, const double median){
mverdy 12:c4f110f3fe3e 80 uint8_t sf_index, bw_index;
mverdy 12:c4f110f3fe3e 81
mverdy 12:c4f110f3fe3e 82 switch(sf){
mverdy 12:c4f110f3fe3e 83 case LORA_SF5:
mverdy 12:c4f110f3fe3e 84 sf_index = 0;
mverdy 12:c4f110f3fe3e 85 break;
mverdy 12:c4f110f3fe3e 86 case LORA_SF6:
mverdy 12:c4f110f3fe3e 87 sf_index = 1;
mverdy 12:c4f110f3fe3e 88 break;
mverdy 12:c4f110f3fe3e 89 case LORA_SF7:
mverdy 12:c4f110f3fe3e 90 sf_index = 2;
mverdy 12:c4f110f3fe3e 91 break;
mverdy 12:c4f110f3fe3e 92 case LORA_SF8:
mverdy 12:c4f110f3fe3e 93 sf_index = 3;
mverdy 12:c4f110f3fe3e 94 break;
mverdy 12:c4f110f3fe3e 95 case LORA_SF9:
mverdy 12:c4f110f3fe3e 96 sf_index = 4;
mverdy 12:c4f110f3fe3e 97 break;
mverdy 12:c4f110f3fe3e 98 case LORA_SF10:
mverdy 12:c4f110f3fe3e 99 sf_index = 5;
mverdy 12:c4f110f3fe3e 100 break;
mverdy 12:c4f110f3fe3e 101 }
mverdy 12:c4f110f3fe3e 102 switch(bw){
mverdy 12:c4f110f3fe3e 103 case LORA_BW_0400:
mverdy 12:c4f110f3fe3e 104 bw_index = 0;
mverdy 12:c4f110f3fe3e 105 break;
mverdy 12:c4f110f3fe3e 106 case LORA_BW_0800:
mverdy 12:c4f110f3fe3e 107 bw_index = 1;
mverdy 12:c4f110f3fe3e 108 break;
mverdy 12:c4f110f3fe3e 109 case LORA_BW_1600:
mverdy 12:c4f110f3fe3e 110 bw_index = 2;
mverdy 12:c4f110f3fe3e 111 break;
mverdy 12:c4f110f3fe3e 112 }
mverdy 12:c4f110f3fe3e 113 const RangingCorrectionPolynomes_t *polynome = RangingCorrectionPolynomesPerSfBw[sf_index][bw_index];
mverdy 12:c4f110f3fe3e 114 double correctedValue = 0.0;
mverdy 12:c4f110f3fe3e 115 double correctionCoeff = 0;
mverdy 12:c4f110f3fe3e 116 for(uint8_t order = 0; order < polynome->order; order++){
mverdy 12:c4f110f3fe3e 117 correctionCoeff = polynome->coefficients[order] * pow(median, polynome->order - order - 1);
mverdy 12:c4f110f3fe3e 118 correctedValue += correctionCoeff;
mverdy 12:c4f110f3fe3e 119 }
mverdy 12:c4f110f3fe3e 120 return correctedValue;
mverdy 12:c4f110f3fe3e 121 }