diff --git a/lib/comms/comms.cpp b/lib/comms/comms.cpp index 5eb380b..a580e4d 100644 --- a/lib/comms/comms.cpp +++ b/lib/comms/comms.cpp @@ -57,6 +57,7 @@ void _onUsbEvent0(void *arg, esp_event_base_t event_base, int32_t event_id, bool Comms::initComms(Config &c) { bool fine = false; +#ifndef HELTEC if (c.listen_on_usb.equalsIgnoreCase("readline")) { // comms using readline plaintext protocol @@ -68,13 +69,14 @@ bool Comms::initComms(Config &c) fine = true; } +#endif if (c.listen_on_serial0.equalsIgnoreCase("readline")) { // comms using readline plaintext protocol - Comms0 = new ReadlineComms("UART0", Serial0); - Serial0.onReceive(_onReceive0, false); - Serial0.begin(115200); + Comms0 = new ReadlineComms("UART0", SERIAL0); + SERIAL0.onReceive(_onReceive0, false); + SERIAL0.begin(115200); Serial.println("Initialized communications on Serial0 using readline protocol"); } diff --git a/lib/comms/comms.h b/lib/comms/comms.h index 0267693..c568d6d 100644 --- a/lib/comms/comms.h +++ b/lib/comms/comms.h @@ -5,6 +5,12 @@ #include #include +#ifdef HELTEC +#define SERIAL0 Serial +#else +#define SERIAL0 Serial0 +#endif + enum MessageType { WRAP = 0, @@ -69,7 +75,7 @@ struct Comms struct NoopComms : Comms { - NoopComms() : Comms("no-op", Serial0) {}; + NoopComms() : Comms("no-op", SERIAL0) {}; virtual bool send(Message &) { return true; }; virtual void _onReceive() {}; diff --git a/include/LiLyGo.h b/lib/loraboards/LiLyGo.h similarity index 55% rename from include/LiLyGo.h rename to lib/loraboards/LiLyGo.h index 1d44603..e0008c4 100644 --- a/include/LiLyGo.h +++ b/lib/loraboards/LiLyGo.h @@ -1,3 +1,5 @@ +#ifndef __LILY_GO_H +#define __LILY_GO_H // Define for our code #define RST_OLED UNUSED_PIN @@ -25,32 +27,43 @@ // Assume MISO and MOSI being wrong when not using Heltec's board definition // and use hspi to make it work anyway. See heltec_setup() for the actual SPI setup. #include -SPIClass *hspi = new SPIClass(2); -SX1262 radio = new Module(SS, DIO1, RST_LoRa, BUSY_LoRa, *hspi); +extern SPIClass *hspi; +#define RADIO_TYPE SX1262 +#define RADIO_MODULE_INIT() new Module(SS, DIO1, RST_LoRa, BUSY_LoRa, *hspi); #else // ARDUINO_heltec_wifi_32_lora_V3 #ifdef USING_SX1280PA -SX1280 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN); +#define RADIO_TYPE SX1280 +#define RADIO_MODULE_INIT() \ + new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN); #endif // end USING_SX1280PA #ifdef USING_SX1262 // Default SPI on pins from pins_arduino.h -SX1262 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN); +#define RADIO_TYPE SX1262 +#define RADIO_MODULE_INIT() \ + new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN) #endif // end USING_SX1262 #ifdef USING_LR1121 // Default SPI on pins from pins_arduino.h -LR1121 radio = new Module(RADIO_CS_PIN, RADIO_DIO9_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN); +#define RADIO_TYPE LR1121 +#define RADIO_MODULE_INIT() \ + new Module(RADIO_CS_PIN, RADIO_DIO9_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN); #endif // end USING_LR1121 #ifdef USING_SX1276 // Default SPI on pins from pins_arduino.h -SX1276 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN); +#define RADIO_TYPE SX1276 +#define RADIO_MODULE_INIT() \ + new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN); #endif // end USING_SX1276 #endif // end ARDUINO_heltec_wifi_32_lora_V3 #endif // end HELTEC_NO_RADIO_INSTANCE -void heltec_led(int led) {} +extern RADIO_TYPE radio; -void heltec_deep_sleep() {} +void heltec_led(int led); -void heltec_delay(int millisec) { delay(millisec); } +void heltec_deep_sleep(int sleep_seconds = 0); + +void heltec_delay(int millisec); #ifndef HELTEC_NO_DISPLAY_INSTANCE /** @@ -89,78 +102,34 @@ class PrintSplitter : public Print #endif #define SCREEN_ADDRESS 0x3C -SSD1306Wire display(SCREEN_ADDRESS, I2C_SDA, I2C_SCL, DISPLAY_GEOMETRY); +#define DISPLAY_TYPE SSD1306Wire +#define DISPLAY_INIT() SSD1306Wire(SCREEN_ADDRESS, I2C_SDA, I2C_SCL, DISPLAY_GEOMETRY) // SH1106Wire display(0x3c, I2C_SDA, I2C_SCL, DISPLAY_GEOMETRY); -PrintSplitter both(Serial, display); + +#define BOTH_TYPE PrintSplitter +#define BOTH_INIT() PrintSplitter(Serial, display) #else -Print &both = Serial; +#define DISPLAY_TYPE void * +#define BOTH_TYPE Print & +#define BOTH_INIT() Serial #endif + +extern DISPLAY_TYPE display; +extern BOTH_TYPE both; // some fake pin #ifdef T3_V1_6_SX1276 #define BUTTON_PIN 22 #endif #define BUTTON BUTTON_PIN #include "HotButton.h" -HotButton button(BUTTON); +extern HotButton button; -void heltec_loop() -{ -#ifndef DT3_V1_6_SX1276 - button.update(); -#endif -} +void heltec_loop(); // This file contains a binary patch for the SX1262 #include "modules/SX126x/patches/SX126x_patch_scan.h" -void heltec_display_power(bool on) -{ -#ifndef HELTEC_NO_DISPLAY_INSTANCE - if (on) - { -#ifdef HELTEC_WIRELESS_STICK - // They hooked the display to "external" power, and didn't tell anyone - heltec_ve(true); - delay(5); -#endif - pinMode(RST_OLED, OUTPUT); - digitalWrite(RST_OLED, HIGH); - delay(1); - digitalWrite(RST_OLED, LOW); - delay(20); - digitalWrite(RST_OLED, HIGH); - } - else - { -#ifdef HELTEC_WIRELESS_STICK - heltec_ve(false); -#else - display.displayOff(); -#endif - } -#endif -} -void heltec_setup() -{ - Serial.begin(115200); - Serial.println("LILYGO BOARD"); +void heltec_display_power(bool on); -#if defined(ARDUINO_ARCH_ESP32) - SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN); -#elif defined(ARDUINO_ARCH_STM32) - SPI.setMISO(RADIO_MISO_PIN); - SPI.setMOSI(RADIO_MOSI_PIN); - SPI.setSCLK(RADIO_SCLK_PIN); - SPI.begin(); +void heltec_setup(); #endif - -#ifndef ARDUINO_heltec_wifi_32_lora_V3 - hspi->begin(SCK, MISO, MOSI, SS); -#endif -#ifndef HELTEC_NO_DISPLAY_INSTANCE - heltec_display_power(true); - display.init(); - // display.setContrast(200); - display.flipScreenVertically(); -#endif -} diff --git a/lib/loraboards/LoRaBoards.cpp b/lib/loraboards/LoRaBoards.cpp index 3689a93..ba7a810 100644 --- a/lib/loraboards/LoRaBoards.cpp +++ b/lib/loraboards/LoRaBoards.cpp @@ -12,6 +12,86 @@ #include "LoRaBoards.h" +#include "LiLyGo.h" + +// Implement stubs for functions that exist on Heltec, but not on LilyGo +void heltec_led(int led) {} + +void heltec_deep_sleep(int sleep_seconds) {} + +void heltec_delay(int millisec) { delay(millisec); } + +DISPLAY_TYPE display = DISPLAY_INIT(); +BOTH_TYPE both = BOTH_INIT(); + +HotButton button(BUTTON); + +void heltec_loop() +{ +#ifndef DT3_V1_6_SX1276 + button.update(); +#endif +} + +void heltec_display_power(bool on) +{ +#ifndef HELTEC_NO_DISPLAY_INSTANCE + if (on) + { +#ifdef HELTEC_WIRELESS_STICK + // They hooked the display to "external" power, and didn't tell anyone + heltec_ve(true); + delay(5); +#endif + pinMode(RST_OLED, OUTPUT); + digitalWrite(RST_OLED, HIGH); + delay(1); + digitalWrite(RST_OLED, LOW); + delay(20); + digitalWrite(RST_OLED, HIGH); + } + else + { +#ifdef HELTEC_WIRELESS_STICK + heltec_ve(false); +#else + display.displayOff(); +#endif + } +#endif +} + +void heltec_setup() +{ + Serial.begin(115200); + Serial.println("LILYGO BOARD"); + +#if defined(ARDUINO_ARCH_ESP32) + SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN); +#elif defined(ARDUINO_ARCH_STM32) + SPI.setMISO(RADIO_MISO_PIN); + SPI.setMOSI(RADIO_MOSI_PIN); + SPI.setSCLK(RADIO_SCLK_PIN); + SPI.begin(); +#endif + +#ifndef ARDUINO_heltec_wifi_32_lora_V3 + hspi->begin(SCK, MISO, MOSI, SS); +#endif +#ifndef HELTEC_NO_DISPLAY_INSTANCE + heltec_display_power(true); + display.init(); + // display.setContrast(200); + display.flipScreenVertically(); +#endif +} + +#ifndef ARDUINO_heltec_wifi_32_lora_V3 +SPIClass hspi = new SPIClass(2); +#endif + +RADIO_TYPE radio = RADIO_MODULE_INIT(); + #if defined(HAS_SDCARD) SPIClass SDCardSPI(HSPI); #endif diff --git a/lib/loraboards/LoRaBoards.h b/lib/loraboards/LoRaBoards.h index 655376e..811f209 100644 --- a/lib/loraboards/LoRaBoards.h +++ b/lib/loraboards/LoRaBoards.h @@ -7,6 +7,7 @@ * @last-update 2024-08-07 */ +#ifdef LILYGO #pragma once #include "utilities.h" @@ -95,3 +96,4 @@ extern SPIClass SDCardSPI; #elif defined(ARDUINO_ARCH_STM32) extern HardwareSerial SerialGPS; #endif +#endif diff --git a/src/main.cpp b/src/main.cpp index 10d316c..da7ba7d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -79,7 +79,7 @@ // #include "utilities.h" // Our Code -#include "LiLyGo.h" +#include #endif // end LILYGO #define BT_SCAN_DELAY 60 * 1 * 1000