Switch from board variant being set separately to using model number instead.

This commit is contained in:
jacob.eva 2024-07-09 10:37:50 +01:00
parent 63eab05014
commit ba2d36add9
No known key found for this signature in database
GPG key ID: 0B92E083BBCCAA1E
5 changed files with 132 additions and 52 deletions

163
Radio.cpp
View file

@ -2192,11 +2192,118 @@ void sx128x::disableTCXO() {
}
void sx128x::setTxPower(int level, int outputPin) {
// PA calculation currently only works for the LoRa1280F27. Support for
// other assemblies would be appreciated in a PR.
if (outputPin == PA_OUTPUT_PA_BOOST_PIN) {
if (level > 27) {
level = 27;
uint8_t tx_buf[2];
#if BOARD_VARIANT == MODEL_13
// RAK4631 with WisBlock SX1280 module (LIBSYS002)
if (level > 27) {
level = 27;
} else if (level < 0) {
level = 0;
}
_txp = level;
int reg_value;
switch (level) {
case 0:
reg_value = -18;
break;
case 1:
reg_value = -17;
break;
case 2:
reg_value = -16;
break;
case 3:
reg_value = -15;
break;
case 4:
reg_value = -14;
break;
case 5:
reg_value = -13;
break;
case 6:
reg_value = -12;
break;
case 7:
reg_value = -10;
break;
case 8:
reg_value = -9;
break;
case 9:
reg_value = -8;
break;
case 10:
reg_value = -7;
break;
case 11:
reg_value = -6;
break;
case 12:
reg_value = -5;
break;
case 13:
reg_value = -4;
break;
case 14:
reg_value = -3;
break;
case 15:
reg_value = -2;
break;
case 16:
reg_value = -1;
break;
case 17:
reg_value = 0;
break;
case 18:
reg_value = 1;
break;
case 19:
reg_value = 2;
break;
case 20:
reg_value = 3;
break;
case 21:
reg_value = 4;
break;
case 22:
reg_value = 5;
break;
case 23:
reg_value = 6;
break;
case 24:
reg_value = 8;
break;
case 25:
reg_value = 9;
break;
case 26:
reg_value = 12;
break;
case 27:
reg_value = 13;
break;
default:
reg_value = 0;
break;
}
tx_buf[0] = reg_value;
tx_buf[1] = 0xE0; // ramping time - 20 microseconds
executeOpcode(OP_TX_PARAMS_8X, tx_buf, 2);
#elif BOARD_VARIANT == MODEL_A5
// T3S3 SX1280 PA
if (level > 20) {
level = 20;
} else if (level < 0) {
level = 0;
}
@ -2206,7 +2313,7 @@ void sx128x::setTxPower(int level, int outputPin) {
int reg_value;
switch (level) {
case 0:
/*case 0:
reg_value = -18;
break;
case 1:
@ -2265,57 +2372,31 @@ void sx128x::setTxPower(int level, int outputPin) {
break;
case 19:
reg_value = 2;
break;
break;*/
case 20:
reg_value = 3;
break;
case 21:
reg_value = 4;
break;
case 22:
reg_value = 5;
break;
case 23:
reg_value = 6;
break;
case 24:
reg_value = 8;
break;
case 25:
reg_value = 9;
break;
case 26:
reg_value = 12;
break;
case 27:
reg_value = 13;
default:
reg_value = 0;
break;
}
uint8_t tx_buf[2];
tx_buf[0] = reg_value;
tx_buf[0] = level;
tx_buf[1] = 0xE0; // ramping time - 20 microseconds
executeOpcode(OP_TX_PARAMS_8X, tx_buf, 2);
} else {
#else
// For SX1280 boards with no specific PA requirements
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);
}
#endif
executeOpcode(OP_TX_PARAMS_8X, tx_buf, 2);
}
uint8_t sx128x::getTxPower() {