// along with this program. If not, see <https://www.gnu.org/licenses/>.
#include "Interfaces.h"
+#include "ROM.h"
#ifndef BOARDS_H
#define BOARDS_H
#define BOARD_GENERIC_NRF52 0x50
#define BOARD_RAK4631 0x51
- // Variants
- #define BOARD_T3S3_SX1262 0x01
- #define BOARD_T3S3_SX1280 0x02
- #define BOARD_T3S3_SX1280_PA 0x03
-
// Displays
#define OLED 0x01
#define EINK_BW 0x02
#endif
#endif
- #if BOARD_VARIANT == BOARD_T3S3_SX1262
+ #if BOARD_VARIANT == MODEL_A1
const uint8_t interfaces[INTERFACE_COUNT] = {SX1262};
const bool interface_cfg[INTERFACE_COUNT][3] = {
// SX1262
true // DIO2_AS_RF_SWITCH
},
};
- #elif BOARD_VARIANT == BOARD_T3S3_SX1280_PA
+ #elif BOARD_VARIANT == MODEL_A5 // SX1280 with PA
const uint8_t interfaces[INTERFACE_COUNT] = {SX1280};
const bool interface_cfg[INTERFACE_COUNT][3] = {
- // SX1262
+ // SX1280
{
false, // DEFAULT_SPI
false, // HAS_TCXO
arduino-cli compile --fqbn esp32:esp32:t-beam -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x33\" \"-DMODEM=0x03\""
firmware-t3s3_sx1262:
- arduino-cli compile --fqbn "esp32:esp32:esp32s3:CDCOnBoot=cdc" -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x42\" \"-DBOARD_VARIANT=0x01\""
+ arduino-cli compile --fqbn "esp32:esp32:esp32s3:CDCOnBoot=cdc" -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x42\" \"-DBOARD_VARIANT=0xA1\""
firmware-t3s3_sx1280_pa:
- arduino-cli compile --fqbn "esp32:esp32:esp32s3:CDCOnBoot=cdc" -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x42\" \"-DBOARD_VARIANT=0x03\""
+ arduino-cli compile --fqbn "esp32:esp32:esp32s3:CDCOnBoot=cdc" -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x42\" \"-DBOARD_VARIANT=0xA5\""
firmware-lora32_v10:
arduino-cli compile --fqbn esp32:esp32:ttgo-lora32 -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x39\""
#define PRODUCT_RAK4631 0x10
#define MODEL_11 0x11
#define MODEL_12 0x12
+ #define MODEL_13 0x13 // RAK4631 with WisBlock SX1280 module (LIBSYS002)
#define MODEL_A1 0xA1
+ #define MODEL_A5 0xA5 // T3S3 SX1280 PA
#define MODEL_A6 0xA6
#define MODEL_A4 0xA4
#define MODEL_A9 0xA9
}
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;
}
int reg_value;
switch (level) {
- case 0:
+ /*case 0:
reg_value = -18;
break;
case 1:
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() {
if (model == MODEL_A2) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN);
if (model == MODEL_A3) radio->setTxPower(txp, PA_OUTPUT_RFO_PIN);
if (model == MODEL_A4) radio->setTxPower(txp, PA_OUTPUT_RFO_PIN);
+ if (model == MODEL_A5) radio->setTxPower(txp, PA_OUTPUT_RFO_PIN);
if (model == MODEL_A6) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN);
if (model == MODEL_A7) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN);
if (model == MODEL_A8) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN);
#elif BOARD_MODEL == BOARD_RNODE_NG_21
if (model == MODEL_A2 || model == MODEL_A7) {
#elif BOARD_MODEL == BOARD_T3S3
- if (model == MODEL_A1 || model == MODEL_A6) {
+ if (model == MODEL_A1 || model == MODEL_A5 || model == MODEL_A6) {
#elif BOARD_MODEL == BOARD_HMBRW
if (model == MODEL_FF || model == MODEL_FE) {
#elif BOARD_MODEL == BOARD_TBEAM