我正在使用Android Studio在Pico i.MX7Dual开发板上为Android Things目标进行编程。 我有一个USB串行转换器(“ USB到4端口串行”),我想与每个串行端口通信。 我试图使用USB Host API列出设备:
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
while(deviceIterator.hasNext()){
UsbDevice device = deviceIterator.next();
Log.d("USBList",device.toString());
}
我在Logcat中得到了它:
D/USBList: UsbDevice[mName=/dev/bus/usb/001/005,mVendorId=38672,mProductId=30784,mClass=255,mSubclass=0,mProtocol=255,mManufacturerName=null,mProductName=null,mVersion=2.0,mSerialNumber=null,mConfigurations=[
UsbConfiguration[mId=1,mName=null,mAttributes=160,mMaxPower=50,mInterfaces=[
UsbInterface[mId=0,mAlternateSetting=0,mName=null,mClass=255,mSubclass=0,mProtocol=255,mEndpoints=[
UsbEndpoint[mAddress=129,mAttributes=2,mMaxPacketSize=512,mInterval=255]
UsbEndpoint[mAddress=2,mAttributes=2,mMaxPacketSize=512,mInterval=255]
UsbEndpoint[mAddress=131,mAttributes=2,mMaxPacketSize=512,mInterval=255]
UsbEndpoint[mAddress=4,mAttributes=2,mMaxPacketSize=512,mInterval=255]
UsbEndpoint[mAddress=133,mAttributes=2,mMaxPacketSize=512,mInterval=255]
UsbEndpoint[mAddress=6,mAttributes=2,mMaxPacketSize=512,mInterval=255]
UsbEndpoint[mAddress=135,mAttributes=2,mMaxPacketSize=512,mInterval=255]
UsbEndpoint[mAddress=8,mAttributes=2,mMaxPacketSize=512,mInterval=255]
UsbEndpoint[mAddress=137,mAttributes=3,mMaxPacketSize=16,mInterval=5]]]]
如果我理解的话,我必须通过UsbInterface与UsbEndpoint通信,但是我只有4个串行端口,但有9个UsbEndpoints。
所以我不知道下一步该如何确定与之通信的良好UsbEndPoint。
谢谢。
答案 0 :(得分:2)
Android Things Peripheral I / O API支持大多数USB串行转换器,因此,我建议您检查的第一件事是外围设备列表下的转换器是否显示为UartDevice
:< / p>
PeripheralManager.getInstance().getUartDeviceList()
设备通常会以USB1-1:1.0
之类的名字显示。
如果该子系统不支持您的设备,则可能需要更深入地研究USB API。让我们进一步解码端点描述符输出。您的设备具有8个类型为“批量”(mAttributes=2
)的终结点,以及一个类型为“中断”(mAttributes=3
)的终结点。每个串行通道都将成批端点配对(一个用于输入,一个用于输出)。您需要确定确定每个端点的方向值(未打印在日志中)。它们列出的顺序最有可能表明每个频道的配对。
然后,您需要联系USB设备的制造商,并找到描述其用于传输数据的协议的数据表。设备/接口类均为0xFF
(255
),表示“特定于供应商”。从本质上讲,这意味着它们不符合标准的USB设备类,并且需要提供有关协议的文档。