SX127x - Updated comments
This commit is contained in:
parent
2e85c23cbd
commit
10f32c8b5c
16 changed files with 62 additions and 5 deletions
|
@ -25,6 +25,13 @@ void setup() {
|
|||
|
||||
// initialize SX1278 with default settings
|
||||
Serial.print(F("[SX1278] Initializing ... "));
|
||||
// carrier frequency: 434.0 MHz
|
||||
// bandwidth: 125.0 kHz
|
||||
// spreading factor: 9
|
||||
// coding rate: 7
|
||||
// sync word: 0x12
|
||||
// output power: 17 dBm
|
||||
// node address in EEPROM starts at: 0
|
||||
byte state = lora.begin();
|
||||
if(state == ERR_NONE) {
|
||||
Serial.println(F("success!"));
|
||||
|
|
|
@ -26,6 +26,13 @@ void setup() {
|
|||
|
||||
// initialize SX1278 with default settings
|
||||
Serial.print(F("[SX1278] Initializing ... "));
|
||||
// carrier frequency: 434.0 MHz
|
||||
// bandwidth: 125.0 kHz
|
||||
// spreading factor: 9
|
||||
// coding rate: 7
|
||||
// sync word: 0x12
|
||||
// output power: 17 dBm
|
||||
// node address in EEPROM starts at: 0
|
||||
byte state = lora.begin();
|
||||
if(state == ERR_NONE) {
|
||||
Serial.println(F("success!"));
|
||||
|
|
|
@ -52,6 +52,7 @@ uint8_t SX1272::setFrequency(float freq) {
|
|||
return(ERR_INVALID_FREQUENCY);
|
||||
}
|
||||
|
||||
// set frequency and if successful, save the new setting
|
||||
uint8_t state = SX1272::setFrequencyRaw(freq);
|
||||
if(state == ERR_NONE) {
|
||||
SX127x::_freq = freq;
|
||||
|
@ -73,6 +74,7 @@ uint8_t SX1272::setBandwidth(float bw) {
|
|||
return(ERR_INVALID_BANDWIDTH);
|
||||
}
|
||||
|
||||
// set bandwidth and if successful, save the new setting
|
||||
uint8_t state = SX1272::setBandwidthRaw(newBandwidth);
|
||||
if(state == ERR_NONE) {
|
||||
SX127x::_bw = bw;
|
||||
|
@ -111,6 +113,7 @@ uint8_t SX1272::setSpreadingFactor(uint8_t sf) {
|
|||
return(ERR_INVALID_SPREADING_FACTOR);
|
||||
}
|
||||
|
||||
// set spreading factor and if successful, save the new setting
|
||||
uint8_t state = SX1272::setSpreadingFactorRaw(newSpreadingFactor);
|
||||
if(state == ERR_NONE) {
|
||||
SX127x::_sf = sf;
|
||||
|
@ -140,6 +143,7 @@ uint8_t SX1272::setCodingRate(uint8_t cr) {
|
|||
return(ERR_INVALID_CODING_RATE);
|
||||
}
|
||||
|
||||
// set coding rate and if successful, save the new setting
|
||||
uint8_t state = SX1272::setCodingRateRaw(newCodingRate);
|
||||
if(state == ERR_NONE) {
|
||||
SX127x::_cr = cr;
|
||||
|
@ -149,10 +153,12 @@ uint8_t SX1272::setCodingRate(uint8_t cr) {
|
|||
}
|
||||
|
||||
uint8_t SX1272::setOutputPower(int8_t power) {
|
||||
// check allowed power range
|
||||
if((power < -1) || (power > 20)) {
|
||||
return(ERR_INVALID_OUTPUT_POWER);
|
||||
}
|
||||
|
||||
// set mode to standby
|
||||
SX127x::standby();
|
||||
|
||||
uint8_t state;
|
||||
|
@ -172,7 +178,8 @@ uint8_t SX1272::setOutputPower(int8_t power) {
|
|||
state |= _mod->SPIsetRegValue(SX127X_REG_PA_CONFIG, power - 5, 3, 0);
|
||||
state |= _mod->SPIsetRegValue(SX1272_REG_PA_DAC, SX127X_PA_BOOST_ON, 2, 0);
|
||||
}
|
||||
|
||||
|
||||
// configuration successful, save new setting
|
||||
if(state == ERR_NONE) {
|
||||
_power = power;
|
||||
}
|
||||
|
|
|
@ -45,10 +45,13 @@
|
|||
|
||||
class SX1272: public SX127x {
|
||||
public:
|
||||
// constructor
|
||||
SX1272(Module* mod);
|
||||
|
||||
// basic methods
|
||||
uint8_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, uint16_t addrEeprom = 0);
|
||||
|
||||
// configuration methods
|
||||
uint8_t setFrequency(float freq);
|
||||
uint8_t setBandwidth(float bw);
|
||||
uint8_t setSpreadingFactor(uint8_t sf);
|
||||
|
|
|
@ -25,6 +25,7 @@ uint8_t SX1273::setSpreadingFactor(uint8_t sf) {
|
|||
return(ERR_INVALID_SPREADING_FACTOR);
|
||||
}
|
||||
|
||||
// set spreading factor and if successful, save the new setting
|
||||
uint8_t state = setSpreadingFactorRaw(newSpreadingFactor);
|
||||
if(state == ERR_NONE) {
|
||||
SX127x::_sf = sf;
|
||||
|
|
|
@ -6,8 +6,10 @@
|
|||
|
||||
class SX1273: public SX1272 {
|
||||
public:
|
||||
// constructor
|
||||
SX1273(Module* mod);
|
||||
|
||||
// configuration methods
|
||||
uint8_t setSpreadingFactor(uint8_t sf);
|
||||
};
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ uint8_t SX1276::setFrequency(float freq) {
|
|||
return(ERR_INVALID_FREQUENCY);
|
||||
}
|
||||
|
||||
// set frequency and if successful, save the new setting
|
||||
uint8_t state = SX1278::setFrequencyRaw(freq);
|
||||
if(state == ERR_NONE) {
|
||||
SX127x::_freq = freq;
|
||||
|
|
|
@ -6,8 +6,10 @@
|
|||
|
||||
class SX1276: public SX1278 {
|
||||
public:
|
||||
// constructor
|
||||
SX1276(Module* mod);
|
||||
|
||||
// configuration methods
|
||||
uint8_t setFrequency(float freq);
|
||||
};
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ uint8_t SX1277::setFrequency(float freq) {
|
|||
return(ERR_INVALID_FREQUENCY);
|
||||
}
|
||||
|
||||
// set frequency and if successful, save the new setting
|
||||
uint8_t state = SX1278::setFrequencyRaw(freq);
|
||||
if(state == ERR_NONE) {
|
||||
SX127x::_freq = freq;
|
||||
|
@ -38,6 +39,7 @@ uint8_t SX1277::setSpreadingFactor(uint8_t sf) {
|
|||
return(ERR_INVALID_SPREADING_FACTOR);
|
||||
}
|
||||
|
||||
// set spreading factor and if successful, save the new setting
|
||||
uint8_t state = SX1278::setSpreadingFactorRaw(newSpreadingFactor);
|
||||
if(state == ERR_NONE) {
|
||||
SX127x::_sf = sf;
|
||||
|
|
|
@ -6,8 +6,10 @@
|
|||
|
||||
class SX1277: public SX1278 {
|
||||
public:
|
||||
// constructor
|
||||
SX1277(Module* mod);
|
||||
|
||||
// configuration methods
|
||||
uint8_t setFrequency(float freq);
|
||||
uint8_t setSpreadingFactor(uint8_t sf);
|
||||
};
|
||||
|
|
|
@ -52,6 +52,7 @@ uint8_t SX1278::setFrequency(float freq) {
|
|||
return(ERR_INVALID_FREQUENCY);
|
||||
}
|
||||
|
||||
// set frequency and if successful, save the new setting
|
||||
uint8_t state = SX1278::setFrequencyRaw(freq);
|
||||
if(state == ERR_NONE) {
|
||||
SX127x::_freq = freq;
|
||||
|
@ -85,6 +86,7 @@ uint8_t SX1278::setBandwidth(float bw) {
|
|||
return(ERR_INVALID_BANDWIDTH);
|
||||
}
|
||||
|
||||
// set bandwidth and if successful, save the new setting
|
||||
uint8_t state = SX1278::setBandwidthRaw(newBandwidth);
|
||||
if(state == ERR_NONE) {
|
||||
SX127x::_bw = bw;
|
||||
|
@ -123,6 +125,7 @@ uint8_t SX1278::setSpreadingFactor(uint8_t sf) {
|
|||
return(ERR_INVALID_SPREADING_FACTOR);
|
||||
}
|
||||
|
||||
// set spreading factor and if successful, save the new setting
|
||||
uint8_t state = SX1278::setSpreadingFactorRaw(newSpreadingFactor);
|
||||
if(state == ERR_NONE) {
|
||||
SX127x::_sf = sf;
|
||||
|
@ -152,6 +155,7 @@ uint8_t SX1278::setCodingRate(uint8_t cr) {
|
|||
return(ERR_INVALID_CODING_RATE);
|
||||
}
|
||||
|
||||
// set coding rate and if successful, save the new setting
|
||||
uint8_t state = SX1278::setCodingRateRaw(newCodingRate);
|
||||
if(state == ERR_NONE) {
|
||||
SX127x::_cr = cr;
|
||||
|
@ -165,6 +169,7 @@ uint8_t SX1278::setOutputPower(int8_t power) {
|
|||
return(ERR_INVALID_OUTPUT_POWER);
|
||||
}
|
||||
|
||||
// set mode to standby
|
||||
SX127x::standby();
|
||||
|
||||
uint8_t state;
|
||||
|
@ -184,7 +189,8 @@ uint8_t SX1278::setOutputPower(int8_t power) {
|
|||
state |= _mod->SPIsetRegValue(SX127X_REG_PA_CONFIG, SX1278_MAX_POWER | (power + 2), 6, 0);
|
||||
state |= _mod->SPIsetRegValue(SX1278_REG_PA_DAC, SX127X_PA_BOOST_ON, 2, 0);
|
||||
}
|
||||
|
||||
|
||||
// configuration successful, save new setting
|
||||
if(state == ERR_NONE) {
|
||||
_power = power;
|
||||
}
|
||||
|
|
|
@ -63,10 +63,13 @@
|
|||
|
||||
class SX1278: public SX127x {
|
||||
public:
|
||||
// constructor
|
||||
SX1278(Module* mod);
|
||||
|
||||
// basic methods
|
||||
uint8_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, uint16_t addrEeprom = 0);
|
||||
|
||||
// configuration methods
|
||||
uint8_t setFrequency(float freq);
|
||||
uint8_t setBandwidth(float bw);
|
||||
uint8_t setSpreadingFactor(uint8_t sf);
|
||||
|
|
|
@ -10,6 +10,7 @@ uint8_t SX1279::setFrequency(float freq) {
|
|||
return(ERR_INVALID_FREQUENCY);
|
||||
}
|
||||
|
||||
// set frequency and if successful, save the new setting
|
||||
uint8_t state = SX1278::setFrequencyRaw(freq);
|
||||
if(state == ERR_NONE) {
|
||||
SX127x::_freq = freq;
|
||||
|
|
|
@ -6,8 +6,10 @@
|
|||
|
||||
class SX1279: public SX1278 {
|
||||
public:
|
||||
// constructor
|
||||
SX1279(Module* mod);
|
||||
|
||||
// configuration methods
|
||||
uint8_t setFrequency(float freq);
|
||||
};
|
||||
|
||||
|
|
|
@ -205,13 +205,17 @@ uint8_t SX127x::receive(Packet& pack) {
|
|||
}
|
||||
|
||||
uint8_t SX127x::scanChannel() {
|
||||
// set mode to standby
|
||||
setMode(SX127X_STANDBY);
|
||||
|
||||
// set DIO pin mapping
|
||||
_mod->SPIsetRegValue(SX127X_REG_DIO_MAPPING_1, SX127X_DIO0_CAD_DONE | SX127X_DIO1_CAD_DETECTED, 7, 4);
|
||||
clearIRQFlags();
|
||||
|
||||
// set mode to CAD
|
||||
setMode(SX127X_CAD);
|
||||
|
||||
// wait for channel activity detected or timeout
|
||||
while(!_mod->getInt0State()) {
|
||||
if(_mod->getInt1State()) {
|
||||
clearIRQFlags();
|
||||
|
@ -219,21 +223,27 @@ uint8_t SX127x::scanChannel() {
|
|||
}
|
||||
}
|
||||
|
||||
// clear interrupt flags
|
||||
clearIRQFlags();
|
||||
|
||||
return(CHANNEL_FREE);
|
||||
}
|
||||
|
||||
uint8_t SX127x::sleep() {
|
||||
// set mode to sleep
|
||||
return(setMode(SX127X_SLEEP));
|
||||
}
|
||||
|
||||
uint8_t SX127x::standby() {
|
||||
// set mode to standby
|
||||
return(setMode(SX127X_STANDBY));
|
||||
}
|
||||
|
||||
uint8_t SX127x::setSyncWord(uint8_t syncWord) {
|
||||
// set mode to standby
|
||||
setMode(SX127X_STANDBY);
|
||||
|
||||
// write register
|
||||
uint8_t state = _mod->SPIsetRegValue(SX127X_REG_SYNC_WORD, syncWord);
|
||||
if(state == ERR_NONE) {
|
||||
_syncWord = syncWord;
|
||||
|
|
|
@ -167,20 +167,23 @@
|
|||
|
||||
class SX127x {
|
||||
public:
|
||||
// constructor
|
||||
SX127x(Module* mod);
|
||||
|
||||
// public member variables
|
||||
float dataRate;
|
||||
int8_t lastPacketRSSI;
|
||||
float lastPacketSNR;
|
||||
|
||||
// basic methods
|
||||
uint8_t begin(uint8_t syncWord, uint16_t addrEeprom);
|
||||
uint8_t transmit(Packet& pack);
|
||||
uint8_t receive(Packet& pack);
|
||||
uint8_t scanChannel();
|
||||
|
||||
uint8_t sleep();
|
||||
uint8_t standby();
|
||||
|
||||
// configuration methods
|
||||
uint8_t setSyncWord(uint8_t syncWord);
|
||||
|
||||
protected:
|
||||
|
@ -195,9 +198,7 @@ class SX127x {
|
|||
|
||||
uint8_t tx(char* data, uint8_t length);
|
||||
uint8_t rxSingle(char* data, uint8_t* length);
|
||||
|
||||
uint8_t setFrequencyRaw(float newFreq);
|
||||
|
||||
uint8_t config();
|
||||
|
||||
private:
|
||||
|
|
Loading…
Add table
Reference in a new issue