Android USB не может прочитать полные данные через bulkTransfer

Я использую Android USB Host API для отправки и получения данных с помощью FT232. Я использую два потока для отправки и чтения. Я могу отправлять и получать данные, но прочитанные данные не равны отправленным данным. Например, когда я отправляю byte[1, 2, 3, 4, 5]. Прочитанные данные иногда представляют собой byte[1, 2, 5]. Иногда можно прочитать 5 байтов, но иногда некоторые байты теряются. Прикреплен код, который я использую.

Часть настройки:

HashMap<String, UsbDevice> list = mUsbManager.getDeviceList();
Iterator<UsbDevice> iterator = list.values().iterator();
while(iterator.hasNext()) {
    UsbDevice device = iterator.next();
    if (device.getInterfaceCount() == 1) {
        mInterface = device.getInterface(0);
        for (int i = 0; i < mInterface.getEndpointCount(); i++) {
            if (mInterface.getEndpoint(i).getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {
                if (mInterface.getEndpoint(i).getDirection() == UsbConstants.USB_DIR_IN) {
                    mEndpointIn = mInterface.getEndpoint(i);
                } else {
                    mEndpointOut = mInterface.getEndpoint(i);
                }
             }
                            }
                    }
                }
            }
        }

Отправить часть:

UsbDeviceConnection connection = mUsbManager.openDevice(device);
if (connection == null) {
    Log.e(TAG, "Connection terminated");
    return;
}
byte[] bytes = new byte[1, 2, 3, 4, 5];
boolean claimed = connection.claimInterface(mInterface, true);
if (claimed) {
    connection.controlTransfer(0x40, 0x03, 0x0034, 0, null, 0, 0); // baud rate 57600
    connection.controlTransfer(0x40, 0x04, 0x0008, 0, null, 0, 0); // 8-N-1
    int sentLength = connection.bulkTransfer(mEndpointOut, bytes, bytes.length, 100);
    connection.releaseInterface(mInterface);
    connection.close();
}

Читать часть:

UsbDeviceConnection connection = mUsbManager.openDevice(device);
if (connection == null) {
    Log.e(TAG, "Connection terminated");
    return;
}
byte[] inData = new byte[64];
boolean claimed = connection.claimInterface(mInterface, true);
if (claimed) {
    connection.controlTransfer(0x40, 0x03, 0x0034, 0, null, 0, 0); // baud rate 57600
    connection.controlTransfer(0x40, 0x04, 0x0008, 0, null, 0, 0); // 8-N-1
    int readLength = connection.bulkTransfer(mEndpointIn, inData, inData.length, 100);
    connection.releaseInterface(mInterface);
    connection.close();
    // 'result' is the data I want, the first 2 bytes are status bytes so being removed
    byte[] result = new byte[inData.length - 2];
    System.arrayCopy(inData, 2, result, 0, inData.length - 2);
}

person chengsam    schedule 08.06.2016    source источник


Ответы (1)


Я нашел библиотеку для Android, которая решила эту проблему. Надеюсь, это поможет любому, у кого есть такая же проблема.

UsbSerial

person chengsam    schedule 07.07.2016