// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
-#import "Modem.h"
+#include "Modem.h"
#ifndef BOARDS_H
#define BOARDS_H
+
+ #define PLATFORM_AVR 0x90
+ #define PLATFORM_ESP32 0x80
+ #define PLATFORM_NRF52 0x70
+
+ #define MCU_1284P 0x91
+ #define MCU_2560 0x92
+ #define MCU_ESP32 0x81
+ #define MCU_NRF52 0x71
+
+ #define BOARD_RNODE 0x31
+ #define BOARD_HMBRW 0x32
+ #define BOARD_TBEAM 0x33
+ #define BOARD_HUZZAH32 0x34
+ #define BOARD_GENERIC_ESP32 0x35
+ #define BOARD_LORA32_V2_0 0x36
+ #define BOARD_LORA32_V2_1 0x37
+ #define BOARD_LORA32_V1_0 0x39
+ #define BOARD_HELTEC32_V2 0x38
+ #define BOARD_RNODE_NG_20 0x40
+ #define BOARD_RNODE_NG_21 0x41
+ #define BOARD_RNODE_NG_22 0x42
+ #define BOARD_GENERIC_NRF52 0x50
+ #define BOARD_RAK4630 0x51
+
+ #if defined(__AVR_ATmega1284P__)
+ #define PLATFORM PLATFORM_AVR
+ #define MCU_VARIANT MCU_1284P
+ #elif defined(__AVR_ATmega2560__)
+ #define PLATFORM PLATFORM_AVR
+ #define MCU_VARIANT MCU_2560
+ #elif defined(ESP32)
+ #define PLATFORM PLATFORM_ESP32
+ #define MCU_VARIANT MCU_ESP32
+ #elif defined(NRF52840_XXAA)
+ #define PLATFORM PLATFORM_NRF52
+ #define MCU_VARIANT MCU_NRF52
+ #else
+ #error "The firmware cannot be compiled for the selected MCU variant"
+ #endif
+
+ #ifndef MODEM
+ #if BOARD_MODEL == BOARD_RAK4630
+ #define MODEM SX1262
+ #elif BOARD_MODEL == BOARD_GENERIC_NRF52
+ #define MODEM SX1262
+ #else
+ #define MODEM SX1276
+ #endif
+ #endif
+
+ #define HAS_DISPLAY false
+ #define HAS_BLUETOOTH false
+ #define HAS_TCXO false
+ #define HAS_PMU false
+ #define HAS_NP false
+ #define HAS_EEPROM false
+
+ #if defined(ENABLE_TCXO)
+ #define HAS_TCXO true
+ #endif
+
+ #if MCU_VARIANT == MCU_1284P
+ const int pin_cs = 4;
+ const int pin_reset = 3;
+ const int pin_dio = 2;
+ const int pin_led_rx = 12;
+ const int pin_led_tx = 13;
+
+ #define BOARD_MODEL BOARD_RNODE
+ #define HAS_EEPROM true
+ #define CONFIG_UART_BUFFER_SIZE 6144
+ #define CONFIG_QUEUE_SIZE 6144
+ #define CONFIG_QUEUE_MAX_LENGTH 200
+ #define EEPROM_SIZE 4096
+ #define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
- #define PLATFORM_AVR 0x90
- #define PLATFORM_ESP32 0x80
- #define PLATFORM_NRF52 0x70
-
- #define MCU_1284P 0x91
- #define MCU_2560 0x92
- #define MCU_ESP32 0x81
- #define MCU_NRF52 0x71
-
- #define BOARD_RNODE 0x31
- #define BOARD_HMBRW 0x32
- #define BOARD_TBEAM 0x33
- #define BOARD_HUZZAH32 0x34
- #define BOARD_GENERIC_ESP32 0x35
- #define BOARD_LORA32_V2_0 0x36
- #define BOARD_LORA32_V2_1 0x37
- #define BOARD_LORA32_V1_0 0x39
- #define BOARD_HELTEC32_V2 0x38
- #define BOARD_RNODE_NG_20 0x40
- #define BOARD_RNODE_NG_21 0x41
- #define BOARD_RNODE_NG_22 0x42
- #define BOARD_GENERIC_NRF52 0x50
- #define BOARD_RAK4630 0x51
-
- #ifndef MODEM
- #if BOARD_MODEL == BOARD_RAK4630
- #define MODEM SX1262
- #elif BOARD_MODEL == BOARD_RNODE_NG_22
- #define MODEM SX1262
- const int pin_cs = 7;
- const int pin_sclk = 5;
- const int pin_mosi = 6;
- const int pin_miso = 3;
- #elif BOARD_MODEL == BOARD_GENERIC_NRF52
- #define MODEM SX1262
+ #elif MCU_VARIANT == MCU_2560
+ const int pin_cs = 5;
+ const int pin_reset = 4;
+ const int pin_dio = 2;
+ const int pin_led_rx = 12;
+ const int pin_led_tx = 13;
+
+ #define BOARD_MODEL BOARD_HMBRW
+ #define HAS_EEPROM true
+ #define CONFIG_UART_BUFFER_SIZE 768
+ #define CONFIG_QUEUE_SIZE 5120
+ #define CONFIG_QUEUE_MAX_LENGTH 24
+ #define EEPROM_SIZE 4096
+ #define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
+
+ #elif MCU_VARIANT == MCU_ESP32
+
+ // Board models for ESP32 based builds are
+ // defined by the build target in the makefile.
+ // If you are not using make to compile this
+ // firmware, you can manually define model here.
+ //
+ // #define BOARD_MODEL BOARD_GENERIC_ESP32
+ #define CONFIG_UART_BUFFER_SIZE 6144
+ #define CONFIG_QUEUE_SIZE 6144
+ #define CONFIG_QUEUE_MAX_LENGTH 200
+
+ #define EEPROM_SIZE 1024
+ #define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
+
+ #define GPS_BAUD_RATE 9600
+ #define PIN_GPS_TX 12
+ #define PIN_GPS_RX 34
+
+ #if BOARD_MODEL == BOARD_GENERIC_ESP32
+ #define HAS_BLUETOOTH true
+ #define HAS_CONSOLE true
+ #define HAS_EEPROM true
+ const int pin_cs = 4;
+ const int pin_reset = 36;
+ const int pin_dio = 39;
+ const int pin_led_rx = 14;
+ const int pin_led_tx = 32;
+
+ #elif BOARD_MODEL == BOARD_TBEAM
+ #define HAS_DISPLAY true
+ #define HAS_PMU true
+ #define HAS_BLUETOOTH true
+ #define HAS_CONSOLE true
+ #define HAS_SD false
+ #define HAS_EEPROM true
+ #define I2C_SDA 21
+ #define I2C_SCL 22
+ #define PMU_IRQ 35
+ const int pin_cs = 18;
+ const int pin_reset = 23;
+ const int pin_led_rx = 2;
+ const int pin_led_tx = 4;
+
+ #if MODEM == SX1262
+ #define HAS_TCXO true
+ #define HAS_BUSY true
+ #define DIO2_AS_RF_SWITCH true
+ const int pin_busy = 32;
+ const int pin_dio = 33;
+ const int pin_tcxo_enable = -1;
#else
- #define MODEM SX1276
+ const int pin_dio = 26;
#endif
+
+ #elif BOARD_MODEL == BOARD_HUZZAH32
+ #define HAS_BLUETOOTH true
+ #define HAS_CONSOLE true
+ #define HAS_EEPROM true
+ const int pin_cs = 4;
+ const int pin_reset = 36;
+ const int pin_dio = 39;
+ const int pin_led_rx = 14;
+ const int pin_led_tx = 32;
+
+ #elif BOARD_MODEL == BOARD_LORA32_V1_0
+ #define HAS_DISPLAY true
+ #define HAS_BLUETOOTH true
+ #define HAS_CONSOLE true
+ #define HAS_EEPROM true
+ const int pin_cs = 18;
+ const int pin_reset = 14;
+ const int pin_dio = 26;
+ #if defined(EXTERNAL_LEDS)
+ const int pin_led_rx = 25;
+ const int pin_led_tx = 2;
+ #else
+ const int pin_led_rx = 2;
+ const int pin_led_tx = 2;
+ #endif
+
+ #elif BOARD_MODEL == BOARD_LORA32_V2_0
+ #define HAS_DISPLAY true
+ #define HAS_BLUETOOTH true
+ #define HAS_CONSOLE true
+ #define HAS_EEPROM true
+ const int pin_cs = 18;
+ const int pin_reset = 12;
+ const int pin_dio = 26;
+ #if defined(EXTERNAL_LEDS)
+ const int pin_led_rx = 2;
+ const int pin_led_tx = 0;
+ #else
+ const int pin_led_rx = 22;
+ const int pin_led_tx = 22;
+ #endif
+
+ #elif BOARD_MODEL == BOARD_LORA32_V2_1
+ #define HAS_DISPLAY true
+ #define HAS_BLUETOOTH true
+ #define HAS_PMU true
+ #define HAS_CONSOLE true
+ #define HAS_EEPROM true
+ const int pin_cs = 18;
+ const int pin_reset = 23;
+ const int pin_dio = 26;
+ #if HAS_TCXO == true
+ const int pin_tcxo_enable = 33;
+ #endif
+ #if defined(EXTERNAL_LEDS)
+ const int pin_led_rx = 15;
+ const int pin_led_tx = 4;
+ #else
+ const int pin_led_rx = 25;
+ const int pin_led_tx = 25;
+ #endif
+
+ #elif BOARD_MODEL == BOARD_HELTEC32_V2
+ #define HAS_DISPLAY true
+ #define HAS_BLUETOOTH true
+ #define HAS_CONSOLE true
+ #define HAS_EEPROM true
+ const int pin_cs = 18;
+ const int pin_reset = 23;
+ const int pin_dio = 26;
+ #if defined(EXTERNAL_LEDS)
+ const int pin_led_rx = 36;
+ const int pin_led_tx = 37;
+ #else
+ const int pin_led_rx = 25;
+ const int pin_led_tx = 25;
+ #endif
+
+ #elif BOARD_MODEL == BOARD_RNODE_NG_20
+ #define HAS_DISPLAY true
+ #define HAS_BLUETOOTH true
+ #define HAS_NP true
+ #define HAS_CONSOLE true
+ #define HAS_EEPROM true
+ const int pin_cs = 18;
+ const int pin_reset = 12;
+ const int pin_dio = 26;
+ const int pin_np = 4;
+ #if HAS_NP == false
+ #if defined(EXTERNAL_LEDS)
+ const int pin_led_rx = 2;
+ const int pin_led_tx = 0;
+ #else
+ const int pin_led_rx = 22;
+ const int pin_led_tx = 22;
+ #endif
+ #endif
+
+ #elif BOARD_MODEL == BOARD_RNODE_NG_21
+ #define HAS_DISPLAY true
+ #define HAS_BLUETOOTH true
+ #define HAS_CONSOLE true
+ #define HAS_PMU true
+ #define HAS_NP true
+ #define HAS_SD false
+ #define HAS_EEPROM true
+ const int pin_cs = 18;
+ const int pin_reset = 23;
+ const int pin_dio = 26;
+ const int pin_np = 12;
+ const int pin_dac = 25;
+ const int pin_adc = 34;
+ const int SD_MISO = 2;
+ const int SD_MOSI = 15;
+ const int SD_CLK = 14;
+ const int SD_CS = 13;
+ #if HAS_NP == false
+ #if defined(EXTERNAL_LEDS)
+ const int pin_led_rx = 12;
+ const int pin_led_tx = 4;
+ #else
+ const int pin_led_rx = 25;
+ const int pin_led_tx = 25;
+ #endif
+ #endif
+
+ #elif BOARD_MODEL == BOARD_RNODE_NG_22
+ #define IS_ESP32S3 true
+ #define MODEM SX1262
+ #define HAS_DISPLAY true
+ #define HAS_BLE true
+ #define HAS_BLUETOOTH false // TODO: Implement
+ #define HAS_CONSOLE false // TODO: Implement
+ #define HAS_PMU true
+ #define HAS_NP true
+ #define HAS_SD false
+ #define HAS_EEPROM true
+ #define HAS_RF_SWITCH_RX_TX true
+ #define HAS_BUSY true
+ const int pin_cs = 7;
+ const int pin_sclk = 5;
+ const int pin_mosi = 6;
+ const int pin_miso = 3;
+ const int pin_reset = 8;
+ const int pin_rxen = 21;
+ const int pin_dio = 33;
+ const int pin_busy = 34;
+ const int pin_np = 38;
+ const int pin_dac = 25;
+ const int pin_adc = 1;
+ const int SD_MISO = 2;
+ const int SD_MOSI = 11;
+ const int SD_CLK = 14;
+ const int SD_CS = 13;
+ #if HAS_NP == false
+ #if defined(EXTERNAL_LEDS)
+ const int pin_led_rx = 37;
+ const int pin_led_tx = 37;
+ #else
+ const int pin_led_rx = 37;
+ const int pin_led_tx = 37;
+ #endif
+ #endif
+
+ #else
+ #error An unsupported ESP32 board was selected. Cannot compile RNode firmware.
#endif
+
+ #elif MCU_VARIANT == MCU_NRF52
+ #if BOARD_MODEL == BOARD_RAK4630
+ #define HAS_EEPROM false
+ #define HAS_DISPLAY false // set for debugging
+ #define HAS_BLUETOOTH true
+ #define HAS_CONSOLE false
+ #define HAS_PMU false
+ #define HAS_NP false
+ #define HAS_SD false
+ #define HAS_TCXO true
+ #define HAS_RF_SWITCH_RX_TX true
+ #define HAS_BUSY true
+ #define CONFIG_UART_BUFFER_SIZE 6144
+ #define CONFIG_QUEUE_SIZE 6144
+ #define CONFIG_QUEUE_MAX_LENGTH 200
+ #define EEPROM_SIZE 200
+ #define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
+
+ // following pins are for the sx1262
+ const int pin_rxen = 37;
+ const int pin_reset = 38;
+ const int pin_cs = 42;
+ const int pin_sclk = 43;
+ const int pin_mosi = 44;
+ const int pin_miso = 45;
+ const int pin_busy = 46;
+ const int pin_dio = 47;
+ const int pin_led_rx = LED_BLUE;
+ const int pin_led_tx = LED_GREEN;
+ const int pin_tcxo_enable = -1;
+
+ #else
+ #error An unsupported nRF board was selected. Cannot compile RNode firmware.
+ #endif
+
+ #endif
+
+ #ifndef HAS_RF_SWITCH_RX_TX
+ const int pin_rxen = -1;
+ const int pin_txen = -1;
+ #endif
+
+ #ifndef HAS_BUSY
+ const int pin_busy = -1;
+ #endif
+
+ #ifndef DIO2_AS_RF_SWITCH
+ #define DIO2_AS_RF_SWITCH false
+ #endif
#endif
#include "ROM.h"
#include "Boards.h"
-#include "Modem.h"
#ifndef CONFIG_H
#define CONFIG_H
bool console_active = false;
bool modem_installed = false;
- #if defined(__AVR_ATmega1284P__)
- #define PLATFORM PLATFORM_AVR
- #define MCU_VARIANT MCU_1284P
- #elif defined(__AVR_ATmega2560__)
- #define PLATFORM PLATFORM_AVR
- #define MCU_VARIANT MCU_2560
- #elif defined(ESP32)
- #define PLATFORM PLATFORM_ESP32
- #define MCU_VARIANT MCU_ESP32
- #elif defined(NRF52840_XXAA)
- #define PLATFORM PLATFORM_NRF52
- #define MCU_VARIANT MCU_NRF52
- #else
- #error "The firmware cannot be compiled for the selected MCU variant"
- #endif
-
#define MTU 508
#define SINGLE_MTU 255
#define HEADER_L 1
#define MIN_L 1
-
#define CMD_L 64
- // MCU dependent configuration parameters
-
- #define HAS_DISPLAY false
- #define HAS_BLUETOOTH false
- #define HAS_TCXO false
- #define HAS_PMU false
- #define HAS_NP false
- #define HAS_EEPROM false
-
- #if defined(ENABLE_TCXO)
- #define HAS_TCXO true
- #endif
-
- #if MCU_VARIANT == MCU_1284P
- const int pin_cs = 4;
- const int pin_reset = 3;
- const int pin_dio = 2;
- const int pin_led_rx = 12;
- const int pin_led_tx = 13;
-
- #define BOARD_MODEL BOARD_RNODE
-
- #define HAS_EEPROM true
-
- #define CONFIG_UART_BUFFER_SIZE 6144
- #define CONFIG_QUEUE_SIZE 6144
- #define CONFIG_QUEUE_MAX_LENGTH 200
-
- #define EEPROM_SIZE 4096
- #define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
-
- #elif MCU_VARIANT == MCU_2560
- const int pin_cs = 5;
- const int pin_reset = 4;
- const int pin_dio = 2;
- const int pin_led_rx = 12;
- const int pin_led_tx = 13;
-
- #define BOARD_MODEL BOARD_HMBRW
-
- #define HAS_EEPROM true
-
- #define CONFIG_UART_BUFFER_SIZE 768
- #define CONFIG_QUEUE_SIZE 5120
- #define CONFIG_QUEUE_MAX_LENGTH 24
-
- #define EEPROM_SIZE 4096
- #define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
-
- #elif MCU_VARIANT == MCU_ESP32
-
- // Board models for ESP32 based builds are
- // defined by the build target in the makefile.
- // If you are not using make to compile this
- // firmware, you can manually define model here.
- //
- // #define BOARD_MODEL BOARD_GENERIC_ESP32
- #define CONFIG_UART_BUFFER_SIZE 6144
- #define CONFIG_QUEUE_SIZE 6144
- #define CONFIG_QUEUE_MAX_LENGTH 200
-
- #define EEPROM_SIZE 1024
- #define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
-
- #define GPS_BAUD_RATE 9600
- #define PIN_GPS_TX 12
- #define PIN_GPS_RX 34
-
- #if BOARD_MODEL == BOARD_GENERIC_ESP32
- const int pin_cs = 4;
- const int pin_reset = 36;
- const int pin_dio = 39;
- const int pin_led_rx = 14;
- const int pin_led_tx = 32;
- #define HAS_BLUETOOTH true
- #define HAS_CONSOLE true
- #define HAS_EEPROM true
- #elif BOARD_MODEL == BOARD_TBEAM
- const int pin_cs = 18;
- const int pin_reset = 23;
- const int pin_dio = 26;
- const int pin_led_rx = 2;
- const int pin_led_tx = 4;
- #define HAS_DISPLAY true
- #define HAS_PMU true
- #define HAS_BLUETOOTH true
- #define HAS_CONSOLE true
- #define HAS_SD false
- #define HAS_EEPROM true
- #if MODEM == SX1262
- // TODO: Figure out how on earth the SX1262 T-Beams are actually connected
- // #define HAS_RF_SWITCH_RX_TX true
- // const int pin_rxen = 32;
- #define HAS_BUSY true
- const int pin_busy = 32;
- #endif
- #elif BOARD_MODEL == BOARD_HUZZAH32
- const int pin_cs = 4;
- const int pin_reset = 36;
- const int pin_dio = 39;
- const int pin_led_rx = 14;
- const int pin_led_tx = 32;
- #define HAS_BLUETOOTH true
- #define HAS_CONSOLE true
- #define HAS_EEPROM true
- #elif BOARD_MODEL == BOARD_LORA32_V1_0
- const int pin_cs = 18;
- const int pin_reset = 14;
- const int pin_dio = 26;
- #if defined(EXTERNAL_LEDS)
- const int pin_led_rx = 25;
- const int pin_led_tx = 2;
- #else
- const int pin_led_rx = 2;
- const int pin_led_tx = 2;
- #endif
- #define HAS_DISPLAY true
- #define HAS_BLUETOOTH true
- #define HAS_CONSOLE true
- #define HAS_EEPROM true
- #elif BOARD_MODEL == BOARD_LORA32_V2_0
- const int pin_cs = 18;
- const int pin_reset = 12;
- const int pin_dio = 26;
- #if defined(EXTERNAL_LEDS)
- const int pin_led_rx = 2;
- const int pin_led_tx = 0;
- #else
- const int pin_led_rx = 22;
- const int pin_led_tx = 22;
- #endif
- #define HAS_DISPLAY true
- #define HAS_BLUETOOTH true
- #define HAS_CONSOLE true
- #define HAS_EEPROM true
- #elif BOARD_MODEL == BOARD_LORA32_V2_1
- const int pin_cs = 18;
- const int pin_reset = 23;
- const int pin_dio = 26;
- #if HAS_TCXO == true
- const int pin_tcxo_enable = 33;
- #endif
- #if defined(EXTERNAL_LEDS)
- const int pin_led_rx = 15;
- const int pin_led_tx = 4;
- #else
- const int pin_led_rx = 25;
- const int pin_led_tx = 25;
- #endif
- #define HAS_DISPLAY true
- #define HAS_BLUETOOTH true
- #define HAS_PMU true
- #define HAS_CONSOLE true
- #define HAS_EEPROM true
- #elif BOARD_MODEL == BOARD_HELTEC32_V2
- const int pin_cs = 18;
- const int pin_reset = 23;
- const int pin_dio = 26;
- #if defined(EXTERNAL_LEDS)
- const int pin_led_rx = 36;
- const int pin_led_tx = 37;
- #else
- const int pin_led_rx = 25;
- const int pin_led_tx = 25;
- #endif
- #define HAS_DISPLAY true
- #define HAS_BLUETOOTH true
- #define HAS_CONSOLE true
- #define HAS_EEPROM true
- #elif BOARD_MODEL == BOARD_RNODE_NG_20
- #define HAS_DISPLAY true
- #define HAS_BLUETOOTH true
- #define HAS_NP true
- #define HAS_CONSOLE true
- #define HAS_EEPROM true
- const int pin_cs = 18;
- const int pin_reset = 12;
- const int pin_dio = 26;
- const int pin_np = 4;
- #if HAS_NP == false
- #if defined(EXTERNAL_LEDS)
- const int pin_led_rx = 2;
- const int pin_led_tx = 0;
- #else
- const int pin_led_rx = 22;
- const int pin_led_tx = 22;
- #endif
- #endif
- #elif BOARD_MODEL == BOARD_RNODE_NG_21
- #define HAS_DISPLAY true
- #define HAS_BLUETOOTH true
- #define HAS_CONSOLE true
- #define HAS_PMU true
- #define HAS_NP true
- #define HAS_SD false
- #define HAS_EEPROM true
- const int pin_cs = 18;
- const int pin_reset = 23;
- const int pin_dio = 26;
- const int pin_np = 12;
- const int pin_dac = 25;
- const int pin_adc = 34;
- const int SD_MISO = 2;
- const int SD_MOSI = 15;
- const int SD_CLK = 14;
- const int SD_CS = 13;
- #if HAS_NP == false
- #if defined(EXTERNAL_LEDS)
- const int pin_led_rx = 12;
- const int pin_led_tx = 4;
- #else
- const int pin_led_rx = 25;
- const int pin_led_tx = 25;
- #endif
- #endif
- #elif BOARD_MODEL == BOARD_RNODE_NG_22
- #define IS_ESP32S3 true
- #define HAS_DISPLAY true
- #define HAS_BLE true
- #define HAS_BLUETOOTH false // TODO: Implement
- #define HAS_CONSOLE false // TODO: Implement
- #define HAS_PMU true
- #define HAS_NP true
- #define HAS_SD false
- #define HAS_EEPROM true
- #define HAS_RF_SWITCH_RX_TX true
- #define HAS_BUSY true
- const int pin_reset = 8;
- const int pin_rxen = 21;
- const int pin_dio = 33;
- const int pin_busy = 34;
-
- const int pin_np = 38;
- const int pin_dac = 25;
- const int pin_adc = 1;
- const int SD_MISO = 2;
- const int SD_MOSI = 11;
- const int SD_CLK = 14;
- const int SD_CS = 13;
- #if HAS_NP == false
- #if defined(EXTERNAL_LEDS)
- const int pin_led_rx = 37;
- const int pin_led_tx = 37;
- #else
- const int pin_led_rx = 37;
- const int pin_led_tx = 37;
- #endif
- #endif
- #endif
- #elif PLATFORM == PLATFORM_NRF52
- #if BOARD_MODEL == BOARD_RAK4630
- #define HAS_EEPROM false
- #define HAS_DISPLAY false // set for debugging
- #define HAS_BLUETOOTH true
- #define HAS_CONSOLE false
- #define HAS_PMU false
- #define HAS_NP false
- #define HAS_SD false
- #define HAS_TCXO true
- #define HAS_RF_SWITCH_RX_TX true
- #define HAS_BUSY true
- #define CONFIG_UART_BUFFER_SIZE 6144
- #define CONFIG_QUEUE_SIZE 6144
- #define CONFIG_QUEUE_MAX_LENGTH 200
- #define EEPROM_SIZE 200
- //#define EEPROM_OFFSET EEPROM_SIZE+0xED000-EEPROM_RESERVED
- #define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
-
- // following pins are for the sx1262
- const int pin_rxen = 37;
- const int pin_reset = 38;
- const int pin_cs = 42;
- const int pin_sclk = 43;
- const int pin_mosi = 44;
- const int pin_miso = 45;
- const int pin_busy = 46;
- const int pin_dio = 47;
- const int pin_led_rx = LED_BLUE;
- const int pin_led_tx = LED_GREEN;
- const int pin_tcxo_enable = -1;
- #endif
- #else
- #error An unsupported board was selected. Cannot compile RNode firmware.
- #endif
-
bool mw_radio_online = false;
- #if BOARD_MODEL == BOARD_TBEAM
- #define I2C_SDA 21
- #define I2C_SCL 22
- #define PMU_IRQ 35
- #endif
-
#define eeprom_addr(a) (a+EEPROM_OFFSET)
- #ifndef HAS_RF_SWITCH_RX_TX
- const int pin_rxen = -1;
- const int pin_txen = -1;
- #endif
-
- #ifndef HAS_BUSY
- const int pin_busy = -1;
- #endif
-
#if (MODEM == SX1262 || MODEM == SX1280) && defined(NRF52840_XXAA)
SPIClass spiModem(NRF_SPIM2, pin_miso, pin_sclk, pin_mosi);
#endif
arduino-cli upload -p /dev/ttyACM0 --fqbn arduino:avr:mega
upload-tbeam:
- arduino-cli upload -p /dev/ttyACM0 --fqbn esp32:esp32:t-beam
+ arduino-cli upload -p /dev/ttyACM1 --fqbn esp32:esp32:t-beam
@sleep 1
- rnodeconf /dev/ttyACM0 --firmware-hash $$(./partition_hashes ./build/esp32.esp32.t-beam/RNode_Firmware.ino.bin)
- @sleep 3
- python ./Release/esptool/esptool.py --chip esp32 --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
+ rnodeconf /dev/ttyACM1 --firmware-hash $$(./partition_hashes ./build/esp32.esp32.t-beam/RNode_Firmware.ino.bin)
+# @sleep 3
+# python ./Release/esptool/esptool.py --chip esp32 --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-lora32_v10:
arduino-cli upload -p /dev/ttyUSB0 --fqbn esp32:esp32:ttgo-lora32
#define BT_ENABLE_BYTE 0x73
#define EEPROM_RESERVED 200
+
#endif
// Modifications and additions copyright 2023 by Mark Qvist
// Obviously still under the MIT license.
-#include "sx126x.h"
#include "Boards.h"
+#if MODEM == SX1262
+#include "sx126x.h"
+
#define MCU_1284P 0x91
#define MCU_2560 0x92
#define MCU_ESP32 0x81
#define IRQ_TX_DONE_MASK_6X 0x01
#define IRQ_RX_DONE_MASK_6X 0x02
#define IRQ_HEADER_DET_MASK_6X 0x10
+#define IRQ_PREAMBLE_DET_MASK_6X 0x04
#define IRQ_PAYLOAD_CRC_ERROR_MASK_6X 0x40
#define MODE_LONG_RANGE_MODE_6X 0x01
#define REG_RANDOM_GEN_6X 0x0819
#define MODE_TCXO_3_3V_6X 0x07
+#define MODE_TCXO_3_0V_6X 0x06
+#define MODE_TCXO_2_7V_6X 0x06
+#define MODE_TCXO_2_4V_6X 0x06
+#define MODE_TCXO_2_2V_6X 0x03
+#define MODE_TCXO_1_8V_6X 0x02
+#define MODE_TCXO_1_7V_6X 0x01
+#define MODE_TCXO_1_6V_6X 0x00
+
+#define SYNC_WORD_6X 0x1424
-#define IRQ_PREAMBLE_DET_MASK_6X 0x04
#define XTAL_FREQ_6X (double)32000000
#define FREQ_DIV_6X (double)pow(2.0, 25.0)
#define FREQ_STEP_6X (double)(XTAL_FREQ_6X / FREQ_DIV_6X)
// set SS high
digitalWrite(_ss, HIGH);
- Serial.println("SPI INIT");
#if BOARD_MODEL == BOARD_RNODE_NG_22
SPI.begin(pin_sclk, pin_miso, pin_mosi, pin_cs);
#else
SPI.begin();
#endif
- Serial.println("DONE");
// check version (retry for up to 2 seconds)
long start = millis();
uint8_t syncmsb;
uint8_t synclsb;
- Serial.println("TRYING REGISTER READ");
while (((millis() - start) < 2000) && (millis() >= start)) {
syncmsb = readRegister(REG_SYNC_WORD_MSB_6X);
synclsb = readRegister(REG_SYNC_WORD_LSB_6X);
if ( uint16_t(syncmsb << 8 | synclsb) == 0x1424 || uint16_t(syncmsb << 8 | synclsb) == 0x4434) {
- Serial.println("CORRECT VALUE RETURNED");
break;
}
delay(100);
}
if ( uint16_t(syncmsb << 8 | synclsb) != 0x1424 && uint16_t(syncmsb << 8 | synclsb) != 0x4434) {
- Serial.println("REG READ FAILED");
return false;
}
- Serial.println("MODEM PREINIT SUCCESS");
_preinit_done = true;
return true;
}
void sx126x::rxAntEnable()
{
- uint8_t byte = 0x01;
- // enable dio2 rf switch
- executeOpcode(OP_DIO2_RF_CTRL_6X, &byte, 1);
- digitalWrite(_rxen, HIGH);
+ if (_rxen != -1) {
+ digitalWrite(_rxen, HIGH);
+ }
}
void sx126x::loraMode() {
}
}
- //#if HAS_TCXO
- // turn TCXO on
- enableTCXO();
- //#endif
- loraMode();
- idle();
- // cannot access registers in sleep mode on sx1262, set to idle instead
- if (_rxen != -1) {
- pinMode(_rxen, OUTPUT);
- rxAntEnable();
- }
- // calibrate RC64k, RC13M, PLL, ADC and image
- uint8_t calibrate = 0x7F;
- executeOpcode(OP_CALIBRATE_6X, &calibrate, 1);
+ loraMode();
+ // cannot access registers in sleep mode on sx1262, set to idle instead
+ idle();
- setFrequency(frequency);
+ #if HAS_TCXO
+ enableTCXO();
+ #endif
- // set output power to 2 dBm
- setTxPower(2);
+ if (_rxen != -1) {
+ pinMode(_rxen, OUTPUT);
+ }
- // set LNA boost
- writeRegister(REG_LNA_6X, 0x96);
+ #if DIO2_AS_RF_SWITCH
+ // enable dio2 rf switch
+ uint8_t byte = 0x01;
+ executeOpcode(OP_DIO2_RF_CTRL_6X, &byte, 1);
+ #endif
- // set base addresses
- uint8_t basebuf[2] = {0};
- executeOpcode(OP_BUFFER_BASE_ADDR_6X, basebuf, 2);
+ rxAntEnable();
- setModulationParams(_sf, _bw, _cr, _ldro);
- setPacketParams(_preambleLength, _implicitHeaderMode, _payloadLength, _crcMode);
+ // Set sync word
+ setSyncWord(SYNC_WORD_6X);
+
+ // calibrate RC64k, RC13M, PLL, ADC and image
+ uint8_t calibrate = 0x7F;
+ executeOpcode(OP_CALIBRATE_6X, &calibrate, 1);
+
+ setFrequency(frequency);
+
+ // set output power to 2 dBm
+ setTxPower(2);
+ enableCrc();
+
+ // set LNA boost
+ writeRegister(REG_LNA_6X, 0x96);
+
+ // set base addresses
+ uint8_t basebuf[2] = {0};
+ executeOpcode(OP_BUFFER_BASE_ADDR_6X, basebuf, 2);
+
+ setModulationParams(_sf, _bw, _cr, _ldro);
+ setPacketParams(_preambleLength, _implicitHeaderMode, _payloadLength, _crcMode);
return 1;
}
explicitHeaderMode();
}
- _payloadLength = 0;
- _fifo_tx_addr_ptr = 0;
- setPacketParams(_preambleLength, _implicitHeaderMode, _payloadLength, _crcMode);
+ _payloadLength = 0;
+ _fifo_tx_addr_ptr = 0;
+ setPacketParams(_preambleLength, _implicitHeaderMode, _payloadLength, _crcMode);
return 1;
}
// imitate the register status from the sx1276 / 78
uint8_t buf[2] = {0};
-
executeOpcodeRead(OP_GET_IRQ_STATUS_6X, buf, 2);
-
uint8_t clearbuf[2] = {0};
-
uint8_t byte = 0x00;
- if (buf[1] & IRQ_PREAMBLE_DET_MASK_6X != 0) {
- byte = byte | 0x01 | 0x04;
- // clear register after reading
- clearbuf[1] = IRQ_PREAMBLE_DET_MASK_6X;
+ if ((buf[1] & IRQ_PREAMBLE_DET_MASK_6X) != 0) {
+ byte = byte | 0x01 | 0x04;
+ // clear register after reading
+ clearbuf[1] = IRQ_PREAMBLE_DET_MASK_6X;
}
- if (buf[1] & IRQ_HEADER_DET_MASK_6X != 0) {
- byte = byte | 0x02 | 0x04;
- // clear register after reading
- clearbuf[1] = clearbuf[1] | IRQ_HEADER_DET_MASK_6X;
+ if ((buf[1] & IRQ_HEADER_DET_MASK_6X) != 0) {
+ byte = byte | 0x02 | 0x04;
}
executeOpcode(OP_CLEAR_IRQ_STATUS_6X, clearbuf, 2);
uint8_t byte = 0;
executeOpcodeRead(OP_CURRENT_RSSI_6X, &byte, 1);
int rssi = -(int(byte)) / 2;
- return rssi - RSSI_OFFSET;
+ return rssi;
}
uint8_t sx126x::packetRssiRaw() {
uint8_t buf[3] = {0};
executeOpcodeRead(OP_PACKET_STATUS_6X, buf, 3);
int pkt_rssi = -buf[0] / 2;
- return pkt_rssi - RSSI_OFFSET;
+ return pkt_rssi;
}
uint8_t ISR_VECT sx126x::packetSnrRaw() {
if (_rxen != -1) {
rxAntEnable();
}
+
uint8_t mode[3] = {0xFF, 0xFF, 0xFF}; // continuous mode
executeOpcode(OP_RX_6X, mode, 3);
}
void sx126x::idle()
{
- //#if HAS_TCXO
- // STDBY_XOSC
- uint8_t byte = 0x01;
- //#else
- // // STDBY_RC
- // uint8_t byte = 0x00;
- //#endif
- executeOpcode(OP_STANDBY_6X, &byte, 1);
+ // STDBY_XOSC
+ uint8_t byte = 0x01;
+ // STDBY_RC
+ // uint8_t byte = 0x00;
+ executeOpcode(OP_STANDBY_6X, &byte, 1);
}
void sx126x::sleep()
void sx126x::enableTCXO() {
// only tested for RAK4630, voltage may be different on other platforms
- uint8_t buf[4] = {MODE_TCXO_3_3V_6X, 0x00, 0x00, 0xFF};
+ #if BOARD_MODEL == BOARD_RAK4630
+ uint8_t buf[4] = {MODE_TCXO_3_3V_6X, 0x00, 0x00, 0xFF};
+ #elif BOARD_MODEL == BOARD_TBEAM
+ uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
+ #endif
+
executeOpcode(OP_DIO3_TCXO_CTRL_6X, buf, 4);
}
_sf = sf;
- setModulationParams(sf, _bw, _cr, _ldro);
+ setModulationParams(sf, _bw, _cr, _ldro);
handleLowDataRate();
}
void sx126x::setPreambleLength(long length)
{
- setPacketParams(length, _implicitHeaderMode, _payloadLength, _crcMode);
+ _preambleLength = length;
+ setPacketParams(length, _implicitHeaderMode, _payloadLength, _crcMode);
}
-void sx126x::setSyncWord(int sw)
+void sx126x::setSyncWord(uint16_t sw)
{
- writeRegister(REG_SYNC_WORD_MSB_6X, sw & 0xFF00);
- writeRegister(REG_SYNC_WORD_LSB_6X, sw & 0x00FF);
+ // TODO: Fix
+ // writeRegister(REG_SYNC_WORD_MSB_6X, (sw & 0xFF00) >> 8);
+ // writeRegister(REG_SYNC_WORD_LSB_6X, sw & 0x00FF);
+ writeRegister(REG_SYNC_WORD_MSB_6X, 0x14);
+ writeRegister(REG_SYNC_WORD_LSB_6X, 0x24);
}
void sx126x::enableCrc()
_onReceive(packetLength);
}
}
+ // else {
+ // Serial.println("CRCE");
+ // Serial.println(buf[0]);
+ // Serial.println(buf[1]);
+ // }
}
void ISR_VECT sx126x::onDio0Rise()
}
sx126x sx126x_modem;
+
+#endif
\ No newline at end of file
void setSignalBandwidth(long sbw);
void setCodingRate4(int denominator);
void setPreambleLength(long length);
- void setSyncWord(int sw);
+ void setSyncWord(uint16_t sw);
uint8_t modemStatus();
void enableCrc();
void disableCrc();
// Modifications and additions copyright 2023 by Mark Qvist
// Obviously still under the MIT license.
-#include "sx127x.h"
#include "Boards.h"
-#define MCU_1284P 0x91
-#define MCU_2560 0x92
-#define MCU_ESP32 0x81
-#define MCU_NRF52 0x71
-#if defined(__AVR_ATmega1284P__)
- #define PLATFORM PLATFORM_AVR
- #define MCU_VARIANT MCU_1284P
-#elif defined(__AVR_ATmega2560__)
- #define PLATFORM PLATFORM_AVR
- #define MCU_VARIANT MCU_2560
-#elif defined(ESP32)
- #define PLATFORM PLATFORM_ESP32
- #define MCU_VARIANT MCU_ESP32
-#elif defined(NRF52840_XXAA)
- #define PLATFORM PLATFORM_NRF52
- #define MCU_VARIANT MCU_NRF52
-#endif
-
-#ifndef MCU_VARIANT
- #error No MCU variant defined, cannot compile
-#endif
+#if MODEM == SX1276
+#include "sx127x.h"
#if MCU_VARIANT == MCU_ESP32
#if MCU_VARIANT == MCU_ESP32 and !defined(CONFIG_IDF_TARGET_ESP32S3)
extern SPIClass SPI;
#define MAX_PKT_LENGTH 255
+#define SYNC_WORD_7X 0x12
sx127x::sx127x() :
_spiSettings(8E6, MSBFIRST, SPI_MODE0),
// set auto AGC
writeRegister(REG_MODEM_CONFIG_3_7X, 0x04);
- // set output power to 2 dBm
+ setSyncWord(SYNC_WORD_7X);
+ enableCrc();
setTxPower(2);
- // put in standby mode
idle();
return 1;
writeRegister(REG_PREAMBLE_LSB_7X, (uint8_t)(length >> 0));
}
-void sx127x::setSyncWord(int sw)
+void sx127x::setSyncWord(uint8_t sw)
{
writeRegister(REG_SYNC_WORD_7X, sw);
}
}
sx127x sx127x_modem;
+
+#endif
\ No newline at end of file
void setSignalBandwidth(long sbw);
void setCodingRate4(int denominator);
void setPreambleLength(long length);
- void setSyncWord(int sw);
+ void setSyncWord(uint8_t sw);
uint8_t modemStatus();
void enableCrc();
void disableCrc();
void enableTCXO();
void disableTCXO();
- // deprecated
- void crc() { enableCrc(); }
- void noCrc() { disableCrc(); }
-
byte random();
void setPins(int ss = LORA_DEFAULT_SS_PIN, int reset = LORA_DEFAULT_RESET_PIN, int dio0 = LORA_DEFAULT_DIO0_PIN, int busy = LORA_DEFAULT_BUSY_PIN);