From aee43c6548c6a5e2329119f6c6c1a142baba2eca Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Fri, 7 Aug 2026 18:24:23 +0300 Subject: [PATCH] Allow hot reconnection from another gcs over wifi Switch back to udp broadcasting if no messages from gcs for 5 seconds --- flix/mavlink.ino | 6 +++--- flix/wifi.ino | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/flix/mavlink.ino b/flix/mavlink.ino index d73203b..5b4f023 100644 --- a/flix/mavlink.ino +++ b/flix/mavlink.ino @@ -17,7 +17,7 @@ Rate telemetryRC(10); Rate telemetryMotors(10); Rate telemetryIMU(15); -bool mavlinkConnected = false; +float mavlinkTime = NAN; // time of last received message String mavlinkPrintBuffer; void processMavlink() { @@ -40,7 +40,7 @@ void sendMavlink() { sendMessage(&msg); } - if (!mavlinkConnected) return; // send only heartbeat until connected + if (!valid(mavlinkTime)) return; // send only heartbeat until connected if (telemetrySlow) { mavlink_msg_extended_sys_state_pack(mavlinkSysId, MAV_COMP_ID_AUTOPILOT1, &msg, @@ -101,7 +101,7 @@ void receiveMavlink() { mavlink_status_t status; for (int i = 0; i < len; i++) { if (mavlink_parse_char(MAVLINK_COMM_0, buf[i], &msg, &status)) { - mavlinkConnected = true; + mavlinkTime = t; handleMavlink(&msg); } } diff --git a/flix/wifi.ino b/flix/wifi.ino index f316f83..253a1a0 100644 --- a/flix/wifi.ino +++ b/flix/wifi.ino @@ -64,7 +64,7 @@ void sendWiFi(const uint8_t *buf, int len) { if (WiFi.softAPgetStationNum() == 0 && !WiFi.isConnected()) return; - udp.beginPacket(udpRemoteIP, udpRemotePort); + udp.beginPacket(t - mavlinkTime < 5 ? udpRemoteIP : IPAddress(255, 255, 255, 255), udpRemotePort); // broadcast if lost connection udp.write(buf, len); udp.endPacket(); } @@ -113,7 +113,7 @@ void printWiFiInfo() { } else { print("Mode: Disabled\n"); } - print("MAVLink connected: %d\n", mavlinkConnected); + print("MAVLink connected: %d\n", valid(mavlinkTime)); } void configWiFi(int mode, const char *first, const char *second) {