src.nth.io/

summaryrefslogtreecommitdiff
path: root/main/app_main.c
diff options
context:
space:
mode:
authorLuke Hoersten <[email protected]>2026-06-13 21:57:47 -0500
committerLuke Hoersten <[email protected]>2026-06-13 21:57:47 -0500
commite2ac22e58901e18b0b567b85d93a8f68335180bc (patch)
tree620b10cd61f92273bd35627b6868c0befd12009b /main/app_main.c
parentcadff71f2917b1ec8b140ea54a5994b9e438c0c8 (diff)
M1: Ethernet bring-up
net_eth module brings up the Waveshare ESP32-P4-ETH-POE Ethernet interface (internal EMAC + IP101GRI PHY) and waits for a DHCP lease. Pin map confirmed via Waveshare wiki + ESPHome's working config: MDC=31, MDIO=52, REF_CLK=50 (CLK_EXT_IN from PHY) TX_EN=49, TXD0=34, TXD1=35 CRS_DV=28, RXD0=30, RXD1=29 PHY reset/enable=51, PHY addr=1 app_main initializes NVS, netif, the default event loop, then starts the Ethernet driver and waits up to 30s for an IP. On success it logs the IP; on timeout it logs a warning and proceeds (the driver keeps retrying in the background). sdkconfig: declare 16 MB flash so partitions.csv (6.1 MB) fits. main/CMakeLists.txt: explicit REQUIRES esp_eth esp_event esp_netif nvs_flash. Acceptance (per M1 in the impl guide): device gets a DHCP lease over Ethernet and prints its IP. Build is clean against ESP-IDF 5.4 for target esp32p4.
Diffstat (limited to 'main/app_main.c')
-rw-r--r--main/app_main.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/main/app_main.c b/main/app_main.c
index 3c30497..8b91537 100644
--- a/main/app_main.c
+++ b/main/app_main.c
@@ -1,7 +1,9 @@
-#include <esp_log.h>
-#include <esp_event.h>
-#include <esp_netif.h>
-#include <nvs_flash.h>
+#include "net_eth.h"
+
+#include "esp_event.h"
+#include "esp_log.h"
+#include "esp_netif.h"
+#include "nvs_flash.h"
static const char *TAG = "viewport";
@@ -13,10 +15,19 @@ void app_main(void)
ESP_LOGI(TAG, "Scrypted Viewport boot");
- // TODO: Ethernet (ESP32-P4 EMAC + Waveshare PoE PHY)
- // TODO: mDNS _scrypted-viewport._tcp.local
- // TODO: HTTP server: /state /config /frame
- // TODO: MIPI-DSI panel init (800x480 IPS, default portrait 480x800)
- // TODO: JPEG decode -> framebuffer
- // TODO: Capacitive touch -> outbound /state POST
+ ESP_ERROR_CHECK(net_eth_init());
+ if (net_eth_wait_for_ip(30 * 1000) == ESP_OK) {
+ ESP_LOGI(TAG, "online at %s", net_eth_get_ip_str());
+ } else {
+ ESP_LOGW(TAG, "no DHCP lease after 30s, will keep retrying in the background");
+ }
+
+ // TODO M2: mDNS _scrypted-viewport._tcp.local
+ // TODO M2: HTTP server: GET /state
+ // TODO M3: MIPI-DSI panel init (800x480 IPS, default portrait 480x800)
+ // TODO M4: /config persistence (NVS)
+ // TODO M5: /frame JPEG decode -> framebuffer
+ // TODO M6: /state POST + idle timer
+ // TODO M7: Capacitive touch -> outbound /state POST
+ // TODO M8: Local screens (IP, loading) + BOOT button
}