Allow hot reconnection from another gcs over wifi

Switch back to udp broadcasting if no messages from gcs for 5 seconds
This commit is contained in:
Oleg Kalachev
2026-08-07 18:24:23 +03:00
parent 5f9aae62b9
commit 90b506e084
2 changed files with 5 additions and 5 deletions
+3 -3
View File
@@ -18,7 +18,7 @@ Rate telemetryMotors(10);
Rate telemetryIMU(15); Rate telemetryIMU(15);
Rate telemetryTopic(10); Rate telemetryTopic(10);
bool mavlinkConnected = false; float mavlinkTime = NAN; // time of last received message
String mavlinkPrintBuffer; String mavlinkPrintBuffer;
void processMavlink() { void processMavlink() {
@@ -41,7 +41,7 @@ void sendMavlink() {
sendMessage(&msg); sendMessage(&msg);
} }
if (!mavlinkConnected) return; // send only heartbeat until connected if (!valid(mavlinkTime)) return; // send only heartbeat until connected
if (telemetrySlow) { if (telemetrySlow) {
mavlink_msg_extended_sys_state_pack(mavlinkSysId, MAV_COMP_ID_AUTOPILOT1, &msg, mavlink_msg_extended_sys_state_pack(mavlinkSysId, MAV_COMP_ID_AUTOPILOT1, &msg,
@@ -128,7 +128,7 @@ void receiveMavlink() {
mavlink_status_t status; mavlink_status_t status;
for (int i = 0; i < len; i++) { for (int i = 0; i < len; i++) {
if (mavlink_parse_char(MAVLINK_COMM_0, buf[i], &msg, &status)) { if (mavlink_parse_char(MAVLINK_COMM_0, buf[i], &msg, &status)) {
mavlinkConnected = true; mavlinkTime = t;
handleMavlink(&msg); handleMavlink(&msg);
} }
} }
+2 -2
View File
@@ -64,7 +64,7 @@ void sendWiFi(const uint8_t *buf, int len) {
if (WiFi.softAPgetStationNum() == 0 && !WiFi.isConnected()) return; 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.write(buf, len);
udp.endPacket(); udp.endPacket();
} }
@@ -113,7 +113,7 @@ void printWiFiInfo() {
} else { } else {
print("Mode: Disabled\n"); 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) { void configWiFi(int mode, const char *first, const char *second) {