]> git.tnoah.ca Git - lora-radio.git/commitdiff
Switch from board variant being set separately to using model number instead.
authorjacob.eva <x00010@disroot.org>
Tue, 9 Jul 2024 09:37:50 +0000 (10:37 +0100)
committerjacob.eva <x00010@disroot.org>
Tue, 9 Jul 2024 09:37:50 +0000 (10:37 +0100)
Boards.h
Makefile
ROM.h
Radio.cpp
Utilities.h

index 45650e34d3ce7101f6ab432b75289d02df239d1a..a3512fbe2664c614c5a9bc0fd2e4971486a38279 100644 (file)
--- a/Boards.h
+++ b/Boards.h
@@ -14,6 +14,7 @@
 // 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
index 5cd01803bf5d2c27c70b29013ee173d640ee42f7..f4712e0cc58d65282038c45d0f56ef99a324842c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -72,10 +72,10 @@ firmware-tbeam_sx126x:
        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\""
diff --git a/ROM.h b/ROM.h
index 7a343c071415ba06edf93e046ff48a2afd5592dc..c7bcc31d3f8b1ed647146ec3bdd543e7985475be 100644 (file)
--- a/ROM.h
+++ b/ROM.h
@@ -29,7 +29,9 @@
     #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
index f1edfad89c7de6cf57ee5269909e962d972600e8..57ae164d9578f8a31d51f1d0aaec9d57e723865d 100644 (file)
--- a/Radio.cpp
+++ b/Radio.cpp
@@ -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() {
index 407fb180c06ebe5bcfaef7aa7924b9454796f4e9..8125203bfbc5d0785ae1ccfc9b442073a279f69c 100644 (file)
@@ -984,6 +984,7 @@ void setTXPower(RadioInterface* radio, int txp) {
     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);
@@ -1333,7 +1334,7 @@ bool eeprom_model_valid() {
        #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