Merge "Added missing USB device descriptor fields needed for intent filters"
This commit is contained in:
@@ -11027,7 +11027,10 @@ package android.hardware.usb {
|
|||||||
method public int getDeviceSubclass();
|
method public int getDeviceSubclass();
|
||||||
method public android.hardware.usb.UsbInterface getInterface(int);
|
method public android.hardware.usb.UsbInterface getInterface(int);
|
||||||
method public int getInterfaceCount();
|
method public int getInterfaceCount();
|
||||||
|
method public java.lang.String getManufacturerName();
|
||||||
method public int getProductId();
|
method public int getProductId();
|
||||||
|
method public java.lang.String getProductName();
|
||||||
|
method public java.lang.String getSerialNumber();
|
||||||
method public int getVendorId();
|
method public int getVendorId();
|
||||||
method public void writeToParcel(android.os.Parcel, int);
|
method public void writeToParcel(android.os.Parcel, int);
|
||||||
field public static final android.os.Parcelable.Creator CREATOR;
|
field public static final android.os.Parcelable.Creator CREATOR;
|
||||||
|
|||||||
@@ -46,6 +46,9 @@ public class UsbDevice implements Parcelable {
|
|||||||
private static final String TAG = "UsbDevice";
|
private static final String TAG = "UsbDevice";
|
||||||
|
|
||||||
private final String mName;
|
private final String mName;
|
||||||
|
private final String mManufacturerName;
|
||||||
|
private final String mProductName;
|
||||||
|
private final String mSerialNumber;
|
||||||
private final int mVendorId;
|
private final int mVendorId;
|
||||||
private final int mProductId;
|
private final int mProductId;
|
||||||
private final int mClass;
|
private final int mClass;
|
||||||
@@ -58,13 +61,18 @@ public class UsbDevice implements Parcelable {
|
|||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public UsbDevice(String name, int vendorId, int productId,
|
public UsbDevice(String name, int vendorId, int productId,
|
||||||
int Class, int subClass, int protocol, Parcelable[] interfaces) {
|
int Class, int subClass, int protocol,
|
||||||
|
String manufacturerName, String productName, String serialNumber,
|
||||||
|
Parcelable[] interfaces) {
|
||||||
mName = name;
|
mName = name;
|
||||||
mVendorId = vendorId;
|
mVendorId = vendorId;
|
||||||
mProductId = productId;
|
mProductId = productId;
|
||||||
mClass = Class;
|
mClass = Class;
|
||||||
mSubclass = subClass;
|
mSubclass = subClass;
|
||||||
mProtocol = protocol;
|
mProtocol = protocol;
|
||||||
|
mManufacturerName = manufacturerName;
|
||||||
|
mProductName = productName;
|
||||||
|
mSerialNumber = serialNumber;
|
||||||
mInterfaces = interfaces;
|
mInterfaces = interfaces;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,6 +87,33 @@ public class UsbDevice implements Parcelable {
|
|||||||
return mName;
|
return mName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the manufacturer name of the device.
|
||||||
|
*
|
||||||
|
* @return the manufacturer name
|
||||||
|
*/
|
||||||
|
public String getManufacturerName() {
|
||||||
|
return mManufacturerName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the product name of the device.
|
||||||
|
*
|
||||||
|
* @return the product name
|
||||||
|
*/
|
||||||
|
public String getProductName() {
|
||||||
|
return mProductName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the serial number of the device.
|
||||||
|
*
|
||||||
|
* @return the serial number name
|
||||||
|
*/
|
||||||
|
public String getSerialNumber() {
|
||||||
|
return mSerialNumber;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a unique integer ID for the device.
|
* Returns a unique integer ID for the device.
|
||||||
* This is a convenience for clients that want to use an integer to represent
|
* This is a convenience for clients that want to use an integer to represent
|
||||||
@@ -176,7 +211,8 @@ public class UsbDevice implements Parcelable {
|
|||||||
return "UsbDevice[mName=" + mName + ",mVendorId=" + mVendorId +
|
return "UsbDevice[mName=" + mName + ",mVendorId=" + mVendorId +
|
||||||
",mProductId=" + mProductId + ",mClass=" + mClass +
|
",mProductId=" + mProductId + ",mClass=" + mClass +
|
||||||
",mSubclass=" + mSubclass + ",mProtocol=" + mProtocol +
|
",mSubclass=" + mSubclass + ",mProtocol=" + mProtocol +
|
||||||
",mInterfaces=" + mInterfaces + "]";
|
",mManufacturerName=" + mManufacturerName + ",mProductName=" + mProductName +
|
||||||
|
",mSerialNumber=" + mSerialNumber + ",mInterfaces=" + mInterfaces + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final Parcelable.Creator<UsbDevice> CREATOR =
|
public static final Parcelable.Creator<UsbDevice> CREATOR =
|
||||||
@@ -188,8 +224,12 @@ public class UsbDevice implements Parcelable {
|
|||||||
int clasz = in.readInt();
|
int clasz = in.readInt();
|
||||||
int subClass = in.readInt();
|
int subClass = in.readInt();
|
||||||
int protocol = in.readInt();
|
int protocol = in.readInt();
|
||||||
|
String manufacturerName = in.readString();
|
||||||
|
String productName = in.readString();
|
||||||
|
String serialNumber = in.readString();
|
||||||
Parcelable[] interfaces = in.readParcelableArray(UsbInterface.class.getClassLoader());
|
Parcelable[] interfaces = in.readParcelableArray(UsbInterface.class.getClassLoader());
|
||||||
return new UsbDevice(name, vendorId, productId, clasz, subClass, protocol, interfaces);
|
return new UsbDevice(name, vendorId, productId, clasz, subClass, protocol,
|
||||||
|
manufacturerName, productName, serialNumber, interfaces);
|
||||||
}
|
}
|
||||||
|
|
||||||
public UsbDevice[] newArray(int size) {
|
public UsbDevice[] newArray(int size) {
|
||||||
@@ -208,6 +248,9 @@ public class UsbDevice implements Parcelable {
|
|||||||
parcel.writeInt(mClass);
|
parcel.writeInt(mClass);
|
||||||
parcel.writeInt(mSubclass);
|
parcel.writeInt(mSubclass);
|
||||||
parcel.writeInt(mProtocol);
|
parcel.writeInt(mProtocol);
|
||||||
|
parcel.writeString(mManufacturerName);
|
||||||
|
parcel.writeString(mProductName);
|
||||||
|
parcel.writeString(mSerialNumber);
|
||||||
parcel.writeParcelableArray(mInterfaces, 0);
|
parcel.writeParcelableArray(mInterfaces, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -96,6 +96,7 @@ public class UsbHostManager {
|
|||||||
/* Called from JNI in monitorUsbHostBus() to report new USB devices */
|
/* Called from JNI in monitorUsbHostBus() to report new USB devices */
|
||||||
private void usbDeviceAdded(String deviceName, int vendorID, int productID,
|
private void usbDeviceAdded(String deviceName, int vendorID, int productID,
|
||||||
int deviceClass, int deviceSubclass, int deviceProtocol,
|
int deviceClass, int deviceSubclass, int deviceProtocol,
|
||||||
|
String manufacturerName, String productName, String serialNumber,
|
||||||
/* array of quintuples containing id, class, subclass, protocol
|
/* array of quintuples containing id, class, subclass, protocol
|
||||||
and number of endpoints for each interface */
|
and number of endpoints for each interface */
|
||||||
int[] interfaceValues,
|
int[] interfaceValues,
|
||||||
@@ -151,7 +152,8 @@ public class UsbHostManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
UsbDevice device = new UsbDevice(deviceName, vendorID, productID,
|
UsbDevice device = new UsbDevice(deviceName, vendorID, productID,
|
||||||
deviceClass, deviceSubclass, deviceProtocol, interfaces);
|
deviceClass, deviceSubclass, deviceProtocol,
|
||||||
|
manufacturerName, productName, serialNumber, interfaces);
|
||||||
mDevices.put(deviceName, device);
|
mDevices.put(deviceName, device);
|
||||||
getCurrentSettings().deviceAttached(device);
|
getCurrentSettings().deviceAttached(device);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,13 +108,23 @@ class UsbSettingsManager {
|
|||||||
public final int mSubclass;
|
public final int mSubclass;
|
||||||
// USB device protocol (or -1 for unspecified)
|
// USB device protocol (or -1 for unspecified)
|
||||||
public final int mProtocol;
|
public final int mProtocol;
|
||||||
|
// USB device manufacturer name string (or null for unspecified)
|
||||||
|
public final String mManufacturerName;
|
||||||
|
// USB device product name string (or null for unspecified)
|
||||||
|
public final String mProductName;
|
||||||
|
// USB device serial number string (or null for unspecified)
|
||||||
|
public final String mSerialNumber;
|
||||||
|
|
||||||
public DeviceFilter(int vid, int pid, int clasz, int subclass, int protocol) {
|
public DeviceFilter(int vid, int pid, int clasz, int subclass, int protocol,
|
||||||
|
String manufacturer, String product, String serialnum) {
|
||||||
mVendorId = vid;
|
mVendorId = vid;
|
||||||
mProductId = pid;
|
mProductId = pid;
|
||||||
mClass = clasz;
|
mClass = clasz;
|
||||||
mSubclass = subclass;
|
mSubclass = subclass;
|
||||||
mProtocol = protocol;
|
mProtocol = protocol;
|
||||||
|
mManufacturerName = manufacturer;
|
||||||
|
mProductName = product;
|
||||||
|
mSerialNumber = serialnum;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DeviceFilter(UsbDevice device) {
|
public DeviceFilter(UsbDevice device) {
|
||||||
@@ -123,6 +133,9 @@ class UsbSettingsManager {
|
|||||||
mClass = device.getDeviceClass();
|
mClass = device.getDeviceClass();
|
||||||
mSubclass = device.getDeviceSubclass();
|
mSubclass = device.getDeviceSubclass();
|
||||||
mProtocol = device.getDeviceProtocol();
|
mProtocol = device.getDeviceProtocol();
|
||||||
|
mManufacturerName = device.getManufacturerName();
|
||||||
|
mProductName = device.getProductName();
|
||||||
|
mSerialNumber = device.getSerialNumber();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DeviceFilter read(XmlPullParser parser)
|
public static DeviceFilter read(XmlPullParser parser)
|
||||||
@@ -132,27 +145,52 @@ class UsbSettingsManager {
|
|||||||
int deviceClass = -1;
|
int deviceClass = -1;
|
||||||
int deviceSubclass = -1;
|
int deviceSubclass = -1;
|
||||||
int deviceProtocol = -1;
|
int deviceProtocol = -1;
|
||||||
|
String manufacturerName = null;
|
||||||
|
String productName = null;
|
||||||
|
String serialNumber = null;
|
||||||
|
|
||||||
int count = parser.getAttributeCount();
|
int count = parser.getAttributeCount();
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
String name = parser.getAttributeName(i);
|
String name = parser.getAttributeName(i);
|
||||||
// All attribute values are ints
|
String value = parser.getAttributeValue(i);
|
||||||
int value = Integer.parseInt(parser.getAttributeValue(i));
|
// Attribute values are ints or strings
|
||||||
|
if ("manufacturer-name".equals(name)) {
|
||||||
if ("vendor-id".equals(name)) {
|
manufacturerName = value;
|
||||||
vendorId = value;
|
} else if ("product-name".equals(name)) {
|
||||||
} else if ("product-id".equals(name)) {
|
productName = value;
|
||||||
productId = value;
|
} else if ("serial-number".equals(name)) {
|
||||||
} else if ("class".equals(name)) {
|
serialNumber = value;
|
||||||
deviceClass = value;
|
} else {
|
||||||
} else if ("subclass".equals(name)) {
|
int intValue = -1;
|
||||||
deviceSubclass = value;
|
int radix = 10;
|
||||||
} else if ("protocol".equals(name)) {
|
if (value != null && value.length() > 2 && value.charAt(0) == '0' &&
|
||||||
deviceProtocol = value;
|
(value.charAt(1) == 'x' || value.charAt(1) == 'X')) {
|
||||||
|
// allow hex values starting with 0x or 0X
|
||||||
|
radix = 16;
|
||||||
|
value = value.substring(2);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
intValue = Integer.parseInt(value, radix);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
Slog.e(TAG, "invalid number for field " + name, e);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ("vendor-id".equals(name)) {
|
||||||
|
vendorId = intValue;
|
||||||
|
} else if ("product-id".equals(name)) {
|
||||||
|
productId = intValue;
|
||||||
|
} else if ("class".equals(name)) {
|
||||||
|
deviceClass = intValue;
|
||||||
|
} else if ("subclass".equals(name)) {
|
||||||
|
deviceSubclass = intValue;
|
||||||
|
} else if ("protocol".equals(name)) {
|
||||||
|
deviceProtocol = intValue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new DeviceFilter(vendorId, productId,
|
return new DeviceFilter(vendorId, productId,
|
||||||
deviceClass, deviceSubclass, deviceProtocol);
|
deviceClass, deviceSubclass, deviceProtocol,
|
||||||
|
manufacturerName, productName, serialNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void write(XmlSerializer serializer) throws IOException {
|
public void write(XmlSerializer serializer) throws IOException {
|
||||||
@@ -172,6 +210,15 @@ class UsbSettingsManager {
|
|||||||
if (mProtocol != -1) {
|
if (mProtocol != -1) {
|
||||||
serializer.attribute(null, "protocol", Integer.toString(mProtocol));
|
serializer.attribute(null, "protocol", Integer.toString(mProtocol));
|
||||||
}
|
}
|
||||||
|
if (mManufacturerName != null) {
|
||||||
|
serializer.attribute(null, "manufacturer-name", mManufacturerName);
|
||||||
|
}
|
||||||
|
if (mProductName != null) {
|
||||||
|
serializer.attribute(null, "product-name", mProductName);
|
||||||
|
}
|
||||||
|
if (mSerialNumber != null) {
|
||||||
|
serializer.attribute(null, "serial-number", mSerialNumber);
|
||||||
|
}
|
||||||
serializer.endTag(null, "usb-device");
|
serializer.endTag(null, "usb-device");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,6 +231,15 @@ class UsbSettingsManager {
|
|||||||
public boolean matches(UsbDevice device) {
|
public boolean matches(UsbDevice device) {
|
||||||
if (mVendorId != -1 && device.getVendorId() != mVendorId) return false;
|
if (mVendorId != -1 && device.getVendorId() != mVendorId) return false;
|
||||||
if (mProductId != -1 && device.getProductId() != mProductId) return false;
|
if (mProductId != -1 && device.getProductId() != mProductId) return false;
|
||||||
|
if (mManufacturerName != null && device.getManufacturerName() == null) return false;
|
||||||
|
if (mProductName != null && device.getProductName() == null) return false;
|
||||||
|
if (mSerialNumber != null && device.getSerialNumber() == null) return false;
|
||||||
|
if (mManufacturerName != null && device.getManufacturerName() != null &&
|
||||||
|
!mManufacturerName.equals(device.getManufacturerName())) return false;
|
||||||
|
if (mProductName != null && device.getProductName() != null &&
|
||||||
|
!mProductName.equals(device.getProductName())) return false;
|
||||||
|
if (mSerialNumber != null && device.getSerialNumber() != null &&
|
||||||
|
!mSerialNumber.equals(device.getSerialNumber())) return false;
|
||||||
|
|
||||||
// check device class/subclass/protocol
|
// check device class/subclass/protocol
|
||||||
if (matches(device.getDeviceClass(), device.getDeviceSubclass(),
|
if (matches(device.getDeviceClass(), device.getDeviceSubclass(),
|
||||||
@@ -203,6 +259,15 @@ class UsbSettingsManager {
|
|||||||
public boolean matches(DeviceFilter f) {
|
public boolean matches(DeviceFilter f) {
|
||||||
if (mVendorId != -1 && f.mVendorId != mVendorId) return false;
|
if (mVendorId != -1 && f.mVendorId != mVendorId) return false;
|
||||||
if (mProductId != -1 && f.mProductId != mProductId) return false;
|
if (mProductId != -1 && f.mProductId != mProductId) return false;
|
||||||
|
if (f.mManufacturerName != null && mManufacturerName == null) return false;
|
||||||
|
if (f.mProductName != null && mProductName == null) return false;
|
||||||
|
if (f.mSerialNumber != null && mSerialNumber == null) return false;
|
||||||
|
if (mManufacturerName != null && f.mManufacturerName != null &&
|
||||||
|
!mManufacturerName.equals(f.mManufacturerName)) return false;
|
||||||
|
if (mProductName != null && f.mProductName != null &&
|
||||||
|
!mProductName.equals(f.mProductName)) return false;
|
||||||
|
if (mSerialNumber != null && f.mSerialNumber != null &&
|
||||||
|
!mSerialNumber.equals(f.mSerialNumber)) return false;
|
||||||
|
|
||||||
// check device class/subclass/protocol
|
// check device class/subclass/protocol
|
||||||
return matches(f.mClass, f.mSubclass, f.mProtocol);
|
return matches(f.mClass, f.mSubclass, f.mProtocol);
|
||||||
@@ -217,19 +282,67 @@ class UsbSettingsManager {
|
|||||||
}
|
}
|
||||||
if (obj instanceof DeviceFilter) {
|
if (obj instanceof DeviceFilter) {
|
||||||
DeviceFilter filter = (DeviceFilter)obj;
|
DeviceFilter filter = (DeviceFilter)obj;
|
||||||
return (filter.mVendorId == mVendorId &&
|
|
||||||
filter.mProductId == mProductId &&
|
if (filter.mVendorId != mVendorId ||
|
||||||
filter.mClass == mClass &&
|
filter.mProductId != mProductId ||
|
||||||
filter.mSubclass == mSubclass &&
|
filter.mClass != mClass ||
|
||||||
filter.mProtocol == mProtocol);
|
filter.mSubclass != mSubclass ||
|
||||||
|
filter.mProtocol != mProtocol) {
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
if ((filter.mManufacturerName != null &&
|
||||||
|
mManufacturerName == null) ||
|
||||||
|
(filter.mManufacturerName == null &&
|
||||||
|
mManufacturerName != null) ||
|
||||||
|
(filter.mProductName != null &&
|
||||||
|
mProductName == null) ||
|
||||||
|
(filter.mProductName == null &&
|
||||||
|
mProductName != null) ||
|
||||||
|
(filter.mSerialNumber != null &&
|
||||||
|
mSerialNumber == null) ||
|
||||||
|
(filter.mSerialNumber == null &&
|
||||||
|
mSerialNumber != null)) {
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
if ((filter.mManufacturerName != null &&
|
||||||
|
mManufacturerName != null &&
|
||||||
|
!mManufacturerName.equals(filter.mManufacturerName)) ||
|
||||||
|
(filter.mProductName != null &&
|
||||||
|
mProductName != null &&
|
||||||
|
!mProductName.equals(filter.mProductName)) ||
|
||||||
|
(filter.mSerialNumber != null &&
|
||||||
|
mSerialNumber != null &&
|
||||||
|
!mSerialNumber.equals(filter.mSerialNumber))) {
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
return(true);
|
||||||
}
|
}
|
||||||
if (obj instanceof UsbDevice) {
|
if (obj instanceof UsbDevice) {
|
||||||
UsbDevice device = (UsbDevice)obj;
|
UsbDevice device = (UsbDevice)obj;
|
||||||
return (device.getVendorId() == mVendorId &&
|
if (device.getVendorId() != mVendorId ||
|
||||||
device.getProductId() == mProductId &&
|
device.getProductId() != mProductId ||
|
||||||
device.getDeviceClass() == mClass &&
|
device.getDeviceClass() != mClass ||
|
||||||
device.getDeviceSubclass() == mSubclass &&
|
device.getDeviceSubclass() != mSubclass ||
|
||||||
device.getDeviceProtocol() == mProtocol);
|
device.getDeviceProtocol() != mProtocol) {
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
if ((mManufacturerName != null && device.getManufacturerName() == null) ||
|
||||||
|
(mManufacturerName == null && device.getManufacturerName() != null) ||
|
||||||
|
(mProductName != null && device.getProductName() == null) ||
|
||||||
|
(mProductName == null && device.getProductName() != null) ||
|
||||||
|
(mSerialNumber != null && device.getSerialNumber() == null) ||
|
||||||
|
(mSerialNumber == null && device.getSerialNumber() != null)) {
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
if ((device.getManufacturerName() != null &&
|
||||||
|
!mManufacturerName.equals(device.getManufacturerName())) ||
|
||||||
|
(device.getProductName() != null &&
|
||||||
|
!mProductName.equals(device.getProductName())) ||
|
||||||
|
(device.getSerialNumber() != null &&
|
||||||
|
!mSerialNumber.equals(device.getSerialNumber()))) {
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -244,7 +357,9 @@ class UsbSettingsManager {
|
|||||||
public String toString() {
|
public String toString() {
|
||||||
return "DeviceFilter[mVendorId=" + mVendorId + ",mProductId=" + mProductId +
|
return "DeviceFilter[mVendorId=" + mVendorId + ",mProductId=" + mProductId +
|
||||||
",mClass=" + mClass + ",mSubclass=" + mSubclass +
|
",mClass=" + mClass + ",mSubclass=" + mSubclass +
|
||||||
",mProtocol=" + mProtocol + "]";
|
",mProtocol=" + mProtocol + ",mManufacturerName=" + mManufacturerName +
|
||||||
|
",mProductName=" + mProductName + ",mSerialNumber=" + mSerialNumber +
|
||||||
|
"]";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -73,6 +73,9 @@ static int usb_device_added(const char *devname, void* client_data) {
|
|||||||
uint8_t deviceClass = deviceDesc->bDeviceClass;
|
uint8_t deviceClass = deviceDesc->bDeviceClass;
|
||||||
uint8_t deviceSubClass = deviceDesc->bDeviceSubClass;
|
uint8_t deviceSubClass = deviceDesc->bDeviceSubClass;
|
||||||
uint8_t protocol = deviceDesc->bDeviceProtocol;
|
uint8_t protocol = deviceDesc->bDeviceProtocol;
|
||||||
|
char *manufacturer = usb_device_get_manufacturer_name(device);
|
||||||
|
char *product = usb_device_get_product_name(device);
|
||||||
|
char *serial = usb_device_get_serial(device);
|
||||||
|
|
||||||
usb_descriptor_iter_init(device, &iter);
|
usb_descriptor_iter_init(device, &iter);
|
||||||
|
|
||||||
@@ -109,12 +112,19 @@ static int usb_device_added(const char *devname, void* client_data) {
|
|||||||
env->SetIntArrayRegion(endpointArray, 0, length, endpointValues.array());
|
env->SetIntArrayRegion(endpointArray, 0, length, endpointValues.array());
|
||||||
|
|
||||||
jstring deviceName = env->NewStringUTF(devname);
|
jstring deviceName = env->NewStringUTF(devname);
|
||||||
|
jstring manufacturerName = env->NewStringUTF(manufacturer);
|
||||||
|
jstring productName = env->NewStringUTF(product);
|
||||||
|
jstring serialNumber = env->NewStringUTF(serial);
|
||||||
env->CallVoidMethod(thiz, method_usbDeviceAdded,
|
env->CallVoidMethod(thiz, method_usbDeviceAdded,
|
||||||
deviceName, vendorId, productId, deviceClass,
|
deviceName, vendorId, productId, deviceClass,
|
||||||
deviceSubClass, protocol, interfaceArray, endpointArray);
|
deviceSubClass, protocol, manufacturerName,
|
||||||
|
productName, serialNumber, interfaceArray, endpointArray);
|
||||||
|
|
||||||
env->DeleteLocalRef(interfaceArray);
|
env->DeleteLocalRef(interfaceArray);
|
||||||
env->DeleteLocalRef(endpointArray);
|
env->DeleteLocalRef(endpointArray);
|
||||||
|
env->DeleteLocalRef(serialNumber);
|
||||||
|
env->DeleteLocalRef(productName);
|
||||||
|
env->DeleteLocalRef(manufacturerName);
|
||||||
env->DeleteLocalRef(deviceName);
|
env->DeleteLocalRef(deviceName);
|
||||||
checkAndClearExceptionFromCallback(env, __FUNCTION__);
|
checkAndClearExceptionFromCallback(env, __FUNCTION__);
|
||||||
|
|
||||||
@@ -179,7 +189,7 @@ int register_android_server_UsbHostManager(JNIEnv *env)
|
|||||||
ALOGE("Can't find com/android/server/usb/UsbHostManager");
|
ALOGE("Can't find com/android/server/usb/UsbHostManager");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
method_usbDeviceAdded = env->GetMethodID(clazz, "usbDeviceAdded", "(Ljava/lang/String;IIIII[I[I)V");
|
method_usbDeviceAdded = env->GetMethodID(clazz, "usbDeviceAdded", "(Ljava/lang/String;IIIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[I[I)V");
|
||||||
if (method_usbDeviceAdded == NULL) {
|
if (method_usbDeviceAdded == NULL) {
|
||||||
ALOGE("Can't find usbDeviceAdded");
|
ALOGE("Can't find usbDeviceAdded");
|
||||||
return -1;
|
return -1;
|
||||||
|
|||||||
Reference in New Issue
Block a user