RF69 - Added output power setting

This commit is contained in:
Jan Gromeš 2018-07-07 11:32:44 +02:00
parent 61c8e07d17
commit bee2e4802b
2 changed files with 33 additions and 8 deletions

View file

@ -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);

View file

@ -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);