RF69 - Added output power setting
This commit is contained in:
parent
61c8e07d17
commit
bee2e4802b
2 changed files with 33 additions and 8 deletions
|
@ -4,7 +4,7 @@ RF69::RF69(Module* module) {
|
|||
_mod = module;
|
||||
}
|
||||
|
||||
uint8_t RF69::begin(float freq, float br, float rxBw, float freqDev) {
|
||||
uint8_t RF69::begin(float freq, float br, float rxBw, float freqDev, int8_t power) {
|
||||
// set module properties
|
||||
_mod->init(USE_SPI, INT_0);
|
||||
|
||||
|
@ -67,6 +67,11 @@ uint8_t RF69::begin(float freq, float br, float rxBw, float freqDev) {
|
|||
return(state);
|
||||
}
|
||||
|
||||
state = setOutputPower(power);
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
||||
return(ERR_NONE);
|
||||
}
|
||||
|
||||
|
@ -319,6 +324,30 @@ uint8_t RF69::setFrequencyDeviation(float freqDev) {
|
|||
return(state);
|
||||
}
|
||||
|
||||
uint8_t RF69::setOutputPower(int8_t power) {
|
||||
// check output power range
|
||||
if((power < -18) || (power > 17)) {
|
||||
return(ERR_INVALID_OUTPUT_POWER);
|
||||
}
|
||||
|
||||
// set mode to standby
|
||||
setMode(RF69_STANDBY);
|
||||
|
||||
// set output power
|
||||
uint8_t state;
|
||||
if(power > 13) {
|
||||
// requested output power is higher than 13 dBm, enable PA2 + PA1 on PA_BOOST
|
||||
state = _mod->SPIsetRegValue(RF69_REG_PA_LEVEL, RF69_PA0_OFF | RF69_PA1_ON | RF69_PA2_ON | power + 14, 7, 0);
|
||||
} else {
|
||||
// requested output power is lower than 13 dBm, enable PA0 on RFIO
|
||||
state = _mod->SPIsetRegValue(RF69_REG_PA_LEVEL, RF69_PA0_ON | RF69_PA1_OFF | RF69_PA2_OFF | power + 18, 7, 0);
|
||||
}
|
||||
if(state == ERR_NONE) {
|
||||
RF69::_power = _power;
|
||||
}
|
||||
return(state);
|
||||
}
|
||||
|
||||
uint8_t RF69::config() {
|
||||
uint8_t state = ERR_NONE;
|
||||
|
||||
|
@ -398,12 +427,6 @@ uint8_t RF69::config() {
|
|||
return(state);
|
||||
}
|
||||
|
||||
//set output power
|
||||
state = _mod->SPIsetRegValue(RF69_REG_PA_LEVEL, RF69_PA0_ON | RF69_PA1_OFF | RF69_PA2_OFF | RF69_OUTPUT_POWER, 7, 0);
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
||||
//set Rx timeouts
|
||||
state = _mod->SPIsetRegValue(RF69_REG_RX_TIMEOUT_1, RF69_TIMEOUT_RX_START, 7, 0);
|
||||
state = _mod->SPIsetRegValue(RF69_REG_RX_TIMEOUT_2, RF69_TIMEOUT_RSSI_THRESH, 7, 0);
|
||||
|
|
|
@ -420,7 +420,7 @@ class RF69 {
|
|||
public:
|
||||
RF69(Module* module);
|
||||
|
||||
uint8_t begin(float freq = 434.0, float br = 48.0, float rxBw = 125.0, float freqDev = 50.0);
|
||||
uint8_t begin(float freq = 434.0, float br = 48.0, float rxBw = 125.0, float freqDev = 50.0, int8_t power = 13);
|
||||
uint8_t transmit(Packet& pack);
|
||||
uint8_t receive(Packet& pack);
|
||||
|
||||
|
@ -431,6 +431,7 @@ class RF69 {
|
|||
uint8_t setBitRate(float br);
|
||||
uint8_t setRxBandwidth(float rxBw);
|
||||
uint8_t setFrequencyDeviation(float freqDev);
|
||||
uint8_t setOutputPower(int8_t power);
|
||||
|
||||
private:
|
||||
Module* _mod;
|
||||
|
@ -439,6 +440,7 @@ class RF69 {
|
|||
float _br;
|
||||
float _rxBw;
|
||||
float _freqDev;
|
||||
int8_t _power;
|
||||
|
||||
uint8_t config();
|
||||
uint8_t setMode(uint8_t mode);
|
||||
|
|
Loading…
Add table
Reference in a new issue