diff --git a/platformio.ini b/platformio.ini
index d8596b24..a364e584 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -83,7 +83,7 @@ lib_deps =
https://github.com/geeksville/ArduinoThread.git#72921ac222eed6f526ba1682023cee290d9aa1b3
PubSubClient
-; Common settings for conventional (non Portduino) Ardino targets
+; Common settings for conventional (non Portduino) Arduino targets
[arduino_base]
framework = arduino
@@ -157,7 +157,7 @@ board = ttgo-t-beam
lib_deps =
${esp32_base.lib_deps}
build_flags =
- ${esp32_base.build_flags} -D TBEAM_V10
+ ${esp32_base.build_flags} -D TBEAM_V10 -I variants/tbeam
; The original TBEAM board without the AXP power chip and a few other changes
; Note: I've heard reports this didn't work. Disabled until someone with a 0.7 can test and debug.
@@ -165,53 +165,53 @@ build_flags =
extends = esp32_base
board = ttgo-t-beam
build_flags =
- ${esp32_base.build_flags} -D TBEAM_V07
+ ${esp32_base.build_flags} -D TBEAM_V07 -I variants/tbeam_v07
[env:heltec-v1]
;build_type = debug ; to make it possible to step through our jtag debugger
extends = esp32_base
board = heltec_wifi_lora_32
build_flags =
- ${esp32_base.build_flags} -D HELTEC_V1
+ ${esp32_base.build_flags} -D HELTEC_V1 -I variants/heltec_v1
[env:heltec-v2.0]
;build_type = debug ; to make it possible to step through our jtag debugger
extends = esp32_base
board = heltec_wifi_lora_32_V2
build_flags =
- ${esp32_base.build_flags} -D HELTEC_V2_0
+ ${esp32_base.build_flags} -D HELTEC_V2_0 -I variants/heltec_v2
[env:heltec-v2.1]
;build_type = debug ; to make it possible to step through our jtag debugger
extends = esp32_base
board = heltec_wifi_lora_32_V2
build_flags =
- ${esp32_base.build_flags} -D HELTEC_V2_1
+ ${esp32_base.build_flags} -D HELTEC_V2_1 -I variants/heltec_v2
[env:tlora-v1]
extends = esp32_base
board = ttgo-lora32-v1
build_flags =
- ${esp32_base.build_flags} -D TLORA_V1
+ ${esp32_base.build_flags} -D TLORA_V1 -I variants/tlora_v1
; note: the platformio definition for lora32-v2 seems stale, it is missing a pins_arduino.h file, therefore I don't think it works
[env:tlora_v1_3]
extends = esp32_base
board = ttgo-lora32-v1
build_flags =
- ${esp32_base.build_flags} -D TLORA_V1_3
+ ${esp32_base.build_flags} -D TLORA_V1_3 -I variants/tlora_v1_3
[env:tlora-v2]
extends = esp32_base
board = ttgo-lora32-v1
build_flags =
- ${esp32_base.build_flags} -D TLORA_V2
+ ${esp32_base.build_flags} -D TLORA_V2 -I variants/tlora_v2
[env:tlora-v2-1-1.6]
extends = esp32_base
board = ttgo-lora32-v1
build_flags =
- ${esp32_base.build_flags} -D TLORA_V2_1_16
+ ${esp32_base.build_flags} -D TLORA_V2_1_16 -I variants/tlora_v2_1_16
; Meshtastic DIY v1 by Nano VHF Schematic based on ESP32-WROOM-32 (38 pins) devkit & EBYTE E22 SX1262/SX1268 module
[env:meshtastic-diy-v1]
@@ -221,6 +221,7 @@ build_flags =
${esp32_base.build_flags}
-D DIY_V1
-D EBYTE_E22
+ -I variants/meshtastic_diy_v1
; The Heltec Cubecell plus
; IMPORTANT NOTE: This target doesn't yet work and probably won't ever work. I'm keeping it around for now.
@@ -365,18 +366,6 @@ debug_tool = jlink
; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm)
;upload_protocol = jlink
-; Note, this board is not yet supported! It will not work without futher development.
-; THIS IS UNTESTED (I don't have this board), but other developers can use it as a starting point
-[env:rak4600]
-extends = nrf52_base
-board = wiscore_rak4600
-# add our variants files to the include and src paths
-# define build flags for the TFT_eSPI library
-build_flags = ${nrf52_base.build_flags} -Ivariants/WisCore_RAK4600_Board
-src_filter = ${nrf52_base.src_filter} +<../variants/WisCore_RAK4600_Board>
-lib_deps =
- ${arduino_base.lib_deps}
-
; The PPR board
[env:ppr]
extends = nrf52_base
@@ -475,8 +464,15 @@ lib_deps =
; The Portduino based sim environment on top of any host OS, all hardware will be simulated
[env:native]
platform = https://github.com/geeksville/platform-native.git
-src_filter = ${env.src_filter} - - - - -
-build_flags = ${arduino_base.build_flags} -O0
+src_filter =
+ ${env.src_filter}
+ -
+ -
+ -
+ -
+ -
+ +<../variants/portduino>
+build_flags = ${arduino_base.build_flags} -O0 -I variants/portduino
framework = arduino
board = cross_platform
lib_deps =
@@ -486,8 +482,15 @@ lib_deps =
; The Portduino based sim environment on top of a linux OS and touching linux hardware devices
[env:linux]
platform = https://github.com/geeksville/platform-native.git
-src_filter = ${env.src_filter} - - - - -
-build_flags = ${arduino_base.build_flags} -O0 -lgpiod
+src_filter =
+ ${env.src_filter}
+ -
+ -
+ -
+ -
+ -
+ +<../variants/portduino>
+build_flags = ${arduino_base.build_flags} -O0 -lgpiod -I variants/portduino
framework = arduino
board = linux_hardware
lib_deps =
@@ -500,4 +503,4 @@ lib_deps =
;extends = esp32_base
;board = genieblocks_lora
;build_flags =
-; ${esp32_base.build_flags} -D GENIEBLOCKS
+; ${esp32_base.build_flags} -D GENIEBLOCKS -Ivariants/genieblocks
diff --git a/src/DebugConfiguration.h b/src/DebugConfiguration.h
new file mode 100644
index 00000000..4397dfe0
--- /dev/null
+++ b/src/DebugConfiguration.h
@@ -0,0 +1,61 @@
+// DEBUG LED
+#ifndef LED_INVERTED
+#define LED_INVERTED 0 // define as 1 if LED is active low (on)
+#endif
+
+// -----------------------------------------------------------------------------
+// DEBUG
+// -----------------------------------------------------------------------------
+
+#ifdef CONSOLE_MAX_BAUD
+#define SERIAL_BAUD CONSOLE_MAX_BAUD
+#else
+#define SERIAL_BAUD 921600 // Serial debug baud rate
+#endif
+
+#include "SerialConsole.h"
+
+#define DEBUG_PORT (*console) // Serial debug port
+
+// What platforms should use SEGGER?
+#ifdef NRF52_SERIES
+
+// Always include the SEGGER code on NRF52 - because useful for debugging
+#include "SEGGER_RTT.h"
+
+// The channel we send stdout data to
+#define SEGGER_STDOUT_CH 0
+
+// Debug printing to segger console
+#define SEGGER_MSG(...) SEGGER_RTT_printf(SEGGER_STDOUT_CH, __VA_ARGS__)
+
+// If we are not on a NRF52840 (which has built in USB-ACM serial support) and we don't have serial pins hooked up, then we MUST
+// use SEGGER for debug output
+#if !defined(PIN_SERIAL_RX) && !defined(NRF52840_XXAA)
+// No serial ports on this board - ONLY use segger in memory console
+#define USE_SEGGER
+#endif
+
+#else
+#define SERIAL0_RX_GPIO 3 // Always GPIO3 on ESP32
+#endif
+
+#ifdef USE_SEGGER
+#define DEBUG_MSG(...) SEGGER_RTT_printf(0, __VA_ARGS__)
+#else
+#ifdef DEBUG_PORT
+#define DEBUG_MSG(...) DEBUG_PORT.logDebug(__VA_ARGS__)
+#else
+#define DEBUG_MSG(...)
+#endif
+#endif
+
+// -----------------------------------------------------------------------------
+// AXP192 (Rev1-specific options)
+// -----------------------------------------------------------------------------
+
+#define GPS_POWER_CTRL_CH 3
+#define LORA_POWER_CTRL_CH 2
+
+// Default Bluetooth PIN
+#define defaultBLEPin 123456
diff --git a/src/RF95Configuration.h b/src/RF95Configuration.h
new file mode 100644
index 00000000..f304aadd
--- /dev/null
+++ b/src/RF95Configuration.h
@@ -0,0 +1,7 @@
+// TODO refactor this out with better radio configuration system
+#ifdef USE_RF95
+#define RF95_RESET LORA_RESET
+#define RF95_IRQ LORA_DIO0 // on SX1262 version this is a no connect DIO0
+#define RF95_DIO1 LORA_DIO1 // Note: not really used for RF95
+#define RF95_DIO2 LORA_DIO2 // Note: not really used for RF95
+#endif
\ No newline at end of file
diff --git a/src/configuration.h b/src/configuration.h
index 7a482151..6f289ef2 100644
--- a/src/configuration.h
+++ b/src/configuration.h
@@ -45,10 +45,6 @@ along with this program. If not, see .
// If we are using the JTAG port for debugging, some pins must be left free for that (and things like GPS have to be disabled)
// we don't support jtag on the ttgo - access to gpio 12 is a PITA
-#ifdef ARDUINO_HELTEC_WIFI_LORA_32_V2
-//#define USE_JTAG
-#endif
-
#define REQUIRE_RADIO true // If true, we will fail to start if the radio is not found
/// Convert a preprocessor name into a quoted string
@@ -88,18 +84,6 @@ along with this program. If not, see .
#define BUTTON_PIN_TOUCH PIN_BUTTON_TOUCH
#endif
-// FIXME, use variant.h defs for all of this!!! (even on the ESP32 targets)
-#elif defined(CubeCell_BoardPlus)
-
-//
-// Standard definitions for CubeCell targets
-//
-
-#define NO_ESP32 // Don't use ESP32 libs (mainly bluetooth)
-
-#define LED_PIN -1 // FIXME totally bogus
-#define BUTTON_PIN -1
-
#else
//
@@ -169,338 +153,51 @@ along with this program. If not, see .
// This string must exactly match the case used in release file names or the android updater won't work
#define HW_VENDOR HardwareModel_TBEAM
-// #define BUTTON_NEED_PULLUP // if set we need to turn on the internal CPU pullup during sleep
-
-#define I2C_SDA 21
-#define I2C_SCL 22
-
-#define BUTTON_PIN 38 // The middle button GPIO on the T-Beam
-//#define BUTTON_PIN_ALT 13 // Alternate GPIO for an external button if needed. Does anyone use this? It is not documented anywhere.
-#define EXT_NOTIFY_OUT 13 // Default pin to use for Ext Notify Plugin.
-
-#define LED_INVERTED 1
-#define LED_PIN 4 // Newer tbeams (1.1) have an extra led on GPIO4
-
-// TTGO uses a common pinout for their SX1262 vs RF95 modules - both can be enabled and we will probe at runtime for RF95 and if
-// not found then probe for SX1262
-#define USE_RF95
-#define USE_SX1262
-
-#define LORA_DIO0 26 // a No connect on the SX1262 module
-#define LORA_RESET 23
-#define LORA_DIO1 33 // SX1262 IRQ
-#define LORA_DIO2 32 // SX1262 BUSY
-#define LORA_DIO3 // Not connected on PCB, but internally on the TTGO SX1262, if DIO3 is high the TXCO is enabled
-
-#ifdef USE_SX1262
-#define SX126X_CS RF95_NSS // FIXME - we really should define LORA_CS instead
-#define SX126X_DIO1 LORA_DIO1
-#define SX126X_BUSY LORA_DIO2
-#define SX126X_RESET LORA_RESET
-#define SX126X_E22 // Not really an E22 but TTGO seems to be trying to clone that
-// Internally the TTGO module hooks the SX1262-DIO2 in to control the TX/RX switch (which is the default for the sx1262interface
-// code)
-#endif
-
-// Leave undefined to disable our PMU IRQ handler. DO NOT ENABLE THIS because the pmuirq can cause sperious interrupts
-// and waking from light sleep
-// #define PMU_IRQ 35
-#define AXP192_SLAVE_ADDRESS 0x34
-
#elif defined(TBEAM_V07)
// This string must exactly match the case used in release file names or the android updater won't work
#define HW_VENDOR HardwareModel_TBEAM0p7
-// #define BUTTON_NEED_PULLUP // if set we need to turn on the internal CPU pullup during sleep
-
-#define I2C_SDA 21
-#define I2C_SCL 22
-
-#define BUTTON_PIN 39
-#define BATTERY_PIN 35 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
-#define EXT_NOTIFY_OUT 13 // Default pin to use for Ext Notify Plugin.
-
-#define USE_RF95
-#define LORA_DIO0 26 // a No connect on the SX1262 module
-#define LORA_RESET 23
-#define LORA_DIO1 33 // Not really used
-#define LORA_DIO2 32 // Not really used
-
-// This board has different GPS pins than all other boards
-#undef GPS_RX_PIN
-#undef GPS_TX_PIN
-#define GPS_RX_PIN 12
-#define GPS_TX_PIN 15
-
#elif defined(DIY_V1)
// This string must exactly match the case used in release file names or the android updater won't work
#define HW_VENDOR HardwareModel_DIY_V1
-// For OLED LCD
-#define I2C_SDA 21
-#define I2C_SCL 22
-
-// GPS
-#undef GPS_RX_PIN
-#define GPS_RX_PIN 15
-//#undef GPS_TX_PIN
-//#define GPS_TX_PIN 12 // not connected
-
-#define BUTTON_PIN 39 // The middle button GPIO on the T-Beam
-#define EXT_NOTIFY_OUT 12 // Overridden default pin to use for Ext Notify Plugin (#975).
-#define LED_PIN 2 // add status LED (compatible with core-pcb and DIY targets)
-
-#define LORA_DIO0 26 // a No connect on the SX1262/SX1268 module
-#define LORA_RESET 23 // RST for SX1276, and for SX1262/SX1268
-#define LORA_DIO1 33 // IRQ for SX1262/SX1268
-#define LORA_DIO2 32 // BUSY for SX1262/SX1268
-#define LORA_DIO3 // Not connected on PCB, but internally on the TTGO SX1262/SX1268, if DIO3 is high the TXCO is enabled
-
-#define RF95_SCK 5
-#define RF95_MISO 19
-#define RF95_MOSI 27
-#define RF95_NSS 18
-
-// supported modules list
-#define USE_SX1262
-#define USE_SX1268
-#define USE_LLCC68
-
-// common pinouts for SX126X modules
-#define SX126X_CS 18 // NSS for SX126X
-#define SX126X_DIO1 LORA_DIO1
-#define SX126X_BUSY LORA_DIO2
-#define SX126X_RESET LORA_RESET
-#define SX126X_RXEN 14
-#define SX126X_TXEN 13
-
-#ifdef EBYTE_E22
-// Internally the TTGO module hooks the SX126x-DIO2 in to control the TX/RX switch
-// (which is the default for the sx1262interface code)
-#define SX126X_E22
-#endif
-
#elif defined(ARDUINO_HELTEC_WIFI_LORA_32_V2)
-// the default ESP32 Pin of 15 is the Oled SCL, set to 36 and 37 and works fine.
-// Tested on Neo6m module.
-#undef GPS_RX_PIN
-#undef GPS_TX_PIN
-#define GPS_RX_PIN 36
-#define GPS_TX_PIN 37
-
-#ifndef USE_JTAG // gpio15 is TDO for JTAG, so no I2C on this board while doing jtag
-#define I2C_SDA 4 // I2C pins for this board
-#define I2C_SCL 15
-#endif
-
-#define RESET_OLED 16 // If defined, this pin will be used to reset the display controller
-
-#define VEXT_ENABLE 21 // active low, powers the oled display and the lora antenna boost
-#define LED_PIN 25 // If defined we will blink this LED
-#define BUTTON_PIN 0 // If defined, this will be used for user button presses
-
-#define USE_RF95
-#define LORA_DIO0 26 // a No connect on the SX1262 module
-#ifndef USE_JTAG
-#define LORA_RESET 14
-#endif
-#define LORA_DIO1 35 // Not really used
-#define LORA_DIO2 34 // Not really used
-
-// ratio of voltage divider = 3.20 (R1=100k, R2=220k)
-#define ADC_MULTIPLIER 3.2
-
#ifdef HELTEC_V2_0
// This string must exactly match the case used in release file names or the android updater won't work
#define HW_VENDOR HardwareModel_HELTEC_V2_0
-#define BATTERY_PIN 13 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
-
#endif
#ifdef HELTEC_V2_1
// This string must exactly match the case used in release file names or the android updater won't work
#define HW_VENDOR HardwareModel_HELTEC_V2_1
-#define BATTERY_PIN 37 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
-#define EXT_NOTIFY_OUT 13 // Default pin to use for Ext Notify Plugin.
-
#endif
#elif defined(ARDUINO_HELTEC_WIFI_LORA_32)
-// the default ESP32 Pin of 15 is the Oled SCL, set to 36 and 37 and works fine.
-// Tested on Neo6m module.
-#undef GPS_RX_PIN
-#undef GPS_TX_PIN
-#define GPS_RX_PIN 36
-#define GPS_TX_PIN 37
-
-#ifndef USE_JTAG // gpio15 is TDO for JTAG, so no I2C on this board while doing jtag
-#define I2C_SDA 4 // I2C pins for this board
-#define I2C_SCL 15
-#endif
-
-#define RESET_OLED 16 // If defined, this pin will be used to reset the display controller
-
-#define LED_PIN 25 // If defined we will blink this LED
-#define BUTTON_PIN 0 // If defined, this will be used for user button presses
-
-#define USE_RF95
-#define LORA_DIO0 26 // a No connect on the SX1262 module
-#ifndef USE_JTAG
-#define LORA_RESET 14
-#endif
-#define LORA_DIO1 33 // Not really used
-#define LORA_DIO2 32 // Not really used
-
-// ratio of voltage divider = 3.20 (R1=100k, R2=220k)
-#define ADC_MULTIPLIER 3.2
-
-// This string must exactly match the case used in release file names or the android updater won't work
#define HW_VENDOR HardwareModel_HELTEC_V1
-#define BATTERY_PIN 13 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
-
#elif defined(TLORA_V1)
-// This string must exactly match the case used in release file names or the android updater won't work
+
#define HW_VENDOR HardwareModel_TLORA_V1
-#undef GPS_RX_PIN
-#undef GPS_TX_PIN
-#define GPS_RX_PIN 36
-#define GPS_TX_PIN 37
-
-#define I2C_SDA 4 // I2C pins for this board
-#define I2C_SCL 15
-
-#define RESET_OLED 16 // If defined, this pin will be used to reset the display controller
-
-// #define VEXT_ENABLE 21 // active low, powers the oled display and the lora antenna boost
-#define LED_PIN 2 // If defined we will blink this LED
-#define BUTTON_PIN 0 // If defined, this will be used for user button presses
-#define BUTTON_NEED_PULLUP
-#define EXT_NOTIFY_OUT 13 // Default pin to use for Ext Notify Plugin.
-
-#define USE_RF95
-#define LORA_DIO0 26 // a No connect on the SX1262 module
-#define LORA_RESET 14
-#define LORA_DIO1 35 // Not really used
-#define LORA_DIO2 34 // Not really used
#elif defined(TLORA_V2)
// This string must exactly match the case used in release file names or the android updater won't work
#define HW_VENDOR HardwareModel_TLORA_V2
-#undef GPS_RX_PIN
-#undef GPS_TX_PIN
-#define GPS_RX_PIN 36
-#define GPS_TX_PIN 13 // per @eugene
-
-#define BATTERY_PIN 35 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
-
-#define I2C_SDA 21 // I2C pins for this board
-#define I2C_SCL 22
-
-#define RESET_OLED 16 // If defined, this pin will be used to reset the display controller
-
-#define VEXT_ENABLE 21 // active low, powers the oled display and the lora antenna boost
-#define LED_PIN 25 // If defined we will blink this LED
-#define BUTTON_PIN \
- 0 // If defined, this will be used for user button presses, if your board doesn't have a physical switch, you can wire one
- // between this pin and ground
-#define BUTTON_NEED_PULLUP
-
-#define USE_RF95
-#define LORA_DIO0 26 // a No connect on the SX1262 module
-#define LORA_RESET 14
-#define LORA_DIO1 35 // Not really used
-#define LORA_DIO2 34 // Not really used
-
#elif defined(TLORA_V1_3)
// This string must exactly match the case used in release file names or the android updater won't work
#define HW_VENDOR HardwareModel_TLORA_V1_1p3
-#undef GPS_RX_PIN
-#undef GPS_TX_PIN
-#define GPS_RX_PIN 36
-#define GPS_TX_PIN 13 // per @eugene
-
-#define BATTERY_PIN 35 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
-
-#define I2C_SDA 21 // I2C pins for this board
-#define I2C_SCL 22
-
-#define RESET_OLED 16 // If defined, this pin will be used to reset the display controller
-
-#define VEXT_ENABLE 21 // active low, powers the oled display and the lora antenna boost
-#define LED_PIN 25 // If defined we will blink this LED
-#define BUTTON_PIN 36
-#define BUTTON_NEED_PULLUP
-
-#define USE_RF95
-#define LORA_DIO0 26 // a No connect on the SX1262 module
-#define LORA_RESET 14
-#define LORA_DIO1 35 // Not really used
-#define LORA_DIO2 34 // Not really used
-
#elif defined(TLORA_V2_1_16)
// This string must exactly match the case used in release file names or the android updater won't work
#define HW_VENDOR HardwareModel_TLORA_V2_1_1p6
-#undef GPS_RX_PIN
-#undef GPS_TX_PIN
-#define GPS_RX_PIN 15 // per @der_bear on the forum, 36 is incorrect for this board type and 15 is a better pick
-#define GPS_TX_PIN 13
-
-#define BATTERY_PIN 35 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
-
-#define I2C_SDA 21 // I2C pins for this board
-#define I2C_SCL 22
-
-#define RESET_OLED 16 // If defined, this pin will be used to reset the display controller
-
-#define VEXT_ENABLE 21 // active low, powers the oled display and the lora antenna boost
-#define LED_PIN 25 // If defined we will blink this LED
-#define BUTTON_PIN 12 // If defined, this will be used for user button presses,
-
-#define BUTTON_NEED_PULLUP
-
-#define USE_RF95
-#define LORA_DIO0 26 // a No connect on the SX1262 module
-#define LORA_RESET 14
-#define LORA_DIO1 35 // Not really used
-#define LORA_DIO2 34 // Not really used
-
#elif defined(GENIEBLOCKS)
// This string must exactly match the case used in release file names or the android updater won't work
#define HW_VENDOR HardwareModel_GENIEBLOCKS
-#undef GPS_RX_PIN
-#undef GPS_TX_PIN
-#define GPS_RX_PIN 5
-#define GPS_TX_PIN 18
-#define GPS_RESET_N 10
-#define GPS_EXTINT 23 // On MAX-M8 module pin name is EXTINT. On L70 module pin name is STANDBY.
-
-#define BATTERY_PIN 39 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
-#define BATTERY_EN_PIN 14 // Voltage voltage divider enable pin connected to mosfet
-
-#define I2C_SDA 4 // I2C pins for this board
-#define I2C_SCL 2
-
-#define LED_PIN 12 // If defined we will blink this LED
-//#define BUTTON_PIN 36 // If defined, this will be used for user button presses (ToDo problem on that line on debug screen -->
-// Long press start!) #define BUTTON_NEED_PULLUP //GPIOs 34 to 39 are GPIs – input only pins. These pins don’t have internal
-// pull-ups or pull-down resistors.
-
-#define USE_RF95
-#define LORA_DIO0 38 // a No connect on the SX1262 module
-#define LORA_RESET 9
-
-#define RF95_SCK 22
-#define RF95_MISO 19
-#define RF95_MOSI 13
-#define RF95_NSS 21
#endif
@@ -533,100 +230,8 @@ along with this program. If not, see .
#define HW_VENDOR HardwareModel_PORTDUINO
-#define USE_SIM_RADIO
-
-// Pine64 uses a common pinout for their SX1262 vs RF95 modules - both can be enabled and we will probe at runtime for RF95 and if
-// not found then probe for SX1262. Currently the RF95 code is disabled because I think the RF95 module won't need to ship.
-// #define USE_RF95
-#define USE_SX1262
-
-// Fake SPI device selections
-#define RF95_SCK 5
-#define RF95_MISO 19
-#define RF95_MOSI 27
-#define RF95_NSS RADIOLIB_NC // the ch341f spi controller does CS for us
-
-#define LORA_DIO0 26 // a No connect on the SX1262 module
-#define LORA_RESET 14
-#define LORA_DIO1 33 // SX1262 IRQ, called DIO0 on pinelora schematic, pin 7 on ch341f "ack" - FIXME, enable hwints in linux
-#define LORA_DIO2 32 // SX1262 BUSY, actually connected to "DIO5" on pinelora schematic, pin 8 on ch341f "slct"
-#define LORA_DIO3 // Not connected on PCB, but internally on the TTGO SX1262, if DIO3 is high the TXCO is enabled
-
-#ifdef USE_SX1262
-#define SX126X_CS 20 // CS0 on pinelora schematic, hooked to gpio D0 on ch341f
-#define SX126X_DIO1 LORA_DIO1
-#define SX126X_BUSY LORA_DIO2
-#define SX126X_RESET LORA_RESET
-// HOPE RFM90 does not have a TCXO therefore not SX126X_E22
#endif
-#endif
-
-// DEBUG LED
-#ifndef LED_INVERTED
-#define LED_INVERTED 0 // define as 1 if LED is active low (on)
-#endif
-
-#ifdef USE_RF95
-#define RF95_RESET LORA_RESET
-#define RF95_IRQ LORA_DIO0 // on SX1262 version this is a no connect DIO0
-#define RF95_DIO1 LORA_DIO1 // Note: not really used for RF95
-#define RF95_DIO2 LORA_DIO2 // Note: not really used for RF95
-#endif
-
-// -----------------------------------------------------------------------------
-// DEBUG
-// -----------------------------------------------------------------------------
-
-#ifdef CONSOLE_MAX_BAUD
-#define SERIAL_BAUD CONSOLE_MAX_BAUD
-#else
-#define SERIAL_BAUD 921600 // Serial debug baud rate
-#endif
-
-#include "SerialConsole.h"
-
-#define DEBUG_PORT (*console) // Serial debug port
-
-// What platforms should use SEGGER?
-#ifdef NRF52_SERIES
-
-// Always include the SEGGER code on NRF52 - because useful for debugging
-#include "SEGGER_RTT.h"
-
-// The channel we send stdout data to
-#define SEGGER_STDOUT_CH 0
-
-// Debug printing to segger console
-#define SEGGER_MSG(...) SEGGER_RTT_printf(SEGGER_STDOUT_CH, __VA_ARGS__)
-
-// If we are not on a NRF52840 (which has built in USB-ACM serial support) and we don't have serial pins hooked up, then we MUST
-// use SEGGER for debug output
-#if !defined(PIN_SERIAL_RX) && !defined(NRF52840_XXAA)
-// No serial ports on this board - ONLY use segger in memory console
-#define USE_SEGGER
-#endif
-
-#else
-#define SERIAL0_RX_GPIO 3 // Always GPIO3 on ESP32
-#endif
-
-#ifdef USE_SEGGER
-#define DEBUG_MSG(...) SEGGER_RTT_printf(0, __VA_ARGS__)
-#else
-#ifdef DEBUG_PORT
-#define DEBUG_MSG(...) DEBUG_PORT.logDebug(__VA_ARGS__)
-#else
-#define DEBUG_MSG(...)
-#endif
-#endif
-
-// -----------------------------------------------------------------------------
-// AXP192 (Rev1-specific options)
-// -----------------------------------------------------------------------------
-
-#define GPS_POWER_CTRL_CH 3
-#define LORA_POWER_CTRL_CH 2
-
-// Default Bluetooth PIN
-#define defaultBLEPin 123456
+#include "variant.h"
+#include "RF95Configuration.h"
+#include "DebugConfiguration.h"
\ No newline at end of file
diff --git a/src/main.cpp b/src/main.cpp
index 09253657..031dba8a 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -42,9 +42,6 @@
#include "SX1268Interface.h"
#include "LLCC68Interface.h"
-#ifdef NRF52_SERIES
-#include "variant.h"
-#endif
using namespace concurrency;
diff --git a/src/mesh/RadioLibInterface.h b/src/mesh/RadioLibInterface.h
index de350552..8fe2e2b8 100644
--- a/src/mesh/RadioLibInterface.h
+++ b/src/mesh/RadioLibInterface.h
@@ -4,10 +4,6 @@
#include "RadioInterface.h"
#include "MeshPacketQueue.h"
-#ifdef CubeCell_BoardPlus
-#define RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED
-#endif
-
#define RADIOLIB_EXCLUDE_HTTP
#include
diff --git a/variants/WisCore_RAK4600_Board/variant.cpp b/variants/WisCore_RAK4600_Board/variant.cpp
deleted file mode 100644
index f6d55f7d..00000000
--- a/variants/WisCore_RAK4600_Board/variant.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- Copyright (c) 2014-2015 Arduino LLC. All right reserved.
- Copyright (c) 2016 Sandeep Mistry All right reserved.
- Copyright (c) 2018, Adafruit Industries (adafruit.com)
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-*/
-
-#include "variant.h"
-
-#include "wiring_constants.h"
-#include "wiring_digital.h"
-#include "nrf.h"
-
-const uint32_t g_ADigitalPinMap[] = {
- // D0 - D7
- 0, // xtal 1
- 1, // xtal 2
- 2, // a0
- 3, // a1
- 4, // a2
- 5, // a3
- 6, // TXD
- 7, // GPIO #7
-
- // D8 - D13
- 8, // RXD
-
- 9, // NFC1
- 10, // NFC2
-
- 11, // GPIO11
-
- 12, // SCK
- 13, // MOSI
- 14, // MISO
-
- 15, // GPIO #15
- 16, // GPIO #16
-
- // function set pins
- 17, // LED #1 (red)
- 18, // SWO
- 19, // LED #2 (blue)
- 20, // DFU
- 21, // Reset
- 22, // Factory Reset
- 23, // N/A
- 24, // N/A
-
- 25, // SDA
- 26, // SCL
- 27, // GPIO #27
- 28, // A4
- 29, // A5
- 30, // A6
- 31, // A7
-};
-
-void initVariant()
-{
- // LED1 & LED2
- pinMode(PIN_LED1, OUTPUT);
- ledOff(PIN_LED1);
-
- pinMode(PIN_LED2, OUTPUT);
- ledOff(PIN_LED2);
-}
\ No newline at end of file
diff --git a/variants/WisCore_RAK4600_Board/variant.h b/variants/WisCore_RAK4600_Board/variant.h
deleted file mode 100644
index 4eff0008..00000000
--- a/variants/WisCore_RAK4600_Board/variant.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- Copyright (c) 2014-2015 Arduino LLC. All right reserved.
- Copyright (c) 2016 Sandeep Mistry All right reserved.
- Copyright (c) 2018, Adafruit Industries (adafruit.com)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-*/
-
-#ifndef _VARIANT_RAK4600_
-#define _VARIANT_RAK4600_
-
-#define RAK4600
-
-/** Master clock frequency */
-#define VARIANT_MCK (64000000ul)
-
-#define USE_LFXO // Board uses 32khz crystal for LF
-// define USE_LFRC // Board uses RC for LF
-
-/*----------------------------------------------------------------------------
- * Headers
- *----------------------------------------------------------------------------*/
-
-#include "WVariant.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif // __cplusplus
-
-// Number of pins defined in PinDescription array
-#define PINS_COUNT (32u)
-#define NUM_DIGITAL_PINS (32u)
-#define NUM_ANALOG_INPUTS (8u)
-#define NUM_ANALOG_OUTPUTS (0u)
-
-// LEDs
-#define PIN_LED1 (17)
-#define PIN_LED2 (19)
-
-#define LED_BUILTIN PIN_LED1
-#define LED_CONN PIN_LED2
-
-#define LED_RED PIN_LED1
-#define LED_BLUE PIN_LED2
-
-#define LED_STATE_ON 1 // State when LED is litted
-
-/*
- * Analog pins
- */
-#define PIN_A0 (2)
-#define PIN_A1 (3)
-#define PIN_A2 (4)
-#define PIN_A3 (5)
-#define PIN_A4 (28)
-#define PIN_A5 (29)
-#define PIN_A6 (30)
-#define PIN_A7 (31)
-
- static const uint8_t A0 = PIN_A0;
- static const uint8_t A1 = PIN_A1;
- static const uint8_t A2 = PIN_A2;
- static const uint8_t A3 = PIN_A3;
- static const uint8_t A4 = PIN_A4;
- static const uint8_t A5 = PIN_A5;
- static const uint8_t A6 = PIN_A6;
- static const uint8_t A7 = PIN_A7;
-#define ADC_RESOLUTION 14
-
-// Other pins
-#define PIN_AREF (24)
-#define PIN_VBAT PIN_A7
-#define PIN_NFC1 (9)
-#define PIN_NFC2 (10)
-
- static const uint8_t AREF = PIN_AREF;
-
-/*
- * Serial interfaces
- */
-// Serial
-#define PIN_SERIAL_RX (22)
-#define PIN_SERIAL_TX (23)
-
-/*
- * SPI Interfaces
- */
-#define SPI_INTERFACES_COUNT 1
-
-#define PIN_SPI_MISO (6)
-#define PIN_SPI_MOSI (5)
-#define PIN_SPI_SCK (7)
-
- static const uint8_t SS = 4;
- static const uint8_t MOSI = PIN_SPI_MOSI;
- static const uint8_t MISO = PIN_SPI_MISO;
- static const uint8_t SCK = PIN_SPI_SCK;
-
-/*
- * Wire Interfaces
- */
-#define WIRE_INTERFACES_COUNT 1
-
-#define PIN_WIRE_SDA (13u)
-#define PIN_WIRE_SCL (12u)
-
-#ifdef __cplusplus
-}
-#endif
-
-/*----------------------------------------------------------------------------
- * Arduino objects - C++ only
- *----------------------------------------------------------------------------*/
-
-#endif
\ No newline at end of file
diff --git a/variants/genieblocks/variant.h b/variants/genieblocks/variant.h
new file mode 100644
index 00000000..0e51e3a9
--- /dev/null
+++ b/variants/genieblocks/variant.h
@@ -0,0 +1,26 @@
+#undef GPS_RX_PIN
+#undef GPS_TX_PIN
+#define GPS_RX_PIN 5
+#define GPS_TX_PIN 18
+#define GPS_RESET_N 10
+#define GPS_EXTINT 23 // On MAX-M8 module pin name is EXTINT. On L70 module pin name is STANDBY.
+
+#define BATTERY_PIN 39 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
+#define BATTERY_EN_PIN 14 // Voltage voltage divider enable pin connected to mosfet
+
+#define I2C_SDA 4 // I2C pins for this board
+#define I2C_SCL 2
+
+#define LED_PIN 12 // If defined we will blink this LED
+//#define BUTTON_PIN 36 // If defined, this will be used for user button presses (ToDo problem on that line on debug screen -->
+// Long press start!) #define BUTTON_NEED_PULLUP //GPIOs 34 to 39 are GPIs – input only pins. These pins don’t have internal
+// pull-ups or pull-down resistors.
+
+#define USE_RF95
+#define LORA_DIO0 38 // a No connect on the SX1262 module
+#define LORA_RESET 9
+
+#define RF95_SCK 22
+#define RF95_MISO 19
+#define RF95_MOSI 13
+#define RF95_NSS 21
\ No newline at end of file
diff --git a/variants/heltec_v1/variant.h b/variants/heltec_v1/variant.h
new file mode 100644
index 00000000..25cb1407
--- /dev/null
+++ b/variants/heltec_v1/variant.h
@@ -0,0 +1,29 @@
+// the default ESP32 Pin of 15 is the Oled SCL, set to 36 and 37 and works fine.
+// Tested on Neo6m module.
+#undef GPS_RX_PIN
+#undef GPS_TX_PIN
+#define GPS_RX_PIN 36
+#define GPS_TX_PIN 37
+
+#ifndef USE_JTAG // gpio15 is TDO for JTAG, so no I2C on this board while doing jtag
+#define I2C_SDA 4 // I2C pins for this board
+#define I2C_SCL 15
+#endif
+
+#define RESET_OLED 16 // If defined, this pin will be used to reset the display controller
+
+#define LED_PIN 25 // If defined we will blink this LED
+#define BUTTON_PIN 0 // If defined, this will be used for user button presses
+
+#define USE_RF95
+#define LORA_DIO0 26 // a No connect on the SX1262 module
+#ifndef USE_JTAG
+#define LORA_RESET 14
+#endif
+#define LORA_DIO1 33 // Not really used
+#define LORA_DIO2 32 // Not really used
+
+// ratio of voltage divider = 3.20 (R1=100k, R2=220k)
+#define ADC_MULTIPLIER 3.2
+
+#define BATTERY_PIN 13 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
diff --git a/variants/heltec_v2/variant.h b/variants/heltec_v2/variant.h
new file mode 100644
index 00000000..85fe79e3
--- /dev/null
+++ b/variants/heltec_v2/variant.h
@@ -0,0 +1,41 @@
+// the default ESP32 Pin of 15 is the Oled SCL, set to 36 and 37 and works fine.
+// Tested on Neo6m module.
+#undef GPS_RX_PIN
+#undef GPS_TX_PIN
+#define GPS_RX_PIN 36
+#define GPS_TX_PIN 37
+
+#ifndef USE_JTAG // gpio15 is TDO for JTAG, so no I2C on this board while doing jtag
+#define I2C_SDA 4 // I2C pins for this board
+#define I2C_SCL 15
+#endif
+
+#define RESET_OLED 16 // If defined, this pin will be used to reset the display controller
+
+#define VEXT_ENABLE 21 // active low, powers the oled display and the lora antenna boost
+#define LED_PIN 25 // If defined we will blink this LED
+#define BUTTON_PIN 0 // If defined, this will be used for user button presses
+
+#define USE_RF95
+#define LORA_DIO0 26 // a No connect on the SX1262 module
+#ifndef USE_JTAG
+#define LORA_RESET 14
+#endif
+#define LORA_DIO1 35 // Not really used
+#define LORA_DIO2 34 // Not really used
+
+// ratio of voltage divider = 3.20 (R1=100k, R2=220k)
+#define ADC_MULTIPLIER 3.2
+
+#ifdef HELTEC_V2_0
+
+#define BATTERY_PIN 13 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
+
+#endif
+
+#ifdef HELTEC_V2_1
+
+#define BATTERY_PIN 37 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
+#define EXT_NOTIFY_OUT 13 // Default pin to use for Ext Notify Plugin.
+
+#endif
\ No newline at end of file
diff --git a/variants/meshtastic_diy_v1/variant.h b/variants/meshtastic_diy_v1/variant.h
new file mode 100644
index 00000000..8dbfe0e4
--- /dev/null
+++ b/variants/meshtastic_diy_v1/variant.h
@@ -0,0 +1,43 @@
+// For OLED LCD
+#define I2C_SDA 21
+#define I2C_SCL 22
+
+// GPS
+#undef GPS_RX_PIN
+#define GPS_RX_PIN 15
+//#undef GPS_TX_PIN
+//#define GPS_TX_PIN 12 // not connected
+
+#define BUTTON_PIN 39 // The middle button GPIO on the T-Beam
+#define EXT_NOTIFY_OUT 12 // Overridden default pin to use for Ext Notify Plugin (#975).
+#define LED_PIN 2 // add status LED (compatible with core-pcb and DIY targets)
+
+#define LORA_DIO0 26 // a No connect on the SX1262/SX1268 module
+#define LORA_RESET 23 // RST for SX1276, and for SX1262/SX1268
+#define LORA_DIO1 33 // IRQ for SX1262/SX1268
+#define LORA_DIO2 32 // BUSY for SX1262/SX1268
+#define LORA_DIO3 // Not connected on PCB, but internally on the TTGO SX1262/SX1268, if DIO3 is high the TXCO is enabled
+
+#define RF95_SCK 5
+#define RF95_MISO 19
+#define RF95_MOSI 27
+#define RF95_NSS 18
+
+// supported modules list
+#define USE_SX1262
+#define USE_SX1268
+#define USE_LLCC68
+
+// common pinouts for SX126X modules
+#define SX126X_CS 18 // NSS for SX126X
+#define SX126X_DIO1 LORA_DIO1
+#define SX126X_BUSY LORA_DIO2
+#define SX126X_RESET LORA_RESET
+#define SX126X_RXEN 14
+#define SX126X_TXEN 13
+
+#ifdef EBYTE_E22
+// Internally the TTGO module hooks the SX126x-DIO2 in to control the TX/RX switch
+// (which is the default for the sx1262interface code)
+#define SX126X_E22
+#endif
\ No newline at end of file
diff --git a/variants/portduino/variant.h b/variants/portduino/variant.h
new file mode 100644
index 00000000..18758cb0
--- /dev/null
+++ b/variants/portduino/variant.h
@@ -0,0 +1,26 @@
+#define USE_SIM_RADIO
+
+// Pine64 uses a common pinout for their SX1262 vs RF95 modules - both can be enabled and we will probe at runtime for RF95 and if
+// not found then probe for SX1262. Currently the RF95 code is disabled because I think the RF95 module won't need to ship.
+// #define USE_RF95
+#define USE_SX1262
+
+// Fake SPI device selections
+#define RF95_SCK 5
+#define RF95_MISO 19
+#define RF95_MOSI 27
+#define RF95_NSS RADIOLIB_NC // the ch341f spi controller does CS for us
+
+#define LORA_DIO0 26 // a No connect on the SX1262 module
+#define LORA_RESET 14
+#define LORA_DIO1 33 // SX1262 IRQ, called DIO0 on pinelora schematic, pin 7 on ch341f "ack" - FIXME, enable hwints in linux
+#define LORA_DIO2 32 // SX1262 BUSY, actually connected to "DIO5" on pinelora schematic, pin 8 on ch341f "slct"
+#define LORA_DIO3 // Not connected on PCB, but internally on the TTGO SX1262, if DIO3 is high the TXCO is enabled
+
+#ifdef USE_SX1262
+#define SX126X_CS 20 // CS0 on pinelora schematic, hooked to gpio D0 on ch341f
+#define SX126X_DIO1 LORA_DIO1
+#define SX126X_BUSY LORA_DIO2
+#define SX126X_RESET LORA_RESET
+// HOPE RFM90 does not have a TCXO therefore not SX126X_E22
+#endif
\ No newline at end of file
diff --git a/variants/tbeam/variant.h b/variants/tbeam/variant.h
new file mode 100644
index 00000000..fef19e78
--- /dev/null
+++ b/variants/tbeam/variant.h
@@ -0,0 +1,37 @@
+// #define BUTTON_NEED_PULLUP // if set we need to turn on the internal CPU pullup during sleep
+
+#define I2C_SDA 21
+#define I2C_SCL 22
+
+#define BUTTON_PIN 38 // The middle button GPIO on the T-Beam
+//#define BUTTON_PIN_ALT 13 // Alternate GPIO for an external button if needed. Does anyone use this? It is not documented anywhere.
+#define EXT_NOTIFY_OUT 13 // Default pin to use for Ext Notify Plugin.
+
+#define LED_INVERTED 1
+#define LED_PIN 4 // Newer tbeams (1.1) have an extra led on GPIO4
+
+// TTGO uses a common pinout for their SX1262 vs RF95 modules - both can be enabled and we will probe at runtime for RF95 and if
+// not found then probe for SX1262
+#define USE_RF95
+#define USE_SX1262
+
+#define LORA_DIO0 26 // a No connect on the SX1262 module
+#define LORA_RESET 23
+#define LORA_DIO1 33 // SX1262 IRQ
+#define LORA_DIO2 32 // SX1262 BUSY
+#define LORA_DIO3 // Not connected on PCB, but internally on the TTGO SX1262, if DIO3 is high the TXCO is enabled
+
+#ifdef USE_SX1262
+#define SX126X_CS RF95_NSS // FIXME - we really should define LORA_CS instead
+#define SX126X_DIO1 LORA_DIO1
+#define SX126X_BUSY LORA_DIO2
+#define SX126X_RESET LORA_RESET
+#define SX126X_E22 // Not really an E22 but TTGO seems to be trying to clone that
+// Internally the TTGO module hooks the SX1262-DIO2 in to control the TX/RX switch (which is the default for the sx1262interface
+// code)
+#endif
+
+// Leave undefined to disable our PMU IRQ handler. DO NOT ENABLE THIS because the pmuirq can cause sperious interrupts
+// and waking from light sleep
+// #define PMU_IRQ 35
+#define AXP192_SLAVE_ADDRESS 0x34
\ No newline at end of file
diff --git a/variants/tbeam_v07/variant.h b/variants/tbeam_v07/variant.h
new file mode 100644
index 00000000..ff007428
--- /dev/null
+++ b/variants/tbeam_v07/variant.h
@@ -0,0 +1,20 @@
+// #define BUTTON_NEED_PULLUP // if set we need to turn on the internal CPU pullup during sleep
+
+#define I2C_SDA 21
+#define I2C_SCL 22
+
+#define BUTTON_PIN 39
+#define BATTERY_PIN 35 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
+#define EXT_NOTIFY_OUT 13 // Default pin to use for Ext Notify Plugin.
+
+#define USE_RF95
+#define LORA_DIO0 26 // a No connect on the SX1262 module
+#define LORA_RESET 23
+#define LORA_DIO1 33 // Not really used
+#define LORA_DIO2 32 // Not really used
+
+// This board has different GPS pins than all other boards
+#undef GPS_RX_PIN
+#undef GPS_TX_PIN
+#define GPS_RX_PIN 12
+#define GPS_TX_PIN 15
\ No newline at end of file
diff --git a/variants/tlora_v1/variant.h b/variants/tlora_v1/variant.h
new file mode 100644
index 00000000..06352fbb
--- /dev/null
+++ b/variants/tlora_v1/variant.h
@@ -0,0 +1,21 @@
+#undef GPS_RX_PIN
+#undef GPS_TX_PIN
+#define GPS_RX_PIN 36
+#define GPS_TX_PIN 37
+
+#define I2C_SDA 4 // I2C pins for this board
+#define I2C_SCL 15
+
+#define RESET_OLED 16 // If defined, this pin will be used to reset the display controller
+
+// #define VEXT_ENABLE 21 // active low, powers the oled display and the lora antenna boost
+#define LED_PIN 2 // If defined we will blink this LED
+#define BUTTON_PIN 0 // If defined, this will be used for user button presses
+#define BUTTON_NEED_PULLUP
+#define EXT_NOTIFY_OUT 13 // Default pin to use for Ext Notify Plugin.
+
+#define USE_RF95
+#define LORA_DIO0 26 // a No connect on the SX1262 module
+#define LORA_RESET 14
+#define LORA_DIO1 35 // Not really used
+#define LORA_DIO2 34 // Not really used
diff --git a/variants/tlora_v1_3/variant.h b/variants/tlora_v1_3/variant.h
new file mode 100644
index 00000000..f5240d14
--- /dev/null
+++ b/variants/tlora_v1_3/variant.h
@@ -0,0 +1,22 @@
+#undef GPS_RX_PIN
+#undef GPS_TX_PIN
+#define GPS_RX_PIN 36
+#define GPS_TX_PIN 13 // per @eugene
+
+#define BATTERY_PIN 35 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
+
+#define I2C_SDA 21 // I2C pins for this board
+#define I2C_SCL 22
+
+#define RESET_OLED 16 // If defined, this pin will be used to reset the display controller
+
+#define VEXT_ENABLE 21 // active low, powers the oled display and the lora antenna boost
+#define LED_PIN 25 // If defined we will blink this LED
+#define BUTTON_PIN 36
+#define BUTTON_NEED_PULLUP
+
+#define USE_RF95
+#define LORA_DIO0 26 // a No connect on the SX1262 module
+#define LORA_RESET 14
+#define LORA_DIO1 35 // Not really used
+#define LORA_DIO2 34 // Not really used
\ No newline at end of file
diff --git a/variants/tlora_v2/variant.h b/variants/tlora_v2/variant.h
new file mode 100644
index 00000000..1bff09fb
--- /dev/null
+++ b/variants/tlora_v2/variant.h
@@ -0,0 +1,24 @@
+#undef GPS_RX_PIN
+#undef GPS_TX_PIN
+#define GPS_RX_PIN 36
+#define GPS_TX_PIN 13 // per @eugene
+
+#define BATTERY_PIN 35 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
+
+#define I2C_SDA 21 // I2C pins for this board
+#define I2C_SCL 22
+
+#define RESET_OLED 16 // If defined, this pin will be used to reset the display controller
+
+#define VEXT_ENABLE 21 // active low, powers the oled display and the lora antenna boost
+#define LED_PIN 25 // If defined we will blink this LED
+#define BUTTON_PIN \
+ 0 // If defined, this will be used for user button presses, if your board doesn't have a physical switch, you can wire one
+ // between this pin and ground
+#define BUTTON_NEED_PULLUP
+
+#define USE_RF95
+#define LORA_DIO0 26 // a No connect on the SX1262 module
+#define LORA_RESET 14
+#define LORA_DIO1 35 // Not really used
+#define LORA_DIO2 34 // Not really used
\ No newline at end of file
diff --git a/variants/tlora_v2_1_16/variant.h b/variants/tlora_v2_1_16/variant.h
new file mode 100644
index 00000000..bc1bbc02
--- /dev/null
+++ b/variants/tlora_v2_1_16/variant.h
@@ -0,0 +1,23 @@
+#undef GPS_RX_PIN
+#undef GPS_TX_PIN
+#define GPS_RX_PIN 15 // per @der_bear on the forum, 36 is incorrect for this board type and 15 is a better pick
+#define GPS_TX_PIN 13
+
+#define BATTERY_PIN 35 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
+
+#define I2C_SDA 21 // I2C pins for this board
+#define I2C_SCL 22
+
+#define RESET_OLED 16 // If defined, this pin will be used to reset the display controller
+
+#define VEXT_ENABLE 21 // active low, powers the oled display and the lora antenna boost
+#define LED_PIN 25 // If defined we will blink this LED
+#define BUTTON_PIN 12 // If defined, this will be used for user button presses,
+
+#define BUTTON_NEED_PULLUP
+
+#define USE_RF95
+#define LORA_DIO0 26 // a No connect on the SX1262 module
+#define LORA_RESET 14
+#define LORA_DIO1 35 // Not really used
+#define LORA_DIO2 34 // Not really used
\ No newline at end of file