Add PA calculations for LoRa1280F27
This commit is contained in:
parent
fa16f4a54d
commit
007dfd8e65
109
Radio.cpp
109
Radio.cpp
@ -2192,21 +2192,102 @@ void sx128x::disableTCXO() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void sx128x::setTxPower(int level, int outputPin) {
|
void sx128x::setTxPower(int level, int outputPin) {
|
||||||
if (level > 13) {
|
// PA calculation currently only works for the LoRa1280F27. Support for
|
||||||
level = 13;
|
// other assemblies would be appreciated in a PR.
|
||||||
} else if (level < -18) {
|
if (outputPin == PA_OUTPUT_PA_BOOST_PIN) {
|
||||||
level = -18;
|
if (level > 27) {
|
||||||
|
level = 27;
|
||||||
|
} else if (level < 0) {
|
||||||
|
level = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
_txp = level;
|
||||||
|
|
||||||
|
int reg_value;
|
||||||
|
|
||||||
|
switch (level) {
|
||||||
|
case 0:
|
||||||
|
reg_value = -18;
|
||||||
|
case 1:
|
||||||
|
reg_value = -17;
|
||||||
|
case 2:
|
||||||
|
reg_value = -16;
|
||||||
|
case 3:
|
||||||
|
reg_value = -15;
|
||||||
|
case 4:
|
||||||
|
reg_value = -14;
|
||||||
|
case 5:
|
||||||
|
reg_value = -13;
|
||||||
|
case 6:
|
||||||
|
reg_value = -12;
|
||||||
|
case 7:
|
||||||
|
reg_value = -10;
|
||||||
|
case 8:
|
||||||
|
reg_value = -9;
|
||||||
|
case 9:
|
||||||
|
reg_value = -8;
|
||||||
|
case 10:
|
||||||
|
reg_value = -7;
|
||||||
|
case 11:
|
||||||
|
reg_value = -6;
|
||||||
|
case 12:
|
||||||
|
reg_value = -5;
|
||||||
|
case 13:
|
||||||
|
reg_value = -4;
|
||||||
|
case 14:
|
||||||
|
reg_value = -3;
|
||||||
|
case 15:
|
||||||
|
reg_value = -2;
|
||||||
|
case 16:
|
||||||
|
reg_value = -1;
|
||||||
|
case 17:
|
||||||
|
reg_value = 0;
|
||||||
|
case 18:
|
||||||
|
reg_value = 1;
|
||||||
|
case 19:
|
||||||
|
reg_value = 2;
|
||||||
|
case 20:
|
||||||
|
reg_value = 3;
|
||||||
|
case 21:
|
||||||
|
reg_value = 4;
|
||||||
|
case 22:
|
||||||
|
reg_value = 5;
|
||||||
|
case 23:
|
||||||
|
reg_value = 6;
|
||||||
|
case 24:
|
||||||
|
reg_value = 8;
|
||||||
|
case 25:
|
||||||
|
reg_value = 9;
|
||||||
|
case 26:
|
||||||
|
reg_value = 12;
|
||||||
|
case 27:
|
||||||
|
reg_value = 13;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t tx_buf[2];
|
||||||
|
|
||||||
|
tx_buf[0] = reg_value;
|
||||||
|
tx_buf[1] = 0xE0; // ramping time - 20 microseconds
|
||||||
|
|
||||||
|
executeOpcode(OP_TX_PARAMS_8X, tx_buf, 2);
|
||||||
|
} else {
|
||||||
|
if (level > 13) {
|
||||||
|
level = 13;
|
||||||
|
} else if (level < -18) {
|
||||||
|
level = -18;
|
||||||
|
}
|
||||||
|
_txp = level;
|
||||||
|
|
||||||
|
level = level + 18;
|
||||||
|
|
||||||
|
uint8_t tx_buf[2];
|
||||||
|
|
||||||
|
tx_buf[0] = level;
|
||||||
|
tx_buf[1] = 0xE0; // ramping time - 20 microseconds
|
||||||
|
|
||||||
|
executeOpcode(OP_TX_PARAMS_8X, tx_buf, 2);
|
||||||
}
|
}
|
||||||
_txp = level;
|
|
||||||
|
|
||||||
level = level + 18;
|
|
||||||
|
|
||||||
uint8_t tx_buf[2];
|
|
||||||
|
|
||||||
tx_buf[0] = level;
|
|
||||||
tx_buf[1] = 0xE0; // ramping time - 20 microseconds
|
|
||||||
|
|
||||||
executeOpcode(OP_TX_PARAMS_8X, tx_buf, 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t sx128x::getTxPower() {
|
uint8_t sx128x::getTxPower() {
|
||||||
|
16
Utilities.h
16
Utilities.h
@ -965,8 +965,20 @@ void set_implicit_length(uint8_t len) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void setTXPower(RadioInterface* radio, int txp) {
|
void setTXPower(RadioInterface* radio, int txp) {
|
||||||
if (model == MODEL_11) radio->setTxPower(txp, PA_OUTPUT_RFO_PIN);
|
if (model == MODEL_11) {
|
||||||
if (model == MODEL_12) radio->setTxPower(txp, PA_OUTPUT_RFO_PIN);
|
if (interfaces[radio->getIndex()] == SX128X) {
|
||||||
|
radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN);
|
||||||
|
} else {
|
||||||
|
radio->setTxPower(txp, PA_OUTPUT_RFO_PIN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (model == MODEL_12) {
|
||||||
|
if (interfaces[radio->getIndex()] == SX128X) {
|
||||||
|
radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN);
|
||||||
|
} else {
|
||||||
|
radio->setTxPower(txp, PA_OUTPUT_RFO_PIN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (model == MODEL_A1) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN);
|
if (model == MODEL_A1) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN);
|
||||||
if (model == MODEL_A2) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN);
|
if (model == MODEL_A2) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN);
|
||||||
|
Loading…
Reference in New Issue
Block a user