kopia lustrzana https://github.com/jgromes/RadioLib
[SX127x] Sync with LoRaLib v7.1.0
rodzic
2edddf18ea
commit
5b4685ac8d
|
@ -77,6 +77,7 @@ setFrequencyDeviation KEYWORD2
|
|||
setNodeAddress KEYWORD2
|
||||
setBroadcastAddress KEYWORD2
|
||||
disableAddressFiltering KEYWORD2
|
||||
setDataShaping KEYWORD2
|
||||
|
||||
# RF69-specific
|
||||
setAESKey KEYWORD2
|
||||
|
@ -151,6 +152,7 @@ ERR_INVALID_FREQUENCY_DEVIATION LITERAL1
|
|||
ERR_INVALID_BIT_RATE_BW_RATIO LITERAL1
|
||||
ERR_INVALID_RX_BANDWIDTH LITERAL1
|
||||
ERR_INVALID_SYNC_WORD LITERAL1
|
||||
ERR_INVALID_DATA_SHAPING LITERAL1
|
||||
|
||||
ERR_AT_FAILED LITERAL1
|
||||
ERR_URL_MALFORMED LITERAL1
|
||||
|
|
|
@ -87,6 +87,7 @@
|
|||
#define ERR_INVALID_BIT_RATE_BW_RATIO -103
|
||||
#define ERR_INVALID_RX_BANDWIDTH -104
|
||||
#define ERR_INVALID_SYNC_WORD -105
|
||||
#define ERR_INVALID_DATA_SHAPING -106
|
||||
|
||||
// ESP8266 status codes
|
||||
#define ERR_AT_FAILED -201
|
||||
|
|
|
@ -58,7 +58,7 @@ int16_t SX1272::begin(float freq, float bw, uint8_t sf, uint8_t cr, uint8_t sync
|
|||
return(state);
|
||||
}
|
||||
|
||||
int16_t SX1272::beginFSK(float freq, float br, float rxBw, float freqDev, int8_t power, uint8_t currentLimit) {
|
||||
int16_t SX1272::beginFSK(float freq, float br, float rxBw, float freqDev, int8_t power, uint8_t currentLimit, float sh) {
|
||||
// execute common part
|
||||
int16_t state = SX127x::beginFSK(SX1272_CHIP_VERSION, br, rxBw, freqDev, currentLimit);
|
||||
if(state != ERR_NONE) {
|
||||
|
@ -82,6 +82,11 @@ int16_t SX1272::beginFSK(float freq, float br, float rxBw, float freqDev, int8_t
|
|||
return(state);
|
||||
}
|
||||
|
||||
state = setDataShaping(sh);
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
||||
return(state);
|
||||
}
|
||||
|
||||
|
@ -257,6 +262,30 @@ int16_t SX1272::setGain(uint8_t gain) {
|
|||
return(state);
|
||||
}
|
||||
|
||||
int16_t SX1272::setDataShaping(float sh) {
|
||||
// check active modem
|
||||
if(getActiveModem() != SX127X_FSK_OOK) {
|
||||
return(ERR_WRONG_MODEM);
|
||||
}
|
||||
|
||||
// set mode to standby
|
||||
int16_t state = SX127x::standby();
|
||||
|
||||
// set data shaping
|
||||
if(abs(sh - 0.0) <= 0.001) {
|
||||
state |= _mod->SPIsetRegValue(SX127X_REG_OP_MODE, SX1272_NO_SHAPING, 4, 3);
|
||||
} else if(abs(sh - 0.3) <= 0.001) {
|
||||
state |= _mod->SPIsetRegValue(SX127X_REG_OP_MODE, SX1272_FSK_GAUSSIAN_0_3, 4, 3);
|
||||
} else if(abs(sh - 0.5) <= 0.001) {
|
||||
state |= _mod->SPIsetRegValue(SX127X_REG_OP_MODE, SX1272_FSK_GAUSSIAN_0_5, 4, 3);
|
||||
} else if(abs(sh - 1.0) <= 0.001) {
|
||||
state |= _mod->SPIsetRegValue(SX127X_REG_OP_MODE, SX1272_FSK_GAUSSIAN_1_0, 4, 3);
|
||||
} else {
|
||||
return(ERR_INVALID_DATA_SHAPING);
|
||||
}
|
||||
return(state);
|
||||
}
|
||||
|
||||
int8_t SX1272::getRSSI() {
|
||||
// check active modem
|
||||
if(getActiveModem() != SX127X_LORA) {
|
||||
|
@ -337,12 +366,6 @@ int16_t SX1272::configFSK() {
|
|||
return(state);
|
||||
}
|
||||
|
||||
// set data shaping
|
||||
state = _mod->SPIsetRegValue(SX127X_REG_PA_RAMP, SX1272_FSK_GAUSSIAN_0_3, 6, 5);
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
||||
// set fast PLL hop
|
||||
state = _mod->SPIsetRegValue(SX1272_REG_PLL_HOP, SX127X_FAST_HOP_ON, 7, 7);
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@ class SX1272: public SX127x {
|
|||
|
||||
// basic methods
|
||||
int16_t begin(float freq = 915.0, float bw = 125.0, uint8_t sf = 9, uint8_t cr = 7, uint8_t syncWord = SX127X_SYNC_WORD, int8_t power = 17, uint8_t currentLimit = 100, uint16_t preambleLength = 8, uint8_t gain = 0);
|
||||
int16_t beginFSK(float freq = 434.0, float br = 48.0, float rxBw = 125.0, float freqDev = 50.0, int8_t power = 13, uint8_t currentLimit = 100);
|
||||
int16_t beginFSK(float freq = 434.0, float br = 48.0, float rxBw = 125.0, float freqDev = 50.0, int8_t power = 13, uint8_t currentLimit = 100, float sh = 0.3);
|
||||
|
||||
// configuration methods
|
||||
int16_t setFrequency(float freq);
|
||||
|
@ -99,6 +99,7 @@ class SX1272: public SX127x {
|
|||
int16_t setCodingRate(uint8_t cr);
|
||||
int16_t setOutputPower(int8_t power);
|
||||
int16_t setGain(uint8_t gain);
|
||||
int16_t setDataShaping(float sh);
|
||||
int8_t getRSSI();
|
||||
|
||||
protected:
|
||||
|
|
|
@ -51,7 +51,7 @@ int16_t SX1278::begin(float freq, float bw, uint8_t sf, uint8_t cr, uint8_t sync
|
|||
return(state);
|
||||
}
|
||||
|
||||
int16_t SX1278::beginFSK(float freq, float br, float freqDev, float rxBw, int8_t power, uint8_t currentLimit) {
|
||||
int16_t SX1278::beginFSK(float freq, float br, float freqDev, float rxBw, int8_t power, uint8_t currentLimit, float sh) {
|
||||
// execute common part
|
||||
int16_t state = SX127x::beginFSK(SX1278_CHIP_VERSION, br, freqDev, rxBw, currentLimit);
|
||||
if(state != ERR_NONE) {
|
||||
|
@ -75,6 +75,11 @@ int16_t SX1278::beginFSK(float freq, float br, float freqDev, float rxBw, int8_t
|
|||
return(state);
|
||||
}
|
||||
|
||||
state = setDataShaping(sh);
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
||||
return(state);
|
||||
}
|
||||
|
||||
|
@ -327,6 +332,30 @@ int16_t SX1278::setGain(uint8_t gain) {
|
|||
return(state);
|
||||
}
|
||||
|
||||
int16_t SX1278::setDataShaping(float sh) {
|
||||
// check active modem
|
||||
if(getActiveModem() != SX127X_FSK_OOK) {
|
||||
return(ERR_WRONG_MODEM);
|
||||
}
|
||||
|
||||
// set mode to standby
|
||||
int16_t state = SX127x::standby();
|
||||
|
||||
// set data shaping
|
||||
if(abs(sh - 0.0) <= 0.001) {
|
||||
state |= _mod->SPIsetRegValue(SX127X_REG_PA_RAMP, SX1278_NO_SHAPING, 6, 5);
|
||||
} else if(abs(sh - 0.3) <= 0.001) {
|
||||
state |= _mod->SPIsetRegValue(SX127X_REG_PA_RAMP, SX1278_FSK_GAUSSIAN_0_3, 6, 5);
|
||||
} else if(abs(sh - 0.5) <= 0.001) {
|
||||
state |= _mod->SPIsetRegValue(SX127X_REG_PA_RAMP, SX1278_FSK_GAUSSIAN_0_5, 6, 5);
|
||||
} else if(abs(sh - 1.0) <= 0.001) {
|
||||
state |= _mod->SPIsetRegValue(SX127X_REG_PA_RAMP, SX1278_FSK_GAUSSIAN_1_0, 6, 5);
|
||||
} else {
|
||||
return(ERR_INVALID_DATA_SHAPING);
|
||||
}
|
||||
return(state);
|
||||
}
|
||||
|
||||
int8_t SX1278::getRSSI() {
|
||||
// check active modem
|
||||
if(getActiveModem() != SX127X_LORA) {
|
||||
|
@ -414,12 +443,6 @@ int16_t SX1278::configFSK() {
|
|||
return(state);
|
||||
}
|
||||
|
||||
// set data shaping
|
||||
state = _mod->SPIsetRegValue(SX127X_REG_PA_RAMP, SX1278_FSK_GAUSSIAN_0_3, 6, 5);
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
||||
// set fast PLL hop
|
||||
state = _mod->SPIsetRegValue(SX1278_REG_PLL_HOP, SX127X_FAST_HOP_ON, 7, 7);
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ class SX1278: public SX127x {
|
|||
|
||||
// basic methods
|
||||
int16_t begin(float freq = 434.0, float bw = 125.0, uint8_t sf = 9, uint8_t cr = 7, uint8_t syncWord = SX127X_SYNC_WORD, int8_t power = 17, uint8_t currentLimit = 100, uint16_t preambleLength = 8, uint8_t gain = 0);
|
||||
int16_t beginFSK(float freq = 434.0, float br = 48.0, float freqDev = 50.0, float rxBw = 125.0, int8_t power = 13, uint8_t currentLimit = 100);
|
||||
int16_t beginFSK(float freq = 434.0, float br = 48.0, float freqDev = 50.0, float rxBw = 125.0, int8_t power = 13, uint8_t currentLimit = 100, float sh = 0.3);
|
||||
|
||||
// configuration methods
|
||||
int16_t setFrequency(float freq);
|
||||
|
@ -108,6 +108,7 @@ class SX1278: public SX127x {
|
|||
int16_t setCodingRate(uint8_t cr);
|
||||
int16_t setOutputPower(int8_t power);
|
||||
int16_t setGain(uint8_t gain);
|
||||
int16_t setDataShaping(float sh);
|
||||
int8_t getRSSI();
|
||||
|
||||
protected:
|
||||
|
|
|
@ -136,7 +136,7 @@ int16_t SX127x::transmit(uint8_t* data, size_t len, uint8_t addr) {
|
|||
}
|
||||
float ih = (float)_mod->SPIgetRegValue(SX127X_REG_MODEM_CONFIG_1, 0, 0);
|
||||
float crc = (float)(_mod->SPIgetRegValue(SX127X_REG_MODEM_CONFIG_2, 2, 2) >> 2);
|
||||
float n_pre = (float)_mod->SPIgetRegValue(SX127X_REG_PREAMBLE_LSB);
|
||||
float n_pre = (float)((_mod->SPIgetRegValue(SX127X_REG_PREAMBLE_MSB) << 8) | _mod->SPIgetRegValue(SX127X_REG_PREAMBLE_LSB));
|
||||
float n_pay = 8.0 + max(ceil((8.0 * (float)len - 4.0 * (float)_sf + 28.0 + 16.0 * crc - 20.0 * ih)/(4.0 * (float)_sf - 8.0 * de)) * (float)_cr, 0.0);
|
||||
uint32_t timeout = ceil(symbolLength * (n_pre + n_pay + 4.25) * 1.5);
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue