kopia lustrzana https://github.com/mik3y/usb-serial-for-android
no code changes, just use normal line breaks
rodzic
5db45548ba
commit
fd551970be
|
@ -37,30 +37,30 @@ public class CdcAcmSerialDriver implements UsbSerialDriver {
|
||||||
public CdcAcmSerialDriver(UsbDevice device) {
|
public CdcAcmSerialDriver(UsbDevice device) {
|
||||||
mDevice = device;
|
mDevice = device;
|
||||||
mPorts = new ArrayList<>();
|
mPorts = new ArrayList<>();
|
||||||
int ports = countPorts(device);
|
int ports = countPorts(device);
|
||||||
for (int port = 0; port < ports; port++) {
|
for (int port = 0; port < ports; port++) {
|
||||||
mPorts.add(new CdcAcmSerialPort(mDevice, port));
|
mPorts.add(new CdcAcmSerialPort(mDevice, port));
|
||||||
}
|
}
|
||||||
if (mPorts.size() == 0) {
|
if (mPorts.size() == 0) {
|
||||||
mPorts.add(new CdcAcmSerialPort(mDevice, -1));
|
mPorts.add(new CdcAcmSerialPort(mDevice, -1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings({"unused"})
|
@SuppressWarnings({"unused"})
|
||||||
public static boolean probe(UsbDevice device) {
|
public static boolean probe(UsbDevice device) {
|
||||||
return countPorts(device) > 0;
|
return countPorts(device) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int countPorts(UsbDevice device) {
|
private static int countPorts(UsbDevice device) {
|
||||||
int controlInterfaceCount = 0;
|
int controlInterfaceCount = 0;
|
||||||
int dataInterfaceCount = 0;
|
int dataInterfaceCount = 0;
|
||||||
for (int i = 0; i < device.getInterfaceCount(); i++) {
|
for (int i = 0; i < device.getInterfaceCount(); i++) {
|
||||||
if (device.getInterface(i).getInterfaceClass() == UsbConstants.USB_CLASS_COMM)
|
if (device.getInterface(i).getInterfaceClass() == UsbConstants.USB_CLASS_COMM)
|
||||||
controlInterfaceCount++;
|
controlInterfaceCount++;
|
||||||
if (device.getInterface(i).getInterfaceClass() == UsbConstants.USB_CLASS_CDC_DATA)
|
if (device.getInterface(i).getInterfaceClass() == UsbConstants.USB_CLASS_CDC_DATA)
|
||||||
dataInterfaceCount++;
|
dataInterfaceCount++;
|
||||||
}
|
}
|
||||||
return Math.min(controlInterfaceCount, dataInterfaceCount);
|
return Math.min(controlInterfaceCount, dataInterfaceCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -141,7 +141,7 @@ public class CdcAcmSerialDriver implements UsbSerialDriver {
|
||||||
private void openInterface() throws IOException {
|
private void openInterface() throws IOException {
|
||||||
Log.d(TAG, "claiming interfaces, count=" + mDevice.getInterfaceCount());
|
Log.d(TAG, "claiming interfaces, count=" + mDevice.getInterfaceCount());
|
||||||
|
|
||||||
int rndisControlInterfaceCount = 0;
|
int rndisControlInterfaceCount = 0;
|
||||||
int controlInterfaceCount = 0;
|
int controlInterfaceCount = 0;
|
||||||
int dataInterfaceCount = 0;
|
int dataInterfaceCount = 0;
|
||||||
mControlInterface = null;
|
mControlInterface = null;
|
||||||
|
@ -156,22 +156,22 @@ public class CdcAcmSerialDriver implements UsbSerialDriver {
|
||||||
controlInterfaceCount++;
|
controlInterfaceCount++;
|
||||||
}
|
}
|
||||||
if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_CDC_DATA) {
|
if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_CDC_DATA) {
|
||||||
if(dataInterfaceCount == mPortNumber + rndisControlInterfaceCount) {
|
if(dataInterfaceCount == mPortNumber + rndisControlInterfaceCount) {
|
||||||
mDataInterface = usbInterface;
|
mDataInterface = usbInterface;
|
||||||
}
|
}
|
||||||
dataInterfaceCount++;
|
dataInterfaceCount++;
|
||||||
}
|
}
|
||||||
if (mDataInterface == null &&
|
if (mDataInterface == null &&
|
||||||
usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_WIRELESS_CONTROLLER &&
|
usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_WIRELESS_CONTROLLER &&
|
||||||
usbInterface.getInterfaceSubclass() == 1 &&
|
usbInterface.getInterfaceSubclass() == 1 &&
|
||||||
usbInterface.getInterfaceProtocol() == 3) {
|
usbInterface.getInterfaceProtocol() == 3) {
|
||||||
/*
|
/*
|
||||||
* RNDIS is a MSFT variant of CDC-ACM states the Linux kernel in rndis_host.c
|
* RNDIS is a MSFT variant of CDC-ACM states the Linux kernel in rndis_host.c
|
||||||
* The devices provide IAD descriptors to indicate consecutive interfaces belonging
|
* The devices provide IAD descriptors to indicate consecutive interfaces belonging
|
||||||
* together, but this is not exposed to Java. So simply skip related data interfaces.
|
* together, but this is not exposed to Java. So simply skip related data interfaces.
|
||||||
*/
|
*/
|
||||||
rndisControlInterfaceCount++;
|
rndisControlInterfaceCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(mControlInterface == null) {
|
if(mControlInterface == null) {
|
||||||
|
@ -306,9 +306,9 @@ public class CdcAcmSerialDriver implements UsbSerialDriver {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings({"unused"})
|
@SuppressWarnings({"unused"})
|
||||||
public static Map<Integer, int[]> getSupportedDevices() {
|
public static Map<Integer, int[]> getSupportedDevices() {
|
||||||
return new LinkedHashMap<>();
|
return new LinkedHashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue