]> git.tnoah.ca Git - lora-radio.git/commitdiff
WIP: Booting and display working, Lora32 V3, debug and some
authorKevin Brosius <cobra@compuserve.com>
Mon, 11 Mar 2024 07:59:42 +0000 (03:59 -0400)
committerKevin Brosius <cobra@compuserve.com>
Mon, 11 Mar 2024 07:59:42 +0000 (03:59 -0400)
checks bypassed.

Boards.h
Display.h
Makefile
RNode_Firmware.ino
Utilities.h

index 9bf8a69f4794a264ff1288aa106c717b0a5af2a7..14dbdecd7a3f444c2498dad2379163926fe3fbb8 100644 (file)
--- a/Boards.h
+++ b/Boards.h
   #define BOARD_LORA32_V2_1   0x37
   #define BOARD_LORA32_V1_0   0x39
   #define BOARD_HELTEC32_V2   0x38
+  #define BOARD_HELTEC_LORA32_V3 0x3a
   #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
 
+
+  // -----------------------------------
+  // override for local compile
+  //#define BOARD_MODEL  BOARD_LORA32_V1_0
+  #define BOARD_MODEL  BOARD_HELTEC_LORA32_V3
+  // -----------------------------------
+
+
   #if defined(__AVR_ATmega1284P__)
     #define PLATFORM PLATFORM_AVR
     #define MCU_VARIANT MCU_1284P
@@ -71,6 +80,7 @@
 
   #define HAS_DISPLAY false
   #define HAS_BLUETOOTH false
+  #define HAS_BLE false
   #define HAS_TCXO false
   #define HAS_PMU false
   #define HAS_NP false
       #define HAS_DISPLAY true
       #define HAS_PMU true
       #define HAS_BLUETOOTH true
+      #define HAS_BLE true
       #define HAS_CONSOLE true
       #define HAS_SD false
       #define HAS_EEPROM true
     #elif BOARD_MODEL == BOARD_LORA32_V1_0
       #define HAS_DISPLAY true
       #define HAS_BLUETOOTH true
+      #define HAS_BLE true
       #define HAS_CONSOLE true
       #define HAS_EEPROM true
       const int pin_cs = 18;
     #elif BOARD_MODEL == BOARD_LORA32_V2_0
       #define HAS_DISPLAY true
       #define HAS_BLUETOOTH true
+      #define HAS_BLE true
       #define HAS_CONSOLE true
       #define HAS_EEPROM true
       const int pin_cs = 18;
     #elif BOARD_MODEL == BOARD_LORA32_V2_1
       #define HAS_DISPLAY true
       #define HAS_BLUETOOTH true
+      #define HAS_BLE true
       #define HAS_PMU true
       #define HAS_CONSOLE true
       #define HAS_EEPROM true
         const int pin_led_tx = 25;
       #endif
 
+    #elif BOARD_MODEL == BOARD_HELTEC_LORA32_V3
+      #define IS_ESP32S3 true
+      #define HAS_DISPLAY true
+      //ESP32-S3 no bluetooth classic
+      //#define HAS_BLUETOOTH true
+      #define HAS_BLUETOOTH false
+      //#define HAS_BLE true
+      // TODO BLE
+      #define HAS_BLE false
+      // Cannot run wifi and BLE at same time?
+      #define HAS_CONSOLE false
+      #define HAS_EEPROM true
+      #if defined(EXTERNAL_LEDS)
+        const int pin_led_rx = 35;
+        const int pin_led_tx = 2;
+      #else
+        const int pin_led_rx = 2;
+        const int pin_led_tx = 2;
+      #endif
+
+      #define MODEM SX1262
+      //#define HAS_TCXO true
+      #define HAS_TCXO false
+      #define HAS_BUSY true
+      #define DIO2_AS_RF_SWITCH true
+      const int pin_tcxo_enable = -1;
+
+      // following pins are for the sx1262
+      const int pin_cs = 8;
+      const int pin_busy = 13;
+      const int pin_dio = 14;
+      const int pin_reset = 12;
+      const int pin_mosi = 10;
+      const int pin_miso = 11;
+      const int pin_sclk = 9;
+
+
+
     #elif BOARD_MODEL == BOARD_RNODE_NG_20
       #define HAS_DISPLAY true
       #define HAS_BLUETOOTH true
index 5dd2a1776c87982117fd63ca81bc50d166922cca..37c5d7f3349e241983a804c4038a433ee53ead4c 100644 (file)
--- a/Display.h
+++ b/Display.h
   #define DISP_ADDR 0x3C
   #define SCL_OLED 15
   #define SDA_OLED 4
+#elif BOARD_MODEL == BOARD_HELTEC_LORA32_V3
+  #define DISP_RST 21
+  //#define DISP_RST -1
+  #define DISP_ADDR 0x3C
+  #define SCL_OLED 18
+  #define SDA_OLED 17
 #elif BOARD_MODEL == BOARD_RNODE_NG_21
   #define DISP_RST -1
   #define DISP_ADDR 0x3C
@@ -108,6 +114,29 @@ bool display_init() {
       Wire.begin(SDA_OLED, SCL_OLED);
     #elif BOARD_MODEL == BOARD_HELTEC32_V2
       Wire.begin(SDA_OLED, SCL_OLED);
+    #elif BOARD_MODEL == BOARD_HELTEC_LORA32_V3
+      Serial.println("display - 1 ");
+      // vext
+      pinMode(Vext, OUTPUT);
+      //digitalWrite(36, LOW);
+      digitalWrite(Vext, LOW);
+      delay(500);
+      Serial.println("display - 2 ");
+      //Serial.print("vext ");
+      //Serial.println(Vext);
+      int pin_display_en = 21;
+      //digitalWrite(pin_display_en, HIGH);
+      //delay(50);
+      pinMode(pin_display_en, OUTPUT);
+      digitalWrite(pin_display_en, LOW);
+      delay(50);
+      digitalWrite(pin_display_en, HIGH);
+      delay(50);
+      Wire.begin(SDA_OLED, SCL_OLED);
+      // ble debug
+      //Serial.println("Setup display pins LORA32 V3");
+      Serial.println("vext ");
+      Serial.println(Vext);
     #elif BOARD_MODEL == BOARD_LORA32_V1_0
       int pin_display_en = 16;
       digitalWrite(pin_display_en, LOW);
@@ -149,6 +178,10 @@ bool display_init() {
       #elif BOARD_MODEL == BOARD_HELTEC32_V2
         disp_mode = DISP_MODE_PORTRAIT;
         display.setRotation(1);
+      #elif BOARD_MODEL == BOARD_HELTEC_LORA32_V3
+        disp_mode = DISP_MODE_PORTRAIT;
+        display.setRotation(1);
+        //display.setRotation(3);
       #else
         disp_mode = DISP_MODE_PORTRAIT;
         display.setRotation(3);
@@ -165,7 +198,14 @@ bool display_init() {
       disp_area.cp437(true);
       display.cp437(true);
 
+      Serial.print("(1)display int= ");
+      Serial.println(display_intensity);
       display_intensity = EEPROM.read(eeprom_addr(ADDR_CONF_DINT));
+      Serial.print("(2)display int= ");
+      Serial.println(display_intensity);
+      display_intensity = 100;
+      Serial.print("(2)display int= ");
+      Serial.println(display_intensity);
 
       return true;
     }
@@ -349,7 +389,9 @@ void draw_stat_area() {
 }
 
 void update_stat_area() {
-  if (eeprom_ok && !firmware_update_mode && !console_active) {
+  // override eeprom check for BLE
+  //if (eeprom_ok && !firmware_update_mode && !console_active) {
+  if ( !firmware_update_mode && !console_active) {
     
     draw_stat_area();
     if (disp_mode == DISP_MODE_PORTRAIT) {
@@ -524,6 +566,8 @@ void draw_disp_area() {
 }
 
 void update_disp_area() {
+  // ble debug
+  Serial.println("...update disp area...");
   draw_disp_area();
   display.drawBitmap(p_ad_x, p_ad_y, disp_area.getBuffer(), disp_area.width(), disp_area.height(), SSD1306_WHITE, SSD1306_BLACK);
   if (disp_mode == DISP_MODE_LANDSCAPE) {
index 27068dc1380496714cf2a1cb36780f4d0bab6b90..88c7c7400396269a73c91de142843b124254053e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -93,6 +93,9 @@ firmware-heltec32_v2:
 firmware-heltec32_v2_extled:
        arduino-cli compile --fqbn esp32:esp32:heltec_wifi_lora_32_V2 -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x38\" \"-DEXTERNAL_LEDS=true\""
 
+firmware-heltec32_v3:
+       arduino-cli compile --fqbn esp32:esp32:heltec_wifi_lora_32_V3 -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x39\""
+
 firmware-rnode_ng_20:
        arduino-cli compile --fqbn esp32:esp32:ttgo-lora32 -e --build-property "build.partitions=no_ota" --build-property "upload.maximum_size=2097152" --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x40\""
 
@@ -149,6 +152,13 @@ upload-heltec32_v2:
        @sleep 3
        python ./Release/esptool/esptool.py --chip esp32 --port /dev/ttyUSB0 --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-heltec32_v3:
+       arduino-cli upload -p COM3 --fqbn esp32:esp32:heltec_wifi_lora_32_V3
+       @sleep 1
+       rnodeconf COM3 --firmware-hash $$(./partition_hashes ./build/esp32.esp32.heltec_wifi_lora_32_V3/RNode_Firmware.ino.bin)
+       @sleep 3
+       python ./Release/esptool/esptool.py --chip esp32-s3 --port COM3 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x210000 ./Release/console_image.bin
+
 upload-rnode_ng_20:
        arduino-cli upload -p /dev/ttyUSB0 --fqbn esp32:esp32:ttgo-lora32
        @sleep 1
index 54ddb125e8c117daf2c3441062b3cd4abdb755af..925406f24bec8c3c42f1696505625ece08fcb7dc 100644 (file)
@@ -143,6 +143,9 @@ void setup() {
       eeprom_update(eeprom_addr(ADDR_CONF_DINT), 0xFF);
     }
     disp_ready = display_init();
+      // ble debug
+    Serial.print("disp ready = ");
+    Serial.println(disp_ready);
     update_display();
   #endif
 
@@ -380,6 +383,10 @@ void stopRadio() {
 }
 
 void update_radio_lock() {
+      // ble debug
+    //static char lock[40];
+    //sprintf(lock, "lock chk %d %d %x %d", lora_freq, lora_bw, lora_txp, lora_sf);
+    //Serial.println(lock);
   if (lora_freq != 0 && lora_bw != 0 && lora_txp != 0xFF && lora_sf != 0) {
     radio_locked = false;
   } else {
@@ -605,6 +612,9 @@ void serialCallback(uint8_t sbyte) {
             lora_freq = freq;
             if (op_mode == MODE_HOST) setFrequency();
             kiss_indicate_frequency();
+      // ble debug
+            //Serial.print("freq ");
+            //Serial.println(lora_freq);
           }
         }
     } else if (command == CMD_BANDWIDTH) {
@@ -690,6 +700,8 @@ void serialCallback(uint8_t sbyte) {
       } else if (sbyte == 0x01) {
         startRadio();
         kiss_indicate_radiostate();
+      // ble debug
+        //Serial.println("start radio");
       }
     } else if (command == CMD_ST_ALOCK) {
       if (sbyte == FESC) {
@@ -1063,6 +1075,11 @@ void validate_status() {
       uint8_t F_WDR = 0x01;
   #endif
 
+        // ble debug
+        Serial.print("hw_ready ");
+        Serial.print(hw_ready);
+        Serial.print(" device init done ");
+        Serial.println(device_init_done);
   if (hw_ready || device_init_done) {
     hw_ready = false;
     Serial.write("Error, invalid hardware check state\r\n");
@@ -1093,22 +1110,31 @@ void validate_status() {
   }
 
   if (boot_vector == START_FROM_BOOTLOADER || boot_vector == START_FROM_POWERON) {
-    if (eeprom_lock_set()) {
+    //if (eeprom_lock_set()) {
+    if (1) {
       if (eeprom_product_valid() && eeprom_model_valid() && eeprom_hwrev_valid()) {
         if (eeprom_checksum_valid()) {
           eeprom_ok = true;
           if (modem_installed) {
             #if PLATFORM == PLATFORM_ESP32
               if (device_init()) {
+                // ble debug
+                Serial.println("hw ready 1");
                 hw_ready = true;
               } else {
                 hw_ready = false;
+                // ble debug
+                Serial.println("hw ! ready 1");
               }
             #else
               hw_ready = true;
+                // ble debug
+                Serial.println("hw ready 2");
             #endif
           } else {
             hw_ready = false;
+            // ble debug
+            Serial.println("hw ! ready 3");
             Serial.write("No valid radio module found\r\n");
             #if HAS_DISPLAY
               if (disp_ready) {
@@ -1122,9 +1148,14 @@ void validate_status() {
             eeprom_conf_load();
             op_mode = MODE_TNC;
             startRadio();
+            // ble debug
+            Serial.println("hw ready - start radio");
+
           }
         } else {
           hw_ready = false;
+          // ble debug
+          Serial.println("hw ! ready 4");
           #if HAS_DISPLAY
             if (disp_ready) {
               device_init_done = true;
@@ -1134,15 +1165,26 @@ void validate_status() {
         }
       } else {
         hw_ready = false;
+        // ble debug
+        Serial.println("hw ! ready 5  - override  - TODO");
+        
+        //  override eeprom flags - ble debug
+        hw_ready = true;
+        //
+
         #if HAS_DISPLAY
           if (disp_ready) {
             device_init_done = true;
             update_display();
+          // ble debug
+            Serial.println("update display called");
           }
         #endif
       }
     } else {
       hw_ready = false;
+      // ble debug
+      Serial.println("hw ! ready 6");
       #if HAS_DISPLAY
         if (disp_ready) {
           device_init_done = true;
@@ -1152,6 +1194,8 @@ void validate_status() {
     }
   } else {
     hw_ready = false;
+      // ble debug
+    Serial.println("hw ! ready 7 - bad boot vector");
     Serial.write("Error, incorrect boot vector\r\n");
     #if HAS_DISPLAY
       if (disp_ready) {
index dcb085e81d801327a6cce1a07da059a6661fa699..3b325c1670db739574e738b46a5d0094d4ea5c08 100644 (file)
@@ -60,9 +60,12 @@ sx128x *LoRa = &sx128x_modem;
        #include "Device.h"
 #endif
 #if MCU_VARIANT == MCU_ESP32
-       #if BOARD_MODEL != BOARD_RNODE_NG_22
-         #include "soc/rtc_wdt.h"
-       #endif
+       //#if BOARD_MODEL != BOARD_RNODE_NG_22 && BOARD_MODEL != BOARD_HELTEC_LORA32_V3
+       //  #include "soc/rtc_wdt.h"
+  //#else
+    //https://github.com/espressif/esp-idf/issues/8855
+    #include "hal/wdt_hal.h"
+       //#endif
   #define ISR_VECT IRAM_ATTR
 #else
   #define ISR_VECT
@@ -192,6 +195,11 @@ uint8_t boot_vector = 0x00;
                        void led_tx_on()  { digitalWrite(pin_led_tx, HIGH); }
                        void led_tx_off() { digitalWrite(pin_led_tx, LOW); }
                #endif
+       #elif BOARD_MODEL == BOARD_HELTEC_LORA32_V3
+                       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); }
        #elif BOARD_MODEL == BOARD_LORA32_V2_1
                void led_rx_on()  { digitalWrite(pin_led_rx, HIGH); }
                void led_rx_off() {     digitalWrite(pin_led_rx, LOW); }