diff --git a/src/main.cpp b/src/main.cpp index f97fc2c89..702787b6b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -59,12 +59,12 @@ NimbleBluetooth *nimbleBluetooth = nullptr; NRF52Bluetooth *nrf52Bluetooth = nullptr; #endif -#if HAS_WIFI || defined(USE_WS5500) +#if HAS_WIFI || defined(USE_WS5500) || defined(USE_CH390D) #include "mesh/api/WiFiServerAPI.h" #include "mesh/wifi/WiFiAPClient.h" #endif -#if HAS_ETHERNET && !defined(USE_WS5500) +#if HAS_ETHERNET && !defined(USE_WS5500) && !defined(USE_CH390D) #include "mesh/api/ethServerAPI.h" #include "mesh/eth/ethClient.h" #endif diff --git a/src/mesh/eth/ethClient.cpp b/src/mesh/eth/ethClient.cpp index 440f7b76a..bb6232727 100644 --- a/src/mesh/eth/ethClient.cpp +++ b/src/mesh/eth/ethClient.cpp @@ -9,7 +9,7 @@ #include #include -#if HAS_NETWORKING +#if HAS_NETWORKING && !defined(USE_WS5500) && !defined(USE_CH390D) #ifndef DISABLE_NTP #include diff --git a/src/mesh/wifi/WiFiAPClient.cpp b/src/mesh/wifi/WiFiAPClient.cpp index 8e972edc1..3ee56b03c 100644 --- a/src/mesh/wifi/WiFiAPClient.cpp +++ b/src/mesh/wifi/WiFiAPClient.cpp @@ -62,12 +62,43 @@ unsigned long lastrun_ntp = 0; bool needReconnect = true; // If we create our reconnector, run it once at the beginning bool isReconnecting = false; // If we are currently reconnecting +#if defined(USE_WS5500) || defined(USE_CH390D) +static volatile bool ethNetworkConnectedPending = false; +#endif WiFiUDP syslogClient; meshtastic::Syslog syslog(syslogClient); Periodic *wifiReconnect; +#if defined(USE_WS5500) || defined(USE_CH390D) +static void onNetworkConnected(); +static uint32_t lastEthIP = 0; +static int32_t ethNetworkConnectedPoll() +{ + if (ethNetworkConnectedPending) { + ethNetworkConnectedPending = false; + uint32_t ip = (uint32_t)ETH.localIP(); + bool ipChanged = APStartupComplete && ip != 0 && ip != lastEthIP; + onNetworkConnected(); + if (ipChanged) { + LOG_INFO("Ethernet IP changed (%u.%u.%u.%u), restarting mDNS", ip & 0xff, (ip >> 8) & 0xff, (ip >> 16) & 0xff, + (ip >> 24) & 0xff); + MDNS.end(); + if (MDNS.begin("Meshtastic")) { + MDNS.addService("meshtastic", "tcp", SERVER_API_DEFAULT_PORT); + MDNS.addServiceTxt("meshtastic", "tcp", "shortname", String(owner.short_name)); + MDNS.addServiceTxt("meshtastic", "tcp", "id", String(nodeDB->getNodeId().c_str())); + MDNS.addServiceTxt("meshtastic", "tcp", "pio_env", optstr(APP_ENV)); + } + } + if (ip != 0) + lastEthIP = ip; + } + return 500; +} +#endif + #ifdef USE_WS5500 // Startup Ethernet bool initEthernet() @@ -78,6 +109,7 @@ bool initEthernet() #if !MESHTASTIC_EXCLUDE_WEBSERVER createSSLCert(); // For WebServer #endif + new concurrency::Periodic("EthConnect", ethNetworkConnectedPoll); return true; } @@ -91,7 +123,7 @@ bool initEthernet() { // Configure CH390 ch390_config_t ch390_conf = CH390_DEFAULT_CONFIG(); - ch390_conf.spi_host = SPI3_HOST; // SPI2_HOST or SPI3_HOST + ch390_conf.spi_host = SPI3_HOST; ch390_conf.spi_cs_gpio = ETH_CS_PIN; ch390_conf.spi_sck_gpio = ETH_SCLK_PIN; ch390_conf.spi_mosi_gpio = ETH_MOSI_PIN; @@ -104,6 +136,7 @@ bool initEthernet() #if !MESHTASTIC_EXCLUDE_WEBSERVER createSSLCert(); // For WebServer #endif + new concurrency::Periodic("EthConnect", ethNetworkConnectedPoll); return true; } @@ -266,7 +299,7 @@ bool isWifiAvailable() if (config.network.wifi_enabled && (config.network.wifi_ssid[0])) { return true; -#ifdef USE_WS5500 +#if defined(USE_WS5500) || defined(USE_CH390D) } else if (config.network.eth_enabled) { return true; #endif @@ -526,18 +559,18 @@ static void WiFiEvent(WiFiEvent_t event) LOG_INFO("Ethernet disconnected"); break; case ARDUINO_EVENT_ETH_GOT_IP: -#ifdef USE_WS5500 +#if defined(USE_WS5500) || defined(USE_CH390D) LOG_INFO("Obtained IP address: %s, %u Mbps, %s", ETH.localIP().toString().c_str(), ETH.linkSpeed(), ETH.fullDuplex() ? "FULL_DUPLEX" : "HALF_DUPLEX"); - onNetworkConnected(); + ethNetworkConnectedPending = true; #endif break; case ARDUINO_EVENT_ETH_GOT_IP6: -#ifdef USE_WS5500 +#if defined(USE_WS5500) || defined(USE_CH390D) #if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0) LOG_INFO("Obtained Local IP6 address: %s", ETH.linkLocalIPv6().toString().c_str()); LOG_INFO("Obtained GlobalIP6 address: %s", ETH.globalIPv6().toString().c_str()); -#else +#elif defined(USE_WS5500) LOG_INFO("Obtained IP6 address: %s", ETH.localIPv6().toString().c_str()); #endif #endif diff --git a/src/mqtt/MQTT.cpp b/src/mqtt/MQTT.cpp index aba06c210..6f02d8277 100644 --- a/src/mqtt/MQTT.cpp +++ b/src/mqtt/MQTT.cpp @@ -22,6 +22,9 @@ #if HAS_ETHERNET && defined(USE_WS5500) #include #define ETH ETH2 +#elif HAS_ETHERNET && defined(USE_CH390D) +#include "ESP32_CH390.h" +#define ETH CH390 #endif // HAS_ETHERNET #include "Default.h" #if !defined(ARCH_NRF52) || NRF52_USE_JSON @@ -344,6 +347,9 @@ inline bool isConnectedToNetwork() #ifdef USE_WS5500 if (ETH.connected()) return true; +#elif defined(USE_CH390D) + if (ETH.isConnected()) + return true; #endif #if HAS_WIFI diff --git a/src/platform/esp32/main-esp32.cpp b/src/platform/esp32/main-esp32.cpp index 25cb30e96..dbc573c95 100644 --- a/src/platform/esp32/main-esp32.cpp +++ b/src/platform/esp32/main-esp32.cpp @@ -32,7 +32,7 @@ void variant_shutdown() {} #if !defined(CONFIG_IDF_TARGET_ESP32S2) && !MESHTASTIC_EXCLUDE_BLUETOOTH void setBluetoothEnable(bool enable) { -#ifdef USE_WS5500 +#if defined(USE_WS5500) || defined(USE_CH390D) if ((config.bluetooth.enabled == true) && (config.network.wifi_enabled == false)) #elif HAS_WIFI if (!isWifiAvailable() && config.bluetooth.enabled == true) diff --git a/variants/esp32s3/ELECROW-ThinkNode-M7/platformio.ini b/variants/esp32s3/ELECROW-ThinkNode-M7/platformio.ini index cf1918971..8120b15fa 100644 --- a/variants/esp32s3/ELECROW-ThinkNode-M7/platformio.ini +++ b/variants/esp32s3/ELECROW-ThinkNode-M7/platformio.ini @@ -15,7 +15,7 @@ build_flags = lib_ignore = Ethernet -lib_deps = +lib_deps = ${esp32s3_base.lib_deps} - symlink://E:/dev/embedded/mt/ESP32-CH390-master - # https://github.com/caveman99/ESP32-CH390.git#c72bcd25f566b3ecd24f26893e70cc9d3211cd68 \ No newline at end of file + # renovate: datasource=github-tags depName=ESP32-CH390 packageName=meshtastic/ESP32-CH390 + https://github.com/meshtastic/ESP32-CH390/archive/refs/tags/v1.0.1.zip \ No newline at end of file diff --git a/variants/esp32s3/ELECROW-ThinkNode-M7/variant.h b/variants/esp32s3/ELECROW-ThinkNode-M7/variant.h index 2a4e4d401..158b75a71 100644 --- a/variants/esp32s3/ELECROW-ThinkNode-M7/variant.h +++ b/variants/esp32s3/ELECROW-ThinkNode-M7/variant.h @@ -33,4 +33,4 @@ #define ETH_CS_PIN 14 #define ETH_INT_PIN 10 #define ETH_RST_PIN 9 -//#define ETH_ADDR 1 \ No newline at end of file +// #define ETH_ADDR 1 \ No newline at end of file