BeyondRobotix / mavesp8266

ESP8266 WiFi Access Point and MAVLink Bridge
Other
182 stars 173 forks source link

UDP buffer management. #19

Closed dogmaphobic closed 8 years ago

dogmaphobic commented 8 years ago

This is a first step at handling the high data loss on the UDP link.

The low level UDP stack now properly reports how many bytes were actually written to its TX buffer. Before these changes, there was no indication of buffer overflow and packets would simply go into the bit bucket once the buffers were full. With that information, and the use of much larger FIFO buffers, the data loss has been greatly minimized. Ideally, it would be great if we had access to the TX buffer status before sending any data but this is better than nothing.

For now, when the code notices the buffer is full (after a failed write), it waits a bit and tries again (once) to send the remaining data within that one message. I can't wait around long otherwise we start losing data on the UART link and the existing code can't handle a partially sent MavLink message. It then bails out and stops trying to send the remaining messages until the next loop cycle.

With these changes, I brought the drop count down from around 20% under high stress to less than 1%.

I've put an issue requesting access to the buffer status (https://github.com/esp8266/Arduino/issues/1988).