public void SendSerialControl(SERIAL_CONTROL_DEV port, ushort timeoutms, byte[] data, uint baudrate = 0,
bool close = false)
{
mavlink_serial_control_t ctl = new mavlink_serial_control_t();
ctl.baudrate = baudrate; // no change
ctl.device = (byte) port;
ctl.timeout = timeoutms;
ctl.data = new byte[70];
ctl.count = 0;
if (close)
{
ctl.flags = 0;
}
else
{
ctl.flags = (byte) SERIAL_CONTROL_FLAG.EXCLUSIVE; // | SERIAL_CONTROL_FLAG.MULTI);
}
if (data != null && data.Length != 0)
{
int packets = (data.Length/70) + 1;
int len = data.Length;
while (len > 0)
{
if (packets == 1)
ctl.flags |= (byte) SERIAL_CONTROL_FLAG.RESPOND;
byte n = (byte) Math.Min(70, len);
ctl.count = n;
Array.Copy(data, data.Length - len, ctl.data, 0, n);
// dont flood the port
System.Threading.Thread.Sleep(10);
generatePacket((byte) MAVLINK_MSG_ID.SERIAL_CONTROL, ctl);
len -= n;
packets--;
}
}
else
{
if (!close)
ctl.flags |= (byte) SERIAL_CONTROL_FLAG.RESPOND | (byte) SERIAL_CONTROL_FLAG.MULTI;
generatePacket((byte) MAVLINK_MSG_ID.SERIAL_CONTROL, ctl);
}
}