声明android终端和嵌入式linux卡之间的USB接口

时间:2013-10-28 19:27:25

标签: android linux embedded usb

我希望我的问题不会奇怪或类似的事情但是我开始了一个关于android终端(目前是三星Galaxy S2但可能会改变)与嵌入式Linux卡(armadeus apf51-dev)之间对话的项目。也许是未来的覆盆子pi)。实际上,我在android终端上有一个应用程序,通过无线连接显示Linux嵌入式卡发送的速度。主要目标是通过USB连接更改此wifi连接。我的主要问题是实现管道的android端。我在FabianCook(Transferring data USB)找到了这个答案:

UsbDevice dev = sDevice;
        if (dev == null)
            return;
        UsbManager usbm = (UsbManager) getSystemService(USB_SERVICE);
        UsbDeviceConnection conn = usbm.openDevice(dev);
        l("Interface Count: " + dev.getInterfaceCount());
        l("Using "
                + String.format("%04X:%04X", sDevice.getVendorId(),
                        sDevice.getProductId()));

        if (!conn.claimInterface(dev.getInterface(0), true))
            return;

        conn.controlTransfer(0x40, 0, 0, 0, null, 0, 0);// reset
                                                        // mConnection.controlTransfer(0×40,
                                                        // 0, 1, 0, null, 0,
                                                        // 0);//clear Rx
        conn.controlTransfer(0x40, 0, 2, 0, null, 0, 0);// clear Tx
        conn.controlTransfer(0x40, 0x02, 0x0000, 0, null, 0, 0);// flow
                                                                // control
                                                                // none
        conn.controlTransfer(0x40, 0x03, 0x0034, 0, null, 0, 0);// baudrate
                                                                // 57600
        conn.controlTransfer(0x40, 0x04, 0x0008, 0, null, 0, 0);// data bit
                                                                // 8, parity
                                                                // none,
                                                                // stop bit
                                                                // 1, tx off

        UsbEndpoint epIN = null;
        UsbEndpoint epOUT = null;

        byte counter = 0;

        UsbInterface usbIf = dev.getInterface(0);
        for (int i = 0; i < usbIf.getEndpointCount(); i++) {
            l("EP: "
                    + String.format("0x%02X", usbIf.getEndpoint(i)
                            .getAddress()));
            if (usbIf.getEndpoint(i).getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {
                l("Bulk Endpoint");
                if (usbIf.getEndpoint(i).getDirection() == UsbConstants.USB_DIR_IN)
                    epIN = usbIf.getEndpoint(i);
                else
                    epOUT = usbIf.getEndpoint(i);
            } else {
                l("Not Bulk");
            }
        }

这非常有用,但我不明白什么是“sDevice”变量(第1行)。我想这是一个UsbDevice类实例,但我不知道这个变量是如何实例化的。也许有人可以指出我的好方法?

1 个答案:

答案 0 :(得分:0)

对我来说,看起来sDevice可能已被分配到其他地方可用,但原始分配不在原始线程的示例代码中 - 我不确定它会在哪里已经实例化,但它应该只是将一些连接的设备表示为UsbDevice对象。

sDevice源自UsbManager,您可以使用getDeviceList()函数获取已连接设备的列表

http://developer.android.com/reference/android/hardware/usb/UsbManager.html#getDeviceList()