ExpressLRS / Backpack

Firmware for ExpressLRS compatible backpacks
GNU General Public License v3.0
100 stars 73 forks source link

Make 1 in 10 HEARTBEATS from the MAV get broadcasted so new GCSes can find the Backpack #153

Open MUSTARDTIGERFPV opened 3 months ago

MUSTARDTIGERFPV commented 3 months ago

If we always unicast, then a newly-arrived GCS won't be able to connect since the MAVLink traffic will be going to the IP of the old GCS until we receive a heartbeat from the new GCS - which we won't because it's not seeing heartbeats. This broadcasts 1/10 heartbeats so that newly-joining GCSes can find the Backpack.

MUSTARDTIGERFPV commented 3 months ago

This causes the Pkts Lost counter in MP to count up incorrectly because we've broken packet ordering; I'll fix this.

jiri-jirus commented 1 month ago

multiple connection will work badly, because backpack devWIfi.cpp assumes that there will be only one client, which IP address gets stored into one variable "gcsIP" - which will get reset every time UDP packet is received from any host... so real speed will be appalling

MUSTARDTIGERFPV commented 1 month ago

multiple connection will work badly, because backpack devWIfi.cpp assumes that there will be only one client, which IP address gets stored into one variable "gcsIP" - which will get reset every time UDP packet is received from any host... so real speed will be appalling

Yes, that's exactly how multiple connections would work. The idea of this is to improve the process of switching GCSes without requiring a restart of the backpack.

jiri-jirus commented 1 month ago

well sorry, instead of multiple I mean "concurrent". which is, I hope, not supposed to work this way. btw, mavesp8266 works by having a timeout on heartbeat from GCS, which makes much more sense in this state of concurrent GCS support.