From 9c9914a2c46a94ad5ac04353ceb6b018254f914e Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Sun, 12 Mar 2017 16:17:13 -0400 Subject: [PATCH] Add option to specify PA output pin in Lora.setTxPower(...) (#2) --- API.md | 7 ++++++- keywords.txt | 3 +++ src/LoRa.cpp | 26 +++++++++++++++++++------- src/LoRa.h | 5 ++++- 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/API.md b/API.md index d1f5789..5cdef64 100644 --- a/API.md +++ b/API.md @@ -216,10 +216,15 @@ Change the TX power of the radio. ```arduino LoRa.setTxPower(txPower); + +LoRa.setTxPower(txPower, outputPin); ``` * `txPower` - TX power in dB, defaults to `17` + * `outputPin` - (optional) PA output pin, supported values are `PA_OUTPUT_RFO_PIN` and `PA_OUTPUT_PA_BOOST_PIN`, defaults to `PA_OUTPUT_PA_BOOST_PIN`. - Supported values are between `2` and `17`. +Supported values are between `2` and `17` for `PA_OUTPUT_PA_BOOST_PIN`, `0` and `14` for `PA_OUTPUT_RFO_PIN`. + +Most modules have the PA output pin connected to PA BOOST, ### Frequency diff --git a/keywords.txt b/keywords.txt index 0ef2c76..cfa183f 100644 --- a/keywords.txt +++ b/keywords.txt @@ -52,3 +52,6 @@ dumpRegisters KEYWORD2 ####################################### # Constants (LITERAL1) ####################################### + +PA_OUTPUT_RFO_PIN LITERAL1 +PA_OUTPUT_PA_BOOST_PIN LITERAL1 diff --git a/src/LoRa.cpp b/src/LoRa.cpp index 260917d..0d12c6b 100644 --- a/src/LoRa.cpp +++ b/src/LoRa.cpp @@ -297,15 +297,27 @@ void LoRaClass::sleep() writeRegister(REG_OP_MODE, MODE_LONG_RANGE_MODE | MODE_SLEEP); } -void LoRaClass::setTxPower(int level) +void LoRaClass::setTxPower(int level, int outputPin) { - if (level < 2) { - level = 2; - } else if (level > 17) { - level = 17; - } + if (PA_OUTPUT_RFO_PIN == outputPin) { + // RFO + if (level < 0) { + level = 0; + } else if (level > 14) { + level = 14; + } - writeRegister(REG_PA_CONFIG, PA_BOOST | (level - 2)); + writeRegister(REG_PA_CONFIG, 0x70 | level); + } else { + // PA BOOST + if (level < 2) { + level = 2; + } else if (level > 17) { + level = 17; + } + + writeRegister(REG_PA_CONFIG, PA_BOOST | (level - 2)); + } } void LoRaClass::setFrequency(long frequency) diff --git a/src/LoRa.h b/src/LoRa.h index e8b551e..e69dd04 100644 --- a/src/LoRa.h +++ b/src/LoRa.h @@ -8,6 +8,9 @@ #define LORA_DEFAULT_RESET_PIN 9 #define LORA_DEFAULT_DIO0_PIN 2 +#define PA_OUTPUT_RFO_PIN 0 +#define PA_OUTPUT_PA_BOOST_PIN 1 + class LoRaClass : public Stream { public: LoRaClass(); @@ -38,7 +41,7 @@ public: void idle(); void sleep(); - void setTxPower(int level); + void setTxPower(int level, int outputPin = PA_OUTPUT_PA_BOOST_PIN); void setFrequency(long frequency); void setSpreadingFactor(int sf); void setSignalBandwidth(long sbw);