xamarin 通过USB OTG接收Android数据

dbf7pr2w  于 2023-06-03  发布在  Android
关注(0)|答案(1)|浏览(101)

我有一个USB设备连接到手机,设备向手机发送数据。问题是手机通过usb不断接收(每16毫秒)2字节的数据(1,96),但不是设备上的软件发送的。如果设备发送消息,则这2个字节包含在消息的开头。因此,如果设备发送这样的消息:2 5 4 1 3它是这样到达的:196 2 5 4 1 3.这使得数据处理变得非常困难,特别是如果,例如,由于接收到的消息的长度是不可预测的,所以我必须用计时器来处理它,所以包是碎片的。
我读了一些关于FTDI设备的文章,我发现了这个:**每个数据包的前2个字节用作驱动程序的状态字节。此状态每16毫秒发送一次,即使设备中没有数据也是如此。**现在我知道这两个字节是什么,但我可以以某种方式禁用它吗?
我用于数据接收的代码:

private void ReceiveDataThread()
{
byte[] buffer = new byte[BUFFER_SIZE];

while (isRunning)
{
    int receivedBytes = usbConnection.BulkTransfer(usbEndpointIn, buffer, BUFFER_SIZE, 0);
    if (receivedBytes > 0)
    {
            byte[] receivedData = new byte[receivedBytes];
            Array.Copy(buffer, receivedData, receivedBytes);
            DataReceived?.Invoke(this, receivedData);
    }
}
}
ds97pgxw

ds97pgxw1#

根据snachmsm,因为你用途:

Array.Copy(buffer, receivedData, receivedBytes);

它复制整个数据。你可以这样修改它:

if (receivedBytes > 2)
{
    byte[] receivedData = new byte[receivedBytes-2];
    Array.Copy(buffer, 2, receivedData, 0, receivedBytes-2);
    ...
}

它可以删除前2个字节并将缓冲区从索引2复制到receivedData。

相关问题