|
|
|
@ -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]; |
|
|
|
|
_txp = level; |
|
|
|
|
|
|
|
|
|
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() { |
|
|
|
|