--- /dev/null
+{
+ "files.associations": {
+ "array": "cpp",
+ "deque": "cpp",
+ "list": "cpp",
+ "string": "cpp",
+ "unordered_map": "cpp",
+ "unordered_set": "cpp",
+ "vector": "cpp",
+ "string_view": "cpp",
+ "initializer_list": "cpp",
+ "ranges": "cpp",
+ "span": "cpp",
+ "format": "cpp"
+ }
+}
\ No newline at end of file
#define BOARD_RNODE_NG_20 0x40
#define BOARD_RNODE_NG_21 0x41
#define BOARD_T3S3 0x42
+ #define BOARD_TECHO 0x43
#define BOARD_GENERIC_NRF52 0x50
#define BOARD_RAK4631 0x51
#if defined(ESP32)
#define PLATFORM PLATFORM_ESP32
#define MCU_VARIANT MCU_ESP32
- #elif defined(NRF52840_XXAA)
+ #elif defined(NRF52840_XXAA) || defined(_VARIANT_PCA10056_)
#include <variant.h>
#define PLATFORM PLATFORM_NRF52
#define MCU_VARIANT MCU_NRF52
#endif
#elif MCU_VARIANT == MCU_NRF52
- #if BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_FREENODE
+ #if BOARD_MODEL == BOARD_TECHO
+ #define VALIDATE_FIRMWARE false
+ //#define GPS_BAUD_RATE 115200
+ //#define PIN_GPS_TX 41
+ //#define PIN_GPS_RX 40
+ #define EEPROM_SIZE 296
+ #define EEPROM_OFFSET EEPROM_SIZE-EEPROM_RESERVED
+ //#define HAS_EEPROM true
+ //#define HAS_SD true
+ //#define HAS_DISPLAY true
+ //#define HAS_CONSOLE true
+ //#define HAS_TXCO true
+ //#define DISPLAY EINK_BW
+ //#define HAS_BLE true
+ //#define HAS_PMU true
+ #define CONFIG_UART_BUFFER_SIZE 40000
+ #define CONFIG_QUEUE_0_SIZE 6144
+ #define CONFIG_QUEUE_MAX_LENGTH 200
+ #define BLE_MANUFACTURER "LilyGO"
+ #define BLE_MODEL "T-Echo"
+ #define INTERFACE_COUNT 1
+ //#define I2C_SDA 26
+ //#define I2C_SCL 27
+ #define CONFIG_QUEUE_1_SIZE 40000
+ // first interface in list is the primary
+ const uint8_t interfaces[INTERFACE_COUNT] = {SX126X};
+ const bool interface_cfg[INTERFACE_COUNT][3] = {
+ // SX1262
+ {
+ false, // DEFAULT_SPI
+ true, // HAS_TCXO
+ true // DIO2_AS_RF_SWITCH
+ }
+ };
+
+ const int8_t interface_pins[INTERFACE_COUNT][10] = {
+ // SX1262
+ {
+ 24, // pin_ss
+ 19, // pin_sclk
+ 22, // pin_mosi
+ 23, // pin_miso
+ 17, // pin_busy
+ 20, // pin_dio
+ 25, // pin_reset
+ -1, // pin_txen
+ -1, // pin_rxen
+ 21 // pin_tcxo_enable
+ }
+ };
+
+ const int pin_disp_cs = 30;
+ const int pin_disp_dc = 28;
+ const int pin_disp_reset = 2;
+ const int pin_disp_busy = 3;
+ const int pin_disp_en = 43;
+
+ const int pin_led_rx = LED_BLUE;
+ const int pin_led_tx = LED_RED;
+ #elif BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_FREENODE
#define HAS_EEPROM false
#define HAS_DISPLAY true
#define DISPLAY EINK_BW
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
bool device_init() {
+ #if VALIDATE_FIRMWARE
if (bt_ready) {
#if MCU_VARIANT == MCU_ESP32
for (uint8_t i=0; i<EEPROM_SIG_LEN; i++){dev_eeprom_signature[i]=EEPROM.read(eeprom_addr(ADDR_SIGNATURE+i));}
hash.end(dev_hash);
#endif
+
device_load_signature();
device_validate_signature();
-
device_validate_partitions();
#if MCU_VARIANT == MCU_NRF52
} else {
return false;
}
+ #else //if VALIDATE_FIRMWARE is false
+ return true;
+ #endif
}
#endif
prep-nrf:
arduino-cli core update-index --config-file arduino-cli.yaml
+ arduino-cli core install adafruit:nrf52 --config-file arduino-cli.yaml
arduino-cli core install rakwireless:nrf52 --config-file arduino-cli.yaml
arduino-cli lib install "Crypto"
arduino-cli lib install "Adafruit GFX Library"
firmware-tbeam_sx126x:
arduino-cli compile --fqbn esp32:esp32:t-beam -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x33\" \"-DMODEM=0x03\""
+firmware-techo: firmware-techo4 firmware-techo9
+
+firmware-techo4:
+ arduino-cli compile --fqbn adafruit:nrf52:pca10056 -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x43\" \"-DBOARD_VARIANT=0x16\""
+
+firmware-techo9:
+ arduino-cli compile --fqbn adafruit:nrf52:pca10056 -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x43\" \"-DBOARD_VARIANT=0x17\""
+
firmware-t3s3_sx1262:
arduino-cli compile --fqbn "esp32:esp32:esp32s3:CDCOnBoot=cdc" -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x42\" \"-DBOARD_VARIANT=0xA1\""
@sleep 3
python3 ./Release/esptool/esptool.py --chip esp32 --port $(or $(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-techo:
+ arduino-cli upload -p $(or $(port), /dev/ttyACM0) --fqbn adafruit:nrf52:pca10056
+ unzip -o build/adafruit.nrf52.pca10056/RNode_Firmware_CE.ino.zip -d build/adafruit.nrf52.pca10056
+ #rnodeconf $(or $(port), /dev/ttyACM0) --firmware-hash $$(sha256sum ./build/adafruit.nrf52.pca10056/RNode_Firmware_CE.ino.bin | grep -o '^\S*')
+ ../Reticulum/RNS/Utilities/rnodeconf.py $(or $(port), /dev/ttyACM0) --firmware-hash $$(sha256sum ./build/adafruit.nrf52.pca10056/RNode_Firmware_CE.ino.bin | grep -o '^\S*')
+
upload-lora32_v10:
arduino-cli upload -p $(or $(port), /dev/ttyUSB0) --fqbn esp32:esp32:ttgo-lora32
@sleep 1
#include <SPI.h>
#include "Utilities.h"
-#if MCU_VARIANT == MCU_NRF52
- #define INTERFACE_SPI
+#if MCU_VARIANT == MCU_NRF52
+ #define INTERFACE_SPI
+ #if BOARD_MODEL == BOARD_RAK4631
// Required because on RAK4631, non-default SPI pins must be initialised when class is declared.
SPIClass interface_spi[1] = {
// SX1262
interface_pins[0][2]
)
};
+ #elif BOARD_MODEL == BOARD_TECHO
+ SPIClass interface_spi[1] = {
+ // SX1262
+ SPIClass(
+ NRF_SPIM3,
+ interface_pins[0][3],
+ interface_pins[0][1],
+ interface_pins[0][2]
+ )
+ };
+ #endif
#endif
#ifndef INTERFACE_SPI
if (eeprom_checksum_valid()) {
eeprom_ok = true;
if (modems_installed) {
- if (device_init()) {
- hw_ready = true;
- } else {
- hw_ready = false;
- }
+ if (device_init()) {
+ hw_ready = true;
+ } else {
+ hw_ready = false;
+ }
} else {
hw_ready = false;
Serial.write("No valid radio module found\r\n");
#define MODEL_12 0x12
#define MODEL_13 0x13 // RAK4631 LF with WisBlock SX1280 module (LIBSYS002)
#define MODEL_14 0x14 // RAK4631 HF with WisBlock SX1280 module (LIBSYS002)
+ #define PRODUCT_TECHO 0x15
+ #define MODEL_16 0x16 // T-Echo 433
+ #define MODEL_17 0x17 // T-Echo 915
#define MODEL_21 0x21 // European band, 868MHz
#define MODEL_A1 0xA1
#define MODEL_A5 0xA5 // T3S3 SX1280 PA
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};
+ #elif BOARD_MODEL == BOARD_TECHO
+ uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
#elif BOARD_MODEL == BOARD_T3S3
uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF};
#else
byte sx128x::random()
{
// todo: implement
+ return 0x4; //chosen by fair die roll
+ //guarenteed to be random
+ //https://xkcd.com/221/
}
void sx128x::setSPIFrequency(uint32_t frequency)
void led_rx_off() { digitalWrite(pin_led_rx, LOW); }
void led_tx_on() { digitalWrite(pin_led_tx, HIGH); }
void led_tx_off() { digitalWrite(pin_led_tx, LOW); }
- #endif
+ #elif BOARD_MODEL == BOARD_TECHO
+ void led_rx_on() { digitalWrite(pin_led_rx, HIGH); }
+ void led_rx_off() { digitalWrite(pin_led_rx, LOW); }
+ void led_tx_on() { digitalWrite(pin_led_tx, HIGH); }
+ void led_tx_off() { digitalWrite(pin_led_tx, LOW); }
+ #endif
#endif
void hard_reset(void) {
case 11:
return CONFIG_QUEUE_11_SIZE;
#endif
+ default:
+ return CONFIG_QUEUE_0_SIZE;
}
}
#if 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) {
#elif PLATFORM == PLATFORM_NRF52
- if (rval == PRODUCT_RAK4631 || rval == PRODUCT_HMBRW || rval == PRODUCT_FREENODE) {
+ if (rval == PRODUCT_TECHO || rval == MODEL_16 || rval == MODEL_17 || rval == PRODUCT_RAK4631 || rval == PRODUCT_HMBRW || rval == PRODUCT_FREENODE) {
#else
if (false) {
#endif
if (model == MODEL_FF || model == MODEL_FE) {
#elif BOARD_MODEL == BOARD_TBEAM
if (model == MODEL_E4 || model == MODEL_E9 || model == MODEL_E3 || model == MODEL_E8) {
+ #elif BOARD_MODEL == BOARD_TECHO
+ if (model == MODEL_16 || model == MODEL_17) {
#elif BOARD_MODEL == BOARD_LORA32_V1_0
if (model == MODEL_BA || model == MODEL_BB) {
#elif BOARD_MODEL == BOARD_LORA32_V2_0