我可以以某种方式增加USB端点的大小吗?

时间:2018-08-24 03:50:43

标签: java android usb

这是我为打开USB设备而编写的代码

private void openDevice(UsbDevice device){
    Log.v(TAG, "USB device setup initiated");
    Map<String, UsbDevice> connectedDevices = usbManager.getDeviceList();

    if (!connectedDevices.isEmpty()) {
        if (device.getVendorId() == USB_VENDOR_ID && device.getProductId() == USB_PRODUCT_ID) {
            Log.i(TAG, "Device found: " + device.getDeviceName());
            Log.i(TAG, "Ready to open USB device connection");
            connection = usbManager.openDevice(this.device);
            intface = this.device.getInterface(0);
            connection.claimInterface(intface, true);
            USBisOpen = true;
            Log.v(TAG, "USB is Opened");
        }
    }
}

这是我为打开端点而编写的代码。

for(int i = 0; i < intface.getEndpointCount(); ++i){
    endpoint = intface.getEndpoint(i);
    if(endpoint.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK && endpoint.getDirection() == UsbConstants.USB_DIR_IN){
        Log.v(TAG, "endpoint index is " + i);
        break;
}
                        }
Log.v(TAG, "Transferable Buffer Size is: " + endpoint.getMaxPacketSize());

因此,我对'getMaxPacketSize()'方法感到好奇。 有什么办法可以操纵它的大小吗?我在类

中找到了该构造函数代码
public UsbEndpoint(int address, int attributes, int maxPacketSize, int interval) {
    mAddress = address;
    mAttributes = attributes;
    mMaxPacketSize = maxPacketSize;
    mInterval = interval;
}

但是似乎我不能像这样利用它

 UsbEndpoint endpoint = new UsbEndpoint(address, attributes, size, interval);

代码中的注释说“ UsbEndpoint仅应由UsbService实现实例化”,这与此有关吗?

感谢您阅读我的问题。

2 个答案:

答案 0 :(得分:1)

端点的最大大小是USB规范定义的参数。 您无法更改设备的端点大小(最大数据包大小)。根据规格,以下是最大尺寸-

USB 3.0

批量-1024字节
控制-512字节
同步-1024字节
中断-1024字节

USB 2.0 (高速)

批量-512字节
控制-64个字节
同步-1024字节
中断-1024字节

答案 1 :(得分:1)

端点的最大数据包大小是USB设备固件的属性。如果您能够修改固件,则可以更改最大数据包大小,但这可能是一个复杂的过程,通常对于大多数USB设备而言是不可能的。

典型的PC操作系统从设备读取USB描述符,以便找出每个端点的最大数据包大小。正确的USB驱动程序将使用这些最大数据包大小来确保与设备的通信正常进行。