android - 使用 ioctl 读取 USB 失败,原因为 "value too large for defined data type"

标签 android serial-port usb ioctl ftdi

我正在尝试使用 ioctl 和 USBDEVFS_BULK(在 Android 上 native )读取 USB。我使用的 USB 电缆包含一个 FTDI 芯片,并从 Arduino UNO 发送数据,该 Arduino UNO 写入串行。

Android 上的写入似乎总是成功,但读取要么总是失败,要么在一些条目上成功,然后不断失败,并显示“值对于定义的数据类型来说太大”(75)。我使用这个设置进行一个简单的 ping 测试:在 Android 上写入一个字节,一个序列号; Arduino 读取字节并回复相同的序列号。

我不完全确定这个错误的含义。我的理解是设备发送的数据多于我传递给 ioctl 的缓冲区可以容纳的数据。我已确保我的 Arduino 仅发送回 1 个字节,并且我预计 FTDI 会再发送 2 个字节,总共 3 个字节。即使增加缓冲区大小似乎也无法解决问题。

char mReadData[3];
struct usbdevfs_bulktransfer bulkTransferRead = {
    mReadEndpoint,  // Endpoint
    3,              // Length in bytes
    0,              // Timeout (ms)
    mReadData,     // Data
};

ret = ioctl(mFd, USBDEVFS_BULK, &bulkTransferRead);

这是我 native 使用的代码。如果我尝试使用 Android/Java 代码进行读取和写入(使用bulkTransfer()),我会看到与读取相同的间歇性问题。在 Android 上的 Java 中,我确保在任何写入/读取之前执行以下操作:

1) 复位引脚 2)设置波特率 3)8N1

任何人都可以帮我描述一下我对 FTDI/USB 的误解,或者解释一下关于“值对于定义的数据类型来说太大”的错误吗?

最佳答案

我找到了解决方案。看来这个错误 EOVERFLOW 可以通过指定等于端点最大数据包大小的缓冲区大小来修复。这解决了我的问题。

关于android - 使用 ioctl 读取 USB 失败,原因为 "value too large for defined data type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27370923/

相关文章:

java - 未使用 QAndroidJniObject 调用的三个函数之一

android - 为什么在声明 TextView 时使用括号

java - 如何在单击时在回收器 View 中展开布局

c - 在 Linux 中读取和写入相同文件描述符的问题

javascript - 从客户端 Web 浏览器与串行端口通信。

c# - 获取连接的 USB 设备列表

android - 如何从 json url 加载图表值并在 mpandroidchart 中显示

linux - 如何从 tty 读取串行输入并将其写入 Linux 中的文件?

usb - 如果我使用类驱动程序,为什么需要 USB VID/PID?

delphi - Delphi中使用VID和PID直接与USB设备进行数据交换