From 10f32c8b5cfeab43ef059041d5b8f18b519090fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Grome=C5=A1?= Date: Wed, 11 Jul 2018 17:56:26 +0200 Subject: [PATCH] SX127x - Updated comments --- examples/SX127x_Receive/SX127x_Receive.ino | 7 +++++++ examples/SX127x_Transmit/SX127x_Transmit.ino | 7 +++++++ src/modules/SX1272.cpp | 9 ++++++++- src/modules/SX1272.h | 3 +++ src/modules/SX1273.cpp | 1 + src/modules/SX1273.h | 2 ++ src/modules/SX1276.cpp | 1 + src/modules/SX1276.h | 2 ++ src/modules/SX1277.cpp | 2 ++ src/modules/SX1277.h | 2 ++ src/modules/SX1278.cpp | 8 +++++++- src/modules/SX1278.h | 3 +++ src/modules/SX1279.cpp | 1 + src/modules/SX1279.h | 2 ++ src/modules/SX127x.cpp | 10 ++++++++++ src/modules/SX127x.h | 7 ++++--- 16 files changed, 62 insertions(+), 5 deletions(-) diff --git a/examples/SX127x_Receive/SX127x_Receive.ino b/examples/SX127x_Receive/SX127x_Receive.ino index 7c28a898..e3e3dae0 100644 --- a/examples/SX127x_Receive/SX127x_Receive.ino +++ b/examples/SX127x_Receive/SX127x_Receive.ino @@ -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!")); diff --git a/examples/SX127x_Transmit/SX127x_Transmit.ino b/examples/SX127x_Transmit/SX127x_Transmit.ino index 0a754e31..948593c3 100644 --- a/examples/SX127x_Transmit/SX127x_Transmit.ino +++ b/examples/SX127x_Transmit/SX127x_Transmit.ino @@ -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!")); diff --git a/src/modules/SX1272.cpp b/src/modules/SX1272.cpp index 5bd205ee..06d37c0e 100644 --- a/src/modules/SX1272.cpp +++ b/src/modules/SX1272.cpp @@ -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; } diff --git a/src/modules/SX1272.h b/src/modules/SX1272.h index e8ac2984..00affed6 100644 --- a/src/modules/SX1272.h +++ b/src/modules/SX1272.h @@ -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); diff --git a/src/modules/SX1273.cpp b/src/modules/SX1273.cpp index 01c5847e..9a55ce23 100644 --- a/src/modules/SX1273.cpp +++ b/src/modules/SX1273.cpp @@ -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; diff --git a/src/modules/SX1273.h b/src/modules/SX1273.h index 93c3b5e3..080cba77 100644 --- a/src/modules/SX1273.h +++ b/src/modules/SX1273.h @@ -6,8 +6,10 @@ class SX1273: public SX1272 { public: + // constructor SX1273(Module* mod); + // configuration methods uint8_t setSpreadingFactor(uint8_t sf); }; diff --git a/src/modules/SX1276.cpp b/src/modules/SX1276.cpp index 510da10c..71399fcc 100644 --- a/src/modules/SX1276.cpp +++ b/src/modules/SX1276.cpp @@ -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; diff --git a/src/modules/SX1276.h b/src/modules/SX1276.h index 6b8713e5..7a1f2c2f 100644 --- a/src/modules/SX1276.h +++ b/src/modules/SX1276.h @@ -6,8 +6,10 @@ class SX1276: public SX1278 { public: + // constructor SX1276(Module* mod); + // configuration methods uint8_t setFrequency(float freq); }; diff --git a/src/modules/SX1277.cpp b/src/modules/SX1277.cpp index b21dd654..de10bfe6 100644 --- a/src/modules/SX1277.cpp +++ b/src/modules/SX1277.cpp @@ -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; diff --git a/src/modules/SX1277.h b/src/modules/SX1277.h index 99e8813e..fae60134 100644 --- a/src/modules/SX1277.h +++ b/src/modules/SX1277.h @@ -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); }; diff --git a/src/modules/SX1278.cpp b/src/modules/SX1278.cpp index 659b5930..fe2af978 100644 --- a/src/modules/SX1278.cpp +++ b/src/modules/SX1278.cpp @@ -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; } diff --git a/src/modules/SX1278.h b/src/modules/SX1278.h index f20de073..7d6a332f 100644 --- a/src/modules/SX1278.h +++ b/src/modules/SX1278.h @@ -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); diff --git a/src/modules/SX1279.cpp b/src/modules/SX1279.cpp index 0412f5f7..aa43371e 100644 --- a/src/modules/SX1279.cpp +++ b/src/modules/SX1279.cpp @@ -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; diff --git a/src/modules/SX1279.h b/src/modules/SX1279.h index 42b81d9a..f339b649 100644 --- a/src/modules/SX1279.h +++ b/src/modules/SX1279.h @@ -6,8 +6,10 @@ class SX1279: public SX1278 { public: + // constructor SX1279(Module* mod); + // configuration methods uint8_t setFrequency(float freq); }; diff --git a/src/modules/SX127x.cpp b/src/modules/SX127x.cpp index 6612ddb1..06eb7ba5 100644 --- a/src/modules/SX127x.cpp +++ b/src/modules/SX127x.cpp @@ -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; diff --git a/src/modules/SX127x.h b/src/modules/SX127x.h index 7bbcf758..3f3efd37 100644 --- a/src/modules/SX127x.h +++ b/src/modules/SX127x.h @@ -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: