152 lines
4.0 KiB
Java
152 lines
4.0 KiB
Java
/*
|
|
* Copyright (C) 2013 Klaus Reimer <k@ailis.de>
|
|
* See LICENSE.md for licensing information.
|
|
*/
|
|
|
|
package de.ailis.usb4java;
|
|
|
|
import java.io.Serializable;
|
|
|
|
import org.apache.commons.lang3.builder.EqualsBuilder;
|
|
import org.apache.commons.lang3.builder.HashCodeBuilder;
|
|
|
|
import de.ailis.usb4java.descriptors.SimpleUsbDeviceDescriptor;
|
|
|
|
/**
|
|
* Unique USB device ID.
|
|
*
|
|
* @author Klaus Reimer (k@ailis.de)
|
|
*/
|
|
final class DeviceId implements Serializable
|
|
{
|
|
/** The serial versionUID. */
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
/** The bus number. */
|
|
private final int busNumber;
|
|
|
|
/** The device address. */
|
|
private final int deviceAddress;
|
|
|
|
/** The port this device is connected to. 0 if unknown. */
|
|
private final int portNumber;
|
|
|
|
/** The device descriptor. */
|
|
private final SimpleUsbDeviceDescriptor deviceDescriptor;
|
|
|
|
/**
|
|
* Constructs a new device id.
|
|
*
|
|
* @param busNumber
|
|
* The number of the bus the device is connected to.
|
|
* @param deviceAddress
|
|
* The address of the device.
|
|
* @param portNumber
|
|
* The number of the port the device is connected to. 0 if
|
|
* unknown.
|
|
* @param deviceDescriptor
|
|
* The device descriptor. Must not be null.
|
|
*/
|
|
DeviceId(final int busNumber, final int deviceAddress,
|
|
final int portNumber, final SimpleUsbDeviceDescriptor deviceDescriptor)
|
|
{
|
|
if (deviceDescriptor == null)
|
|
throw new IllegalArgumentException("deviceDescriptor must be set");
|
|
this.busNumber = busNumber;
|
|
this.portNumber = portNumber;
|
|
this.deviceAddress = deviceAddress;
|
|
this.deviceDescriptor = deviceDescriptor;
|
|
}
|
|
|
|
@Override
|
|
public int hashCode()
|
|
{
|
|
return new HashCodeBuilder()
|
|
.append(this.busNumber)
|
|
.append(this.deviceAddress)
|
|
.append(this.portNumber)
|
|
.append(this.deviceDescriptor)
|
|
.toHashCode();
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(final Object obj)
|
|
{
|
|
if (this == obj) return true;
|
|
if (obj == null || getClass() != obj.getClass()) return false;
|
|
final DeviceId other = (DeviceId) obj;
|
|
return new EqualsBuilder()
|
|
.append(this.busNumber, other.busNumber)
|
|
.append(this.deviceAddress, other.deviceAddress)
|
|
.append(this.portNumber, other.portNumber)
|
|
.append(this.deviceDescriptor, other.deviceDescriptor)
|
|
.isEquals();
|
|
}
|
|
|
|
/**
|
|
* Returns the bus number.
|
|
*
|
|
* @return The bus number.
|
|
*/
|
|
public int getBusNumber()
|
|
{
|
|
return this.busNumber;
|
|
}
|
|
|
|
/**
|
|
* Returns the device address.
|
|
*
|
|
* @return The device address.
|
|
*/
|
|
public int getDeviceAddress()
|
|
{
|
|
return this.deviceAddress;
|
|
}
|
|
|
|
/**
|
|
* Returns the number of the port the device is connected to.
|
|
*
|
|
* @return The port number or 0 if unknown.
|
|
*/
|
|
public int getPortNumber()
|
|
{
|
|
return this.portNumber;
|
|
}
|
|
|
|
/**
|
|
* Returns the device descriptor.
|
|
*
|
|
* @return The device descriptor. Never null.
|
|
*/
|
|
public SimpleUsbDeviceDescriptor getDeviceDescriptor()
|
|
{
|
|
return this.deviceDescriptor;
|
|
}
|
|
|
|
@Override
|
|
public String toString()
|
|
{
|
|
return String.format("Bus %03d Device %03d: ID %04x:%04x",
|
|
this.busNumber, this.deviceAddress,
|
|
this.deviceDescriptor.idVendor(),
|
|
this.deviceDescriptor.idProduct());
|
|
}
|
|
|
|
/**
|
|
* Checks if the specified two device IDs are equal. They are also equal if
|
|
* they are both null.
|
|
*
|
|
* @param a
|
|
* The first device ID.
|
|
* @param b
|
|
* The second device ID.
|
|
* @return True if the device IDs are equal, false if not.
|
|
*/
|
|
public static boolean equals(final DeviceId a, final DeviceId b)
|
|
{
|
|
if (a == null && b == null) return true;
|
|
if (a == null || b == null) return false;
|
|
return a.equals(b);
|
|
}
|
|
}
|