2017-09-08 233 views
1

我正在开发基于Am3352的主板上的应用程序,需要通过USB与Android设备(平板电脑/手机)进行通信。我需要通过USB来交换一些自定义数据字节(只有我的应用程序和运行在android设备上的应用程序才能理解)。通过USB与Android设备通信

当我将android平板电脑连接到我的AM3352主板时,我在VID PID等控制台上获取打印,表明设备正在检测到。我需要知道的是,如何让内核为设备分配一个开发文件。例如,当我们将USB连接到串行转换器时,我们将得到/ dev/ttyUSBx文件,以便我们可以打开它并写入/读取到该文件。类似的,可以直接连接USB吗?

我期待生成一个/ dev/ttyACMx设备文件,以便我可以写入和读取它。内核中启用了CDC/Modem支持。 (我不知道这是否会有所帮助,但无论如何只是试了一下)。

请让我知道如何获得与设备关联的设备文件名,以便我可以读取和写入设备。

回答

1

首先你必须知道你的android设备是什么样的USB类型。如何在Linux机器上识别此设备?作为大容量存储还是CDC或其他?然后你可以尝试与它沟通。而且您不必在/ dev /中通过USB创建任何设备来与android进行通信。看看libusb库。

在你的例子中 -/dev/ttyUSBx被创建是因为内核知道这是通信设备类。所以你也需要知道这个Android设备是什么样的USB设备。

+0

我的理解是,Android设备可以在不同的模式下运行,对吧?当连接USB时,平板电脑上会显示一个弹出窗口,询问要使用哪种模式。选择相机(PTP)时,我可以将设备检测为LIB_CLASS_PTP(0x06),当选择Buit-In CD选项它被检测为LIB_CLASS_MASS_STORAGE(0x08)。 –

+0

我需要知道是否有任何机制使其作为通信类设备(0x02)或数据类设备(0x0A)。如果是这样,我认为,当设备连接到/ dev/ttyUSBx或/ dev/ttyACMx文件时,会自动生成哪些可用于fopen,读写功能的通信。这可能吗 ? –

+0

如果我正确理解你 - 你想通过你自己的协议通过USB进行通信。首先 - 您需要将平板电脑用作通讯设备,并且可以在内核的Android中完成。要做到这一点,你可以看看Android内核的gadget驱动程序,如果有任何(可能是G_SERIAL),可以用作这种类型的设备。然后,您需要编写Android程序来维护此类设备。 – user2699113