CheBuzz, on 05 September 2010 - 05:48 PM, said:
The problem I see with throttling packets on the main board is that it may then begin dropping packets when there is still bandwidth available. The modem would need to be able to communicate to the main board when it is sending too much data, as has been stated.
I'm not sure that's entirely true. In either case the modem is measuring link quality based on TX errors (I assume that's the metric you're using Pip?). At that point it's simply _who_ decides what to send. It just strikes me that the main board has more context to determine this.
Quote
But this then limits the auto-scaling to the pipXtreme as commercial data modems won't be sending such information.
I bet something is available from XBee when in API mode - but that would require having PIOS_COM know something about that which will need to be implemented cleanly. The PipXtreme only option would be to inject a fake UAVObject into the stream and pretend it comes from GCS. I sort of like that anyway - it's not unreasonable that more advanced features like automatic packet throttling be available on more advanced hardware... The object could be sent both ways too so GCS and Flight both know about it.
Quote
The only true advantage I could see is if CPU time becomes a limited resource on the main board, having throttling logic on the modem would free up some CPU cycles, though I imagine the difference wouldn't be all that much.
Well I think the OP context is another advantage, as well as whenever OP firmware changes the PipXtreme firmware doesn't have to.
Quote
Also, I second the notion of implementing a link quality message.
As a UAVObject or as something else in the serial data? The later would be trickier but open up XBee API mode and thus more support. This is redundant with my previous point, but right now PIOS_COM is used as a HAL that sends through multiple paths (debug uarts, HID, modem...). I suppose we could make another target be "XBee API on port 0", "PipXtreme API mode on port 0", etc. However it opens up a can of worms if you get that setting wrong then have to fall back to USB to save the right value to SD, etc...
Just requires some thought if not a UAVObject. That, I don't see any problem as long as Pip is UAV aware. Detail: UAVTalk doesn't specify a data size, so this means Pip would either 1) need to be updated whenever objects change - ick 2) frame on a set of rarely changing objects and insert after them 3) modify UAVTalk to include a size field. I'm personally in favor of the later. I add it by hand in the logging right now because you need that to deal with any incompatible objects.