]> git.tnoah.ca Git - lora-radio.git/commitdiff
Squashed commit of the following:
authorjeremy <jeremy@ubuntu>
Thu, 12 Sep 2024 14:57:16 +0000 (10:57 -0400)
committerjeremy <jeremy@ubuntu>
Thu, 12 Sep 2024 14:57:16 +0000 (10:57 -0400)
commit 2e25bff15413f2365f1b18c901f93297ce07c645
Author: jeremy <jeremy@ubuntu>
Date:   Thu Sep 12 10:19:07 2024 -0400

    Adds t-echo support

commit aa44625847179c5b3c4d03b9f7e062f409da0d8a
Author: jeremy <jeremy@ubuntu>
Date:   Thu Sep 12 10:19:07 2024 -0400

    Adds t-echo support

.vscode/settings.json [new file with mode: 0644]
Boards.h
Device.h
Makefile
RNode_Firmware_CE.ino
ROM.h
Radio.cpp
Utilities.h

diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644 (file)
index 0000000..48174a9
--- /dev/null
@@ -0,0 +1,16 @@
+{
+    "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
index 3193b8ebfeb798208d045d44ae67159f85cfc711..eb2527b2c21497affd1aca62294a14324fc8ce51 100644 (file)
--- a/Boards.h
+++ b/Boards.h
@@ -39,6 +39,7 @@
   #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
 
@@ -50,7 +51,7 @@
   #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
index 944479dbb9ebf2d39b58f2d67796f4eb2995b293..304e6761d294ef083a4c108a3bdc4a608912f2d2 100644 (file)
--- a/Device.h
+++ b/Device.h
@@ -275,6 +275,7 @@ bool device_firmware_ok() {
 
 #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));}
@@ -310,9 +311,9 @@ bool device_init() {
 
     hash.end(dev_hash);
     #endif
+
     device_load_signature();
     device_validate_signature();
-
     device_validate_partitions();
 
     #if MCU_VARIANT == MCU_NRF52
@@ -323,5 +324,8 @@ bool device_init() {
   } else {
     return false;
   }
+  #else //if VALIDATE_FIRMWARE is false
+  return true;
+  #endif
 }
 #endif
index f931e3468e34bf352a2a6bf3bb3a1a470f3c6067..4618f95042834273667d028941ea0f66142e05a0 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -37,6 +37,7 @@ prep-samd:
 
 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"
@@ -62,6 +63,14 @@ firmware-tbeam:
 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\""
 
@@ -123,6 +132,12 @@ upload-tbeam:
        @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
index 96e084917d7ce23fb04d161f0ba480f283098e99..a82e70ed32a2eccb9199da01550ed5718f0d6f6d 100644 (file)
@@ -17,8 +17,9 @@
 #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
@@ -1101,11 +1113,11 @@ void validate_status() {
         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");
diff --git a/ROM.h b/ROM.h
index 323449d9595e2ca825a4bfa3a504b71a596419e6..4ecd02af2579d4ddda719c40a1df3acef2e5cfa9 100644 (file)
--- a/ROM.h
+++ b/ROM.h
@@ -32,6 +32,9 @@
     #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
index e0df26456d4eae75e31d58c64b3ee8b0e37ff10f..0686b0b72b82bccd72d116abdb57a6d231b49eb7 100644 (file)
--- a/Radio.cpp
+++ b/Radio.cpp
@@ -744,6 +744,8 @@ void sx126x::enableTCXO() {
       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
@@ -2563,6 +2565,9 @@ void sx128x::disableCrc()
 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)
index f1e832d38bfb189418f5f8a8feb77f61a7d7d4f3..84057362abcfceece9e466955d540130541f1e8f 100644 (file)
@@ -210,7 +210,12 @@ uint8_t boot_vector = 0x00;
                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) {
@@ -1160,6 +1165,8 @@ uint16_t getQueueSize(uint8_t index) {
         case 11:
             return CONFIG_QUEUE_11_SIZE;
         #endif
+               default:
+            return CONFIG_QUEUE_0_SIZE;
     }
 }
 
@@ -1334,7 +1341,7 @@ bool eeprom_product_valid() {
        #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
@@ -1362,6 +1369,8 @@ bool eeprom_model_valid() {
        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