下面列出了android.hardware.usb.UsbDevice#getVendorId ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (device == null || device.getVendorId() != YUBICO_VENDOR_ID) {
// we are not interested in devices other than yubikeys
return;
}
if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
checkPermissions(device, isPermissionRequired);
} else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
// notify user that his current session is not valid anymore
listener.onSessionRemoved(new UsbSession(usbManager, device));
}
}
/**
* Probes a single device for a compatible driver.
*
* @param usbDevice the usb device to probe
* @return a new {@link UsbSerialDriver} compatible with this device, or
* {@code null} if none available.
*/
public UsbSerialDriver probeDevice(final UsbDevice usbDevice) {
final int vendorId = usbDevice.getVendorId();
final int productId = usbDevice.getProductId();
final Class<? extends UsbSerialDriver> driverClass =
mProbeTable.findDriver(vendorId, productId);
if (driverClass != null) {
final UsbSerialDriver driver;
try {
final Constructor<? extends UsbSerialDriver> ctor =
driverClass.getConstructor(UsbDevice.class);
driver = ctor.newInstance(usbDevice);
} catch (NoSuchMethodException | IllegalArgumentException | InstantiationException |
IllegalAccessException | InvocationTargetException e) {
throw new RuntimeException(e);
}
return driver;
}
return null;
}
/**
* 指定したUsbDeviceがこのDeviceFilterにマッチするかどうかを返す
* isExcludeフラグは別途#isExcludeか自前でチェックすること
* @param device
* @return
*/
public boolean matches(@NonNull final UsbDevice device) {
if (mVendorId != -1 && device.getVendorId() != mVendorId) {
return false;
}
if (mProductId != -1 && device.getProductId() != mProductId) {
return false;
}
// check device class/subclass/protocol
if (matches(
device.getDeviceClass(),
device.getDeviceSubclass(),
device.getDeviceProtocol())) {
return true;
}
// check device interface class/interface subclass/interface protocol
return interfaceMatches(device);
}
protected void onUsbAttach(final UsbDevice usb) {
Log.d(TAG, "onUsbAttach");
mUsb = usb;
if (usb == null)
return;
mVendorId = usb.getVendorId();
Log.d(TAG, "Vendor: " + mVendorId + " Product: " + usb.getProductId());
if (mVendorId == VENDOR_TREZOR || mVendorId == VENDOR_TREZOR_V2) {
onTrezor();
} else if (mVendorId == VENDOR_BTCHIP || mVendorId == VENDOR_LEDGER) {
if (BTChipTransportAndroid.isLedgerWithScreen(usb)) {
// User entered PIN on-device
setupLedgerConnection();
} else {
// Prompt for PIN to unlock device before setting it up
runOnUiThread(new Runnable() { public void run() { showPinDialog(); }});
}
}
}
public static UsbSerialDevice createUsbSerialDevice(UsbDevice device, UsbDeviceConnection connection, int iface)
{
/*
* It checks given vid and pid and will return a custom driver or a CDC serial driver.
* When CDC is returned open() method is even more important, its response will inform about if it can be really
* opened as a serial device with a generic CDC serial driver
*/
int vid = device.getVendorId();
int pid = device.getProductId();
if(FTDISioIds.isDeviceSupported(device))
return new FTDISerialDevice(device, connection, iface);
else if(CP210xIds.isDeviceSupported(vid, pid))
return new CP2102SerialDevice(device, connection, iface);
else if(PL2303Ids.isDeviceSupported(vid, pid))
return new PL2303SerialDevice(device, connection, iface);
else if(CH34xIds.isDeviceSupported(vid, pid))
return new CH34xSerialDevice(device, connection, iface);
else if(isCdcDevice(device))
return new CDCSerialDevice(device, connection, iface);
else
return null;
}
public UsbDevice findDexcom() {
Log.i("CALIBRATION-CHECK-IN: ", "Searching for dexcom");
mUsbManager = (UsbManager) getApplicationContext().getSystemService(Context.USB_SERVICE);
Log.i("USB MANAGER = ", mUsbManager.toString());
HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
Log.i("USB DEVICES = ", deviceList.toString());
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
Log.i("USB DEVICES = ", String.valueOf(deviceList.size()));
while(deviceIterator.hasNext()){
UsbDevice device = deviceIterator.next();
if (device.getVendorId() == 8867 && device.getProductId() == 71
&& device.getDeviceClass() == 2 && device.getDeviceSubclass() ==0
&& device.getDeviceProtocol() == 0){
dexcom = device;
Log.i("CALIBRATION-CHECK-IN: ", "Dexcom Found!");
return device;
} else {
Log.w("CALIBRATION-CHECK-IN: ", "that was not a dexcom (I dont think)");
}
}
return null;
}
/**
* Checks if there are yubico device connected to device list
* @return the object that contains property of device connected over USB
*/
private List<UsbDevice> findDevices() {
List<UsbDevice> yubikeys = new ArrayList<>();
for (UsbDevice device : usbManager.getDeviceList().values()) {
if (!configuration.isFilterYubicoDevices() || device.getVendorId() == YUBICO_VENDOR_ID) {
yubikeys.add(device);
}
}
return yubikeys;
}
public static UsbDevice getUsbDevice(UsbManager usbManager, int vendorId, int productId) {
// Iterate all the available devices and find ours.
for (UsbDevice device : usbManager.getDeviceList().values()) {
if (device.getProductId() == productId && device.getVendorId() == vendorId) {
return device;
}
}
return null;
}
public boolean scanIphoneDevices() {
if (mContext == null || mUsbManager == null) {
LogUtil.e(TAG, "scanUsbDevices fail");
return false;
}
HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
LogUtil.d(TAG, "device count = " + deviceList.size());
if (deviceList.size() == 0) {
return false;
}
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
while (deviceIterator.hasNext()) {
UsbDevice device = deviceIterator.next();
if (device == null) {
continue;
}
int vid = device.getVendorId();
int pid = device.getProductId();
LogUtil.d(TAG, "vid = 0x" + DigitalTrans.algorismToHEXString(vid, 4));
LogUtil.d(TAG, "pid = 0x" + DigitalTrans.algorismToHEXString(pid, 4));
if (device.getVendorId() == VID_IPHONE) {
LogUtil.d(TAG, "the device is iPhone");
return true;
}
LogUtil.d(TAG, device.toString());
}
return false;
}
@Override
public void onResume() {
super.onResume();
// SerialPortの生成
//mStkWriter = new StkWriter(getActivity().getBaseContext());
//mStkWriter.setListener(this);
// USBデバイスのチェック.
UsbManager manager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
for (UsbDevice device : deviceList.values()) {
if (device.getVendorId() == FaBoUsbConst.ARDUINO_UNO_VID) {
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
mTextViewComment.setText(R.string.arduinoorg_find);
mButtonConnect.setEnabled(false);
mButtonSend.setVisibility(Button.INVISIBLE);
mButtonBack.setVisibility(Button.INVISIBLE);
}
});
} else if (device.getVendorId() == FaBoUsbConst.ARDUINO_CC_UNO_VID) {
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
mTextViewComment.setText(R.string.arduinocc_find);
mButtonConnect.setEnabled(true);
mButtonSend.setVisibility(Button.INVISIBLE);
mButtonBack.setVisibility(Button.INVISIBLE);
}
});
break;
}
}
}
protected void enumerateDevices() {
HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
for (UsbDevice device : deviceList.values()) {
if (device.getVendorId() == BLINK_VENDOR_ID && device.getProductId() == BLINK_PRODUCT_ID) {
if(!mUsbManager.hasPermission(device)) {
mUsbManager.requestPermission(device, mPermIntent);
} else {
setupUsb(device);
}
}
}
}
protected void enumerateDevices() {
HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
for (UsbDevice device : deviceList.values()) {
if (device.getVendorId() == BLINK_VENDOR_ID && device.getProductId() == BLINK_PRODUCT_ID) {
if(!mUsbManager.hasPermission(device)) {
mUsbManager.requestPermission(device, mPermIntent);
} else {
setupUsb(device);
}
}
}
}
public static UsbDevice getDevice(UsbManager manager) {
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
for (UsbDevice device : deviceList.values()) {
Timber.d("%04X:%04X %s, %s", device.getVendorId(), device.getProductId(), device.getManufacturerName(), device.getProductName());
if (device.getVendorId() == VID) {
final int deviceProductId = device.getProductId();
for (int pid : PID_HIDS) {
if (deviceProductId == pid)
return device;
}
}
}
return null;
}
private UsbDevice getDeviceFromAttached() {
debugLog("Checking all connected devices");
for (UsbDevice connectedDevice : usbManager.getDeviceList().values()) {
debugLog("Checking device: " + connectedDevice.getProductId() + " " + connectedDevice.getVendorId());
if (connectedDevice.getVendorId() == gpsVendorId & connectedDevice.getProductId() == gpsProductId) {
debugLog("Found correct device");
return connectedDevice;
}
}
return null;
}
public static boolean isLedgerWithScreen(final UsbDevice d) {
final int pId = d.getProductId();
final boolean screenDevice = pId == PID_NANOS || pId == PID_BLUE;
return screenDevice && d.getVendorId() == VID2;
}
public static boolean isLedgerWithScreen(final UsbDevice d) {
final int pId = d.getProductId();
final boolean screenDevice = pId == PID_NANOS || pId == PID_BLUE;
return screenDevice && d.getVendorId() == VID2;
}
/**
* get vendor id
* @return
*/
public int getVenderId() {
final UsbDevice device = mWeakDevice.get();
return device != null ? device.getVendorId() : 0;
}
public static Trezor getDevice(final Context context, final TrezorGUICallback guiFn,
final Network network) {
final UsbManager manager = (UsbManager)context.getSystemService(Context.USB_SERVICE);
for (final UsbDevice device: manager.getDeviceList().values()) {
// Check if the device is TREZOR (or AvalonWallet or BWALLET)
final int vendorId = device.getVendorId();
final int productId = device.getProductId();
if ((vendorId != 0x534c || productId != 0x0001) &&
(vendorId != 0x1209 || productId != 0x53c0) &&
(vendorId != 0x1209 || productId != 0x53c1) &&
(vendorId != 0x10c4 || productId != 0xea80)) {
continue;
}
Log.i(TAG, "Hardware Wallet device found");
if (device.getInterfaceCount() < 1) {
Log.e(TAG, "Wrong interface count");
continue;
}
// Use first interface
final UsbInterface iface = device.getInterface(0);
// Try to find read/write endpoints
UsbEndpoint readEndpoint = null, writeEndpoint = null;
for (int i = 0; i < iface.getEndpointCount(); ++i) {
final UsbEndpoint ep = iface.getEndpoint(i);
if (readEndpoint == null &&
ep.getType() == UsbConstants.USB_ENDPOINT_XFER_INT &&
ep.getAddress() == 0x81) {
// number = 1 ; dir = USB_DIR_IN
readEndpoint = ep;
continue;
}
if (writeEndpoint == null &&
ep.getType() == UsbConstants.USB_ENDPOINT_XFER_INT &&
(ep.getAddress() == 0x01 || ep.getAddress() == 0x02)) {
// number = 1 ; dir = USB_DIR_OUT
writeEndpoint = ep;
continue;
}
Log.e(TAG, String.format("ep %d", ep.getAddress()));
}
if (!isEndpointOK(readEndpoint, "read") || !isEndpointOK(writeEndpoint, "write"))
continue;
// Try to open the device
final UsbDeviceConnection conn = manager.openDevice(device);
if (conn == null || !conn.claimInterface(iface, true)) {
Log.e(TAG, conn == null ? "Could not open connection" : "Could not claim interface");
continue;
}
// All OK - return the class
return new Trezor(guiFn, device, conn, readEndpoint, writeEndpoint, network);
}
return null;
}
@Override
public boolean equals(final Object obj) {
// can't compare if we have wildcard strings
if (mVendorId == -1 || mProductId == -1 || mClass == -1
|| mSubclass == -1 || mProtocol == -1) {
return false;
}
if (obj instanceof DeviceFilter) {
final DeviceFilter filter = (DeviceFilter) obj;
if (filter.mVendorId != mVendorId
|| filter.mProductId != mProductId
|| filter.mClass != mClass || 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) {
final UsbDevice device = (UsbDevice) obj;
if (device.getVendorId() != mVendorId
|| device.getProductId() != mProductId
|| device.getDeviceClass() != mClass
|| device.getDeviceSubclass() != mSubclass
|| 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;
}
@Override
public boolean equals(final Object obj) {
// can't compare if we have wildcard strings
if (mVendorId == -1 || mProductId == -1 || mClass == -1
|| mSubclass == -1 || mProtocol == -1) {
return false;
}
if (obj instanceof DeviceFilter) {
final DeviceFilter filter = (DeviceFilter) obj;
if (filter.mVendorId != mVendorId
|| filter.mProductId != mProductId
|| filter.mClass != mClass || 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 (filter.isExclude != isExclude);
}
if (obj instanceof UsbDevice) {
final UsbDevice device = (UsbDevice) obj;
if (isExclude
|| (device.getVendorId() != mVendorId)
|| (device.getProductId() != mProductId)
|| (device.getDeviceClass() != mClass)
|| (device.getDeviceSubclass() != mSubclass)
|| (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;
}