diff --git a/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/ChromeCcdSerialDriver.java b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/ChromeCcdSerialDriver.java new file mode 100644 index 0000000..292f34c --- /dev/null +++ b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/ChromeCcdSerialDriver.java @@ -0,0 +1,96 @@ +package com.hoho.android.usbserial.driver; + +import android.hardware.usb.UsbConstants; +import android.hardware.usb.UsbDevice; +import android.hardware.usb.UsbEndpoint; +import android.hardware.usb.UsbInterface; +import android.util.Log; + +import java.io.IOException; +import java.util.Collections; +import java.util.EnumSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.ArrayList; + +public class ChromeCcdSerialDriver implements UsbSerialDriver{ + + private final String TAG = ChromeCcdSerialDriver.class.getSimpleName(); + + private final UsbDevice mDevice; + private final List mPorts; + + @Override + public UsbDevice getDevice() { + return mDevice; + } + + @Override + public List getPorts() { + return mPorts; + } + + public ChromeCcdSerialDriver(UsbDevice mDevice) { + this.mDevice = mDevice; + mPorts = new ArrayList(); + for (int i = 0; i < 3; i++) + mPorts.add(new ChromeCcdSerialPort(mDevice, i)); + } + + public class ChromeCcdSerialPort extends CommonUsbSerialPort { + private UsbInterface mDataInterface; + + public ChromeCcdSerialPort(UsbDevice device, int portNumber) { + super(device, portNumber); + } + + @Override + protected void openInt() throws IOException { + Log.d(TAG, "claiming interfaces, count=" + mDevice.getInterfaceCount()); + mDataInterface = mDevice.getInterface(mPortNumber); + if (!mConnection.claimInterface(mDataInterface, true)) { + throw new IOException("Could not claim shared control/data interface"); + } + Log.d(TAG, "endpoint count=" + mDataInterface.getEndpointCount()); + for (int i = 0; i < mDataInterface.getEndpointCount(); ++i) { + UsbEndpoint ep = mDataInterface.getEndpoint(i); + if ((ep.getDirection() == UsbConstants.USB_DIR_IN) && (ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK)) { + mReadEndpoint = ep; + } else if ((ep.getDirection() == UsbConstants.USB_DIR_OUT) && (ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK)) { + mWriteEndpoint = ep; + } + } + } + + @Override + protected void closeInt() { + try { + mConnection.releaseInterface(mDataInterface); + } catch(Exception ignored) {} + } + + @Override + public UsbSerialDriver getDriver() { + return ChromeCcdSerialDriver.this; + } + + @Override + public EnumSet getControlLines() throws IOException { + return EnumSet.noneOf(ControlLine.class); + } + + @Override + public EnumSet getSupportedControlLines() throws IOException { + return EnumSet.noneOf(ControlLine.class); + } + } + + public static Map getSupportedDevices() { + final Map supportedDevices = new LinkedHashMap<>(); + supportedDevices.put(UsbId.VENDOR_GOOGLE, new int[]{ + UsbId.GOOGLE_CR50, + }); + return supportedDevices; + } +} diff --git a/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/UsbId.java b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/UsbId.java index b63c9ce..b265628 100644 --- a/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/UsbId.java +++ b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/UsbId.java @@ -37,6 +37,9 @@ public final class UsbId { public static final int PROLIFIC_PL2303GE = 0x23e3; // " public static final int PROLIFIC_PL2303GS = 0x23f3; // " + public static final int VENDOR_GOOGLE = 0x18d1; + public static final int GOOGLE_CR50 = 0x5014; + public static final int VENDOR_QINHENG = 0x1a86; public static final int QINHENG_CH340 = 0x7523; public static final int QINHENG_CH341A = 0x5523; diff --git a/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/UsbSerialProber.java b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/UsbSerialProber.java index ce02458..cba2bdc 100644 --- a/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/UsbSerialProber.java +++ b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/UsbSerialProber.java @@ -38,6 +38,7 @@ public class UsbSerialProber { probeTable.addDriver(ProlificSerialDriver.class); probeTable.addDriver(Ch34xSerialDriver.class); probeTable.addDriver(GsmModemSerialDriver.class); + probeTable.addDriver(ChromeCcdSerialDriver.class); return probeTable; }