WIP: Booting and display working, Lora32 V3, debug and some

checks bypassed.
master
Kevin Brosius 12 months ago
parent 262518efef
commit 36ab438625
  1. 52
      Boards.h
  2. 46
      Display.h
  3. 10
      Makefile
  4. 46
      RNode_Firmware.ino
  5. 14
      Utilities.h

@ -36,12 +36,21 @@
#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
@ -143,6 +153,7 @@
#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
@ -178,6 +189,7 @@
#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;
@ -194,6 +206,7 @@
#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;
@ -210,6 +223,7 @@
#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
@ -243,6 +257,44 @@
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

@ -32,6 +32,12 @@
#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) {

@ -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

@ -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) {

@ -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); }

Loading…
Cancel
Save