]> git.tnoah.ca Git - lora-radio.git/commitdiff
Added T-Beam Supreme support
authorMark Qvist <mark@unsigned.io>
Fri, 4 Oct 2024 22:42:19 +0000 (00:42 +0200)
committerMark Qvist <mark@unsigned.io>
Fri, 4 Oct 2024 22:42:19 +0000 (00:42 +0200)
Boards.h
Display.h
Makefile
Power.h
README.md
RNode_Firmware.ino
ROM.h
Utilities.h
sx126x.cpp

index bc8db1ffe128ceae11fd39a6bad54ed9c3f9a930..e4606ec106d8717e907471508671defbe0b9d164 100644 (file)
--- a/Boards.h
+++ b/Boards.h
   #define MCU_ESP32           0x81
   #define MCU_NRF52           0x71
 
-  #define BOARD_RNODE         0x31
-  #define BOARD_HMBRW         0x32
+  // Products, boards and models ////
+  #define PRODUCT_RNODE       0x03 // RNode devices
+  #define BOARD_RNODE         0x31 // Original v1.0 RNode
+  #define MODEL_A4            0xA4 // RNode v1.0, 433 MHz
+  #define MODEL_A9            0xA9 // RNode v1.0, 868 MHz
+
+  #define BOARD_RNODE_NG_20   0x40 // RNode hardware revision v2.0
+  #define MODEL_A3            0xA3 // RNode v2.0, 433 MHz
+  #define MODEL_A8            0xA8 // RNode v2.0, 868 MHz
+
+  #define BOARD_RNODE_NG_21   0x41 // RNode hardware revision v2.1
+  #define MODEL_A2            0xA2 // RNode v2.1, 433 MHz
+  #define MODEL_A7            0xA7 // RNode v2.1, 868 MHz
+
+  #define BOARD_RNODE_NG_22   0x42 // RNode hardware revision v2.2
+  #define MODEL_A1            0xA1 // RNode v2.2, 433 MHz
+  #define MODEL_A6            0xA6 // RNode v2.2, 868 MHz
+
+  #define PRODUCT_TBEAM       0xE0 // T-Beam devices
   #define BOARD_TBEAM         0x33
-  #define BOARD_HUZZAH32      0x34
-  #define BOARD_GENERIC_ESP32 0x35
+  #define MODEL_E4            0xE4 // T-Beam SX1278, 433 Mhz
+  #define MODEL_E9            0xE9 // T-Beam SX1276, 868 Mhz
+  #define MODEL_E3            0xE3 // T-Beam SX1268, 433 Mhz
+  #define MODEL_E8            0xE8 // T-Beam SX1262, 868 Mhz
+
+  #define PRODUCT_TDECK_V1    0xD0
+  #define BOARD_TDECK         0x3B
+  #define MODEL_D4            0xD4 // LilyGO T-Deck, 433 MHz
+  #define MODEL_D9            0xD9 // LilyGO T-Deck, 868 MHz
+
+  #define PRODUCT_TBEAM_S_V1  0xEA
+  #define BOARD_TBEAM_S_V1    0x3D
+  #define MODEL_DB            0xDB // LilyGO T-Beam Supreme, 433 MHz
+  #define MODEL_DC            0xDC // LilyGO T-Beam Supreme, 868 MHz
+
+  #define PRODUCT_T32_10      0xB2
+  #define BOARD_LORA32_V1_0   0x39
+  #define MODEL_BA            0xBA // LilyGO T3 v1.0, 433 MHz
+  #define MODEL_BB            0xBB // LilyGO T3 v1.0, 868 MHz
+
+  #define PRODUCT_T32_20      0xB0
   #define BOARD_LORA32_V2_0   0x36
+  #define MODEL_B3            0xB3 // LilyGO T3 v2.0, 433 MHz
+  #define MODEL_B8            0xB8 // LilyGO T3 v2.0, 868 MHz
+
+  #define PRODUCT_T32_21      0xB1
   #define BOARD_LORA32_V2_1   0x37
-  #define BOARD_LORA32_V1_0   0x39
+  #define MODEL_B4            0xB4  // LilyGO T3 v2.1, 433 MHz
+  #define MODEL_B9            0xB9  // LilyGO T3 v2.1, 868 MHz
+
+  #define PRODUCT_H32_V2      0xC0  // Board code 0x38
   #define BOARD_HELTEC32_V2   0x38
+  #define MODEL_C4            0xC4  // Heltec Lora32 v2, 433 MHz
+  #define MODEL_C9            0xC9  // Heltec Lora32 v2, 868 MHz
+
+  #define PRODUCT_H32_V3      0xC1
   #define BOARD_HELTEC32_V3   0x3A
-  #define BOARD_TDECK         0x3B
-  #define BOARD_RNODE_NG_20   0x40
-  #define BOARD_RNODE_NG_21   0x41
-  #define BOARD_RNODE_NG_22   0x42
-  #define BOARD_GENERIC_NRF52 0x50
+  #define MODEL_C5            0xC5 // Heltec Lora32 v3, 433 MHz
+  #define MODEL_CA            0xCA // Heltec Lora32 v3, 868 MHz
+
+  #define PRODUCT_RAK4631     0x10
   #define BOARD_RAK4631       0x51
+  #define MODEL_11            0x11 // RAK4631, 433 Mhz
+  #define MODEL_12            0x12 // RAK4631, 868 Mhz
+
+  #define PRODUCT_HMBRW       0xF0
+  #define BOARD_HMBRW         0x32
+  #define BOARD_HUZZAH32      0x34
+  #define BOARD_GENERIC_ESP32 0x35
+  #define BOARD_GENERIC_NRF52 0x50
+  #define MODEL_FE            0xFE // Homebrew board, max 17dBm output power
+  #define MODEL_FF            0xFF // Homebrew board, max 14dBm output power
 
   #if defined(__AVR_ATmega1284P__)
     #define PLATFORM PLATFORM_AVR
         #endif
       #endif
 
+    #elif BOARD_MODEL == BOARD_TBEAM_S_V1
+      #define IS_ESP32S3 true
+      #define MODEM SX1262
+      #define DIO2_AS_RF_SWITCH true
+      #define HAS_BUSY true
+      #define HAS_TCXO true
+
+      #define HAS_DISPLAY true
+      #define HAS_CONSOLE true
+      #define HAS_BLUETOOTH false
+      #define HAS_BLE true
+      #define HAS_PMU true
+      #define HAS_NP false
+      #define HAS_SD false
+      #define HAS_EEPROM true
+
+      #define HAS_INPUT true
+      #define HAS_SLEEP false
+      
+      #define PMU_IRQ 40
+      #define I2C_SCL 41
+      #define I2C_SDA 42
+
+      const int pin_btn_usr1 = 0;
+
+      const int pin_cs = 10;
+      const int pin_reset = 5;
+      const int pin_sclk = 12;
+      const int pin_mosi = 11;
+      const int pin_miso = 13;
+      const int pin_tcxo_enable = -1;
+      const int pin_dio = 1;
+      const int pin_busy = 4;
+      
+      const int SD_MISO = 37;
+      const int SD_MOSI = 35;
+      const int SD_CLK = 36;
+      const int SD_CS = 47;
+
+      const int IMU_CS = 34;
+
+      #if HAS_NP == false
+        #if defined(EXTERNAL_LEDS)
+          const int pin_led_rx = 43;
+          const int pin_led_tx = 43;
+        #else
+          const int pin_led_rx = 43;
+          const int pin_led_tx = 43;
+        #endif
+      #endif
+
     #else
       #error An unsupported ESP32 board was selected. Cannot compile RNode firmware.
     #endif
index 0c87a39c449c69ee3ae60856aa4989e9488b1407..18014c45d050284f3b8fc7068d673c9ab06a6a7f 100644 (file)
--- a/Display.h
+++ b/Display.h
@@ -18,6 +18,8 @@
 
 #if BOARD_MODEL == BOARD_TDECK
   #include <Adafruit_ST7789.h>
+#elif BOARD_MODEL == BOARD_TBEAM_S_V1
+  #include <Adafruit_SH110X.h>
 #else
   #include <Wire.h>
   #include <Adafruit_SSD1306.h>
   #define DISP_ADDR 0x3C
   #define SCL_OLED 17
   #define SDA_OLED 18
+#elif BOARD_MODEL == BOARD_TBEAM_S_V1
+  #define DISP_RST -1
+  #define DISP_ADDR 0x3C
+  #define SCL_OLED 18
+  #define SDA_OLED 17
+  #define DISP_CUSTOM_ADDR false
 #else
   #define DISP_RST -1
   #define DISP_ADDR 0x3C
   Adafruit_ST7789 display = Adafruit_ST7789(DISPLAY_CS, DISPLAY_DC, -1);
   #define SSD1306_WHITE ST77XX_WHITE
   #define SSD1306_BLACK ST77XX_BLACK
+#elif BOARD_MODEL == BOARD_TBEAM_S_V1
+  Adafruit_SH1106G display = Adafruit_SH1106G(128, 64, &Wire, -1);
+  #define SSD1306_WHITE SH110X_WHITE
+  #define SSD1306_BLACK SH110X_BLACK
 #else
   Adafruit_SSD1306 display(DISP_W, DISP_H, &Wire, DISP_RST);
 #endif
@@ -114,12 +126,10 @@ void update_area_positions() {
 }
 
 uint8_t display_contrast = 0x00;
-#if BOARD_MODEL != BOARD_TDECK
-  void set_contrast(Adafruit_SSD1306 *display, uint8_t contrast) {
-    display->ssd1306_command(SSD1306_SETCONTRAST);
-    display->ssd1306_command(contrast);
+#if BOARD_MODEL == BOARD_TBEAM_S_V1
+  void set_contrast(Adafruit_SH1106G *display, uint8_t value) {
   }
-#else
+#elif BOARD_MODEL == BOARD_TDECK
   void set_contrast(Adafruit_ST7789 *display, uint8_t value) {
     static uint8_t level = 0;
     static uint8_t steps = 16;
@@ -144,6 +154,11 @@ uint8_t display_contrast = 0x00;
     }
     level = value;
   }
+#else
+  void set_contrast(Adafruit_SSD1306 *display, uint8_t contrast) {
+    display->ssd1306_command(SSD1306_SETCONTRAST);
+    display->ssd1306_command(contrast);
+  }
 #endif
 
 bool display_init() {
@@ -175,6 +190,8 @@ bool display_init() {
       delay(50);
       digitalWrite(pin_display_en, HIGH);
       Wire.begin(SDA_OLED, SCL_OLED);
+    #elif BOARD_MODEL == BOARD_TBEAM_S_V1
+      Wire.begin(SDA_OLED, SCL_OLED);
     #endif
 
     #if DISP_CUSTOM_ADDR == true
@@ -204,6 +221,8 @@ bool display_init() {
     display.init(240, 320);
     display.setSPISpeed(80e6);
     if (false) {
+    #elif BOARD_MODEL == BOARD_TBEAM_S_V1
+    if (!display.begin(display_address, true)) {
     #else
     if (!display.begin(SSD1306_SWITCHCAPVCC, display_address)) {
     #endif
@@ -228,6 +247,9 @@ bool display_init() {
       #elif BOARD_MODEL == BOARD_TBEAM
         disp_mode = DISP_MODE_LANDSCAPE;
         display.setRotation(0);
+      #elif BOARD_MODEL == BOARD_TBEAM_S_V1
+        disp_mode = DISP_MODE_PORTRAIT;
+        display.setRotation(1);
       #elif BOARD_MODEL == BOARD_HELTEC32_V2
         disp_mode = DISP_MODE_PORTRAIT;
         display.setRotation(1);
index 0ffb789d40ddba947ad35ccb998291a0c4deb70f..9bf7a8969dd631ede70ce9507093342001713b51 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -33,6 +33,7 @@ prep-esp32:
        arduino-cli core update-index --config-file arduino-cli.yaml
        arduino-cli core install esp32:esp32@$(ARDUINO_ESP_CORE_VER) --config-file arduino-cli.yaml
        arduino-cli lib install "Adafruit SSD1306"
+       arduino-cli lib install "Adafruit SH110X"
        arduino-cli lib install "Adafruit ST7735 and ST7789 Library"
        arduino-cli lib install "Adafruit NeoPixel"
        arduino-cli lib install "XPowersLib"
@@ -80,6 +81,9 @@ firmware-t3s3:
 firmware-tdeck:
        arduino-cli compile --log --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=0x3B\""
 
+firmware-tbeam_supreme:
+       arduino-cli compile --log --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=0x3D"
+
 firmware-lora32_v10: check_bt_buffers
        arduino-cli compile --log --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\""
 
@@ -174,8 +178,15 @@ upload-tdeck:
        arduino-cli upload -p /dev/ttyACM0 --fqbn esp32:esp32:esp32s3
        @sleep 1
        rnodeconf /dev/ttyACM0 --firmware-hash $$(./partition_hashes ./build/esp32.esp32.esp32s3/RNode_Firmware.ino.bin)
-       #@sleep 3
-       #python ./Release/esptool/esptool.py --chip esp32-s3 --port /dev/ttyACM0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
+       @sleep 3
+       python ./Release/esptool/esptool.py --chip esp32-s3 --port /dev/ttyACM0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
+
+upload-tbeam_supreme:
+       arduino-cli upload -p /dev/ttyACM0 --fqbn esp32:esp32:esp32s3
+       @sleep 1
+       rnodeconf /dev/ttyACM0 --firmware-hash $$(./partition_hashes ./build/esp32.esp32.esp32s3/RNode_Firmware.ino.bin)
+       @sleep 3
+       python ./Release/esptool/esptool.py --chip esp32-s3 --port /dev/ttyACM0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
 
 upload-rnode_ng_20:
        arduino-cli upload -p /dev/ttyUSB0 --fqbn esp32:esp32:ttgo-lora32
diff --git a/Power.h b/Power.h
index a00f883ca2175fef68a6e5a95d0f80020a34857a..71f81a3fd30c5765573b0b02658f5ebf24362406 100644 (file)
--- a/Power.h
+++ b/Power.h
@@ -1,9 +1,13 @@
-#if BOARD_MODEL == BOARD_TBEAM
+#if BOARD_MODEL == BOARD_TBEAM || BOARD_MODEL == BOARD_TBEAM_S_V1
   #include <XPowersLib.h>
   XPowersLibInterface* PMU = NULL;
 
   #ifndef PMU_WIRE_PORT
-    #define PMU_WIRE_PORT   Wire
+    #if BOARD_MODEL == BOARD_TBEAM_S_V1
+      #define PMU_WIRE_PORT   Wire1
+    #else
+      #define PMU_WIRE_PORT   Wire
+    #endif
   #endif
 
   #define BAT_V_MIN       3.15
@@ -168,7 +172,7 @@ void measure_battery() {
       // }
     }
 
-  #elif BOARD_MODEL == BOARD_TBEAM
+  #elif BOARD_MODEL == BOARD_TBEAM || BOARD_MODEL == BOARD_TBEAM_S_V1
     if (PMU) {
       float discharge_current = 0;
       float charge_current    = 0;
@@ -278,22 +282,16 @@ bool init_pmu() {
     if (!PMU) {
         PMU = new XPowersAXP2101(PMU_WIRE_PORT);
         if (!PMU->init()) {
-            Serial.println("Warning: Failed to find AXP2101 power management");
             delete PMU;
             PMU = NULL;
-        } else {
-            Serial.println("AXP2101 PMU init succeeded, using AXP2101 PMU");
         }
     }
 
     if (!PMU) {
         PMU = new XPowersAXP192(PMU_WIRE_PORT);
         if (!PMU->init()) {
-            Serial.println("Warning: Failed to find AXP192 power management");
             delete PMU;
             PMU = NULL;
-        } else {
-            Serial.println("AXP192 PMU init succeeded, using AXP192 PMU");
         }
     }
 
@@ -398,6 +396,86 @@ bool init_pmu() {
     // Set the time of pressing the button to turn off
     PMU->setPowerKeyPressOffTime(XPOWERS_POWEROFF_4S);
 
+    return true; 
+  #elif BOARD_MODEL == BOARD_TBEAM_S_V1
+    Wire1.begin(I2C_SDA, I2C_SCL);
+
+    if (!PMU) {
+        PMU = new XPowersAXP2101(PMU_WIRE_PORT);
+        if (!PMU->init()) {
+            delete PMU;
+            PMU = NULL;
+        }
+    }
+
+    if (!PMU) {
+      return false;
+    }
+
+    /**
+     * gnss module power channel
+     * The default ALDO4 is off, you need to turn on the GNSS power first, otherwise it will be invalid during
+     * initialization
+     */
+    PMU->setPowerChannelVoltage(XPOWERS_ALDO4, 3300);
+    PMU->enablePowerOutput(XPOWERS_ALDO4);
+
+    // lora radio power channel
+    PMU->setPowerChannelVoltage(XPOWERS_ALDO3, 3300);
+    PMU->enablePowerOutput(XPOWERS_ALDO3);
+
+    // m.2 interface
+    PMU->setPowerChannelVoltage(XPOWERS_DCDC3, 3300);
+    PMU->enablePowerOutput(XPOWERS_DCDC3);
+
+    /**
+     * ALDO2 cannot be turned off.
+     * It is a necessary condition for sensor communication.
+     * It must be turned on to properly access the sensor and screen
+     * It is also responsible for the power supply of PCF8563
+     */
+    PMU->setPowerChannelVoltage(XPOWERS_ALDO2, 3300);
+    PMU->enablePowerOutput(XPOWERS_ALDO2);
+
+    // 6-axis , magnetometer ,bme280 , oled screen power channel
+    PMU->setPowerChannelVoltage(XPOWERS_ALDO1, 3300);
+    PMU->enablePowerOutput(XPOWERS_ALDO1);
+
+    // sdcard power channle
+    PMU->setPowerChannelVoltage(XPOWERS_BLDO1, 3300);
+    PMU->enablePowerOutput(XPOWERS_BLDO1);
+
+    // PMU->setPowerChannelVoltage(XPOWERS_DCDC4, 3300);
+    // PMU->enablePowerOutput(XPOWERS_DCDC4);
+
+    // not use channel
+    PMU->disablePowerOutput(XPOWERS_DCDC2); // not elicited
+    PMU->disablePowerOutput(XPOWERS_DCDC5); // not elicited
+    PMU->disablePowerOutput(XPOWERS_DLDO1); // Invalid power channel, it does not exist
+    PMU->disablePowerOutput(XPOWERS_DLDO2); // Invalid power channel, it does not exist
+    PMU->disablePowerOutput(XPOWERS_VBACKUP);
+
+    // Configure charging
+    PMU->setChargeTargetVoltage(XPOWERS_AXP2101_CHG_VOL_4V2);
+    PMU->setChargerConstantCurr(XPOWERS_AXP2101_CHG_CUR_500MA);
+    // TODO: Reset
+    PMU->setChargingLedMode(XPOWERS_CHG_LED_CTRL_CHG);
+
+    // Set the time of pressing the button to turn off
+    PMU->setPowerKeyPressOffTime(XPOWERS_POWEROFF_4S);
+    PMU->setPowerKeyPressOnTime(XPOWERS_POWERON_128MS);
+
+    // disable all axp chip interrupt
+    PMU->disableIRQ(XPOWERS_AXP2101_ALL_IRQ);
+    PMU->clearIrqStatus();
+
+    // It is necessary to disable the detection function of the TS pin on the board
+    // without the battery temperature detection function, otherwise it will cause abnormal charging
+    PMU->disableTSPinMeasure();
+    PMU->enableVbusVoltageMeasure();
+    PMU->enableBattVoltageMeasure();
+
+
     return true; 
   #else
     return false;
index 7ad0d14985150c22a27006345545a60d2fa690b5..774283b200476ff6b014d48b6d6573e3dc830adb 100644 (file)
--- a/README.md
+++ b/README.md
@@ -74,6 +74,8 @@ The RNode Firmware supports the following boards:
 - Original v1.x RNodes from [unsigned.io](https://unsigned.io/shop/product/rnode)
 - LilyGO T-Beam v1.1 devices with SX1276/8 LoRa chips
 - LilyGO T-Beam v1.1 devices with SX1262/8 LoRa chips
+- LilyGO T-Beam Supreme devices
+- LilyGO T-Deck devices (currently display is disabled)
 - LilyGO LoRa32 v1.0 devices
 - LilyGO LoRa32 v2.0 devices
 - LilyGO LoRa32 v2.1 devices (with and without TCXO)
index 2344132ebd9d7dda7d66bc2402080695791846b4..7884d7f393d8f35ed6a8eb009f20b96afb0919f6 100644 (file)
@@ -94,7 +94,7 @@ void setup() {
     led_init();
   #endif
 
-  #if BOARD_MODEL != BOARD_RAK4631 && BOARD_MODEL != BOARD_RNODE_NG_22
+  #if BOARD_MODEL != BOARD_RAK4631 && BOARD_MODEL != BOARD_RNODE_NG_22 && BOARD_MODEL != BOARD_TBEAM_S_V1
   // Some boards need to wait until the hardware UART is set up before booting
   // the full firmware. In the case of the RAK4631, the line below will wait
   // until a serial connection is actually established with a master. Thus, it
diff --git a/ROM.h b/ROM.h
index c3d059615d3ea26c05aa8d0d9aa299cca2e34b13..8b9f8538d520a22fdd4dc1a4fd93f4ec287e12a1 100644 (file)
--- a/ROM.h
+++ b/ROM.h
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 #ifndef ROM_H
-       #define ROM_H
-
-       #define CHECKSUMMED_SIZE 0x0B
-
-       #define PRODUCT_RNODE    0x03  // Board code 0x31
-       #define MODEL_A4 0xA4          // RNode v1.0, 433 MHz
-       #define MODEL_A9 0xA9          // RNode v1.0, 868 MHz
-
-                                   // Board code 0x40
-       #define MODEL_A3 0xA3          // RNode v2.0, 433 MHz
-       #define MODEL_A8 0xA8          // RNode v2.0, 868 MHz
-
-                                   // Board code 0x41
-       #define MODEL_A2 0xA2          // RNode v2.1, 433 MHz
-       #define MODEL_A7 0xA7          // RNode v2.1, 868 MHz
-
-                                   // Board code 0x42
-       #define MODEL_A1 0xA1          // RNode v2.2, 433 MHz
-       #define MODEL_A6 0xA6          // RNode v2.2, 868 MHz
-       
-       #define PRODUCT_TBEAM    0xE0  // Board code 0x33
-       #define MODEL_E4 0xE4          // T-Beam SX1278, 433 Mhz
-       #define MODEL_E9 0xE9          // T-Beam SX1276, 868 Mhz
-       #define MODEL_E3 0xE3          // T-Beam SX1268, 433 Mhz
-       #define MODEL_E8 0xE8          // T-Beam SX1262, 868 Mhz
-       
-       #define PRODUCT_TDECK_V1 0xD0  // Board code 0x3B
-       #define MODEL_D4 0xD4          // LilyGO T-Deck, 433 MHz
-       #define MODEL_D9 0xD9          // LilyGO T-Deck, 868 MHz
-       
-       #define PRODUCT_T32_10   0xB2  // Board code 0x39
-       #define MODEL_BA 0xBA          // LilyGO T3 v1.0, 433 MHz
-       #define MODEL_BB 0xBB          // LilyGO T3 v1.0, 868 MHz
-       
-       #define PRODUCT_T32_20   0xB0  // Board code 0x36
-       #define MODEL_B3 0xB3          // LilyGO T3 v2.0, 433 MHz
-       #define MODEL_B8 0xB8          // LilyGO T3 v2.0, 868 MHz
-
-       #define PRODUCT_T32_21   0xB1  // Board code 0x37
-       #define MODEL_B4 0xB4          // LilyGO T3 v2.1, 433 MHz
-       #define MODEL_B9 0xB9          // LilyGO T3 v2.1, 868 MHz
-       
-       #define PRODUCT_H32_V2   0xC0  // Board code 0x38
-       #define MODEL_C4 0xC4          // Heltec Lora32 v2, 433 MHz
-       #define MODEL_C9 0xC9          // Heltec Lora32 v2, 868 MHz
-
-       #define PRODUCT_H32_V3   0xC1  // Board code 0x3A
-       #define MODEL_C5 0xC5          // Heltec Lora32 v3, 433 MHz
-       #define MODEL_CA 0xCA          // Heltec Lora32 v3, 868 MHz
-
-    #define PRODUCT_RAK4631  0x10  // Board code 0x51
-    #define MODEL_11 0x11          // RAK4631, 433 Mhz
-    #define MODEL_12 0x12          // RAK4631, 868 Mhz
-
-       #define PRODUCT_HMBRW    0xF0  // Board code 0x32
-       #define MODEL_FE 0xFE          // Homebrew board, max 17dBm output power
-       #define MODEL_FF 0xFF          // Homebrew board, max 14dBm output power
-
-
-       #define ADDR_PRODUCT   0x00
-       #define ADDR_MODEL     0x01
-       #define ADDR_HW_REV    0x02
-       #define ADDR_SERIAL    0x03
-       #define ADDR_MADE      0x07
-       #define ADDR_CHKSUM        0x0B
-       #define ADDR_SIGNATURE 0x1B
-       #define ADDR_INFO_LOCK 0x9B
-
-       #define ADDR_CONF_SF   0x9C
-       #define ADDR_CONF_CR   0x9D
-       #define ADDR_CONF_TXP  0x9E
-       #define ADDR_CONF_BW   0x9F
-       #define ADDR_CONF_FREQ 0xA3
-       #define ADDR_CONF_OK   0xA7
-       
-       #define ADDR_CONF_BT   0xB0
-       #define ADDR_CONF_DSET 0xB1
-       #define ADDR_CONF_DINT 0xB2
-       #define ADDR_CONF_DADR 0xB3
-       #define ADDR_CONF_DBLK 0xB4
-       #define ADDR_CONF_PSET 0xB5
-       #define ADDR_CONF_PINT 0xB6
-       #define ADDR_CONF_BSET 0xB7
-
-       #define INFO_LOCK_BYTE 0x73
-       #define CONF_OK_BYTE   0x73
-       #define BT_ENABLE_BYTE 0x73
-
-       #define EEPROM_RESERVED 200
+  #define ROM_H
+  #define CHECKSUMMED_SIZE  0x0B
+
+  // ROM address map ///////////////
+  #define ADDR_PRODUCT   0x00
+  #define ADDR_MODEL     0x01
+  #define ADDR_HW_REV    0x02
+  #define ADDR_SERIAL    0x03
+  #define ADDR_MADE      0x07
+  #define ADDR_CHKSUM     0x0B
+  #define ADDR_SIGNATURE 0x1B
+  #define ADDR_INFO_LOCK 0x9B
+
+  #define ADDR_CONF_SF   0x9C
+  #define ADDR_CONF_CR   0x9D
+  #define ADDR_CONF_TXP  0x9E
+  #define ADDR_CONF_BW   0x9F
+  #define ADDR_CONF_FREQ 0xA3
+  #define ADDR_CONF_OK   0xA7
+
+  #define ADDR_CONF_BT   0xB0
+  #define ADDR_CONF_DSET 0xB1
+  #define ADDR_CONF_DINT 0xB2
+  #define ADDR_CONF_DADR 0xB3
+  #define ADDR_CONF_DBLK 0xB4
+  #define ADDR_CONF_PSET 0xB5
+  #define ADDR_CONF_PINT 0xB6
+  #define ADDR_CONF_BSET 0xB7
+
+  #define INFO_LOCK_BYTE 0x73
+  #define CONF_OK_BYTE   0x73
+  #define BT_ENABLE_BYTE 0x73
+
+  #define EEPROM_RESERVED 200
+  //////////////////////////////////
 
 #endif
index ca7f3f6ee2fb84385e57e471f2dbc64c0310208d..eb7e41ae96da4771a6709eb523980ab0e81d150b 100644 (file)
@@ -190,6 +190,11 @@ uint8_t boot_vector = 0x00;
                void led_rx_off() {     }
                void led_tx_on()  { }
                void led_tx_off() { }
+       #elif BOARD_MODEL == BOARD_TBEAM_S_V1
+               void led_rx_on()  { }
+               void led_rx_off() {     }
+               void led_tx_on()  { }
+               void led_tx_off() { }
        #elif BOARD_MODEL == BOARD_LORA32_V1_0
                #if defined(EXTERNAL_LEDS)
                        void led_rx_on()  { digitalWrite(pin_led_rx, HIGH); }
@@ -1106,6 +1111,9 @@ void setTXPower() {
                if (model == MODEL_D4) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
                if (model == MODEL_D9) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
 
+               if (model == MODEL_DB) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
+               if (model == MODEL_DC) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
+
                if (model == MODEL_E4) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
                if (model == MODEL_E9) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
                if (model == MODEL_E3) LoRa->setTxPower(lora_txp, PA_OUTPUT_PA_BOOST_PIN);
@@ -1327,7 +1335,7 @@ bool eeprom_product_valid() {
        #if PLATFORM == PLATFORM_AVR
        if (rval == PRODUCT_RNODE || rval == PRODUCT_HMBRW) {
        #elif PLATFORM == PLATFORM_ESP32
-       if (rval == PRODUCT_RNODE || rval == BOARD_RNODE_NG_20 || rval == BOARD_RNODE_NG_21 || rval == PRODUCT_HMBRW || rval == PRODUCT_TBEAM || rval == PRODUCT_T32_10 || rval == PRODUCT_T32_20 || rval == PRODUCT_T32_21 || rval == PRODUCT_H32_V2 || rval == PRODUCT_H32_V3 || rval == PRODUCT_TDECK_V1) {
+       if (rval == PRODUCT_RNODE || rval == BOARD_RNODE_NG_20 || rval == BOARD_RNODE_NG_21 || rval == PRODUCT_HMBRW || rval == PRODUCT_TBEAM || rval == PRODUCT_T32_10 || rval == PRODUCT_T32_20 || rval == PRODUCT_T32_21 || rval == PRODUCT_H32_V2 || rval == PRODUCT_H32_V3 || rval == PRODUCT_TDECK_V1 || rval == PRODUCT_TBEAM_S_V1) {
        #elif PLATFORM == PLATFORM_NRF52
        if (rval == PRODUCT_RAK4631 || rval == PRODUCT_HMBRW) {
        #else
@@ -1359,6 +1367,8 @@ bool eeprom_model_valid() {
        if (model == MODEL_E4 || model == MODEL_E9 || model == MODEL_E3 || model == MODEL_E8) {
        #elif BOARD_MODEL == BOARD_TDECK
        if (model == MODEL_D4 || model == MODEL_D9) {
+       #elif BOARD_MODEL == BOARD_TBEAM_S_V1
+       if (model == MODEL_DB || model == MODEL_DC) {
        #elif BOARD_MODEL == BOARD_LORA32_V1_0
        if (model == MODEL_BA || model == MODEL_BB) {
        #elif BOARD_MODEL == BOARD_LORA32_V2_0
index 793b7fe0101b9cc2bcceb8c0864dab622f9a7259..e401d219edaa1bb18991a5d02de6ed8a9ae1c893 100644 (file)
@@ -723,6 +723,8 @@ void sx126x::enableTCXO() {
       uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
     #elif BOARD_MODEL == BOARD_TDECK
       uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
+    #elif BOARD_MODEL == BOARD_TBEAM_S_V1
+      uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
     #elif BOARD_MODEL == BOARD_RNODE_NG_22
       uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
     #endif