131 lines
3.7 KiB
Java
Executable File
131 lines
3.7 KiB
Java
Executable File
package qz.communication;
|
|
|
|
import org.apache.commons.lang3.builder.HashCodeBuilder;
|
|
import org.codehaus.jettison.json.JSONObject;
|
|
import qz.utils.UsbUtilities;
|
|
|
|
public class DeviceOptions {
|
|
|
|
public enum DeviceMode {
|
|
HID,
|
|
USB,
|
|
UNKNOWN;
|
|
public static DeviceMode parse(String callName) {
|
|
if (callName != null) {
|
|
if (callName.startsWith("usb")) {
|
|
return USB;
|
|
} else if (callName.startsWith("hid")) {
|
|
return HID;
|
|
}
|
|
}
|
|
return UNKNOWN;
|
|
}
|
|
}
|
|
|
|
private DeviceMode deviceMode;
|
|
|
|
private Integer vendorId;
|
|
private Integer productId;
|
|
|
|
//usb specific
|
|
private Byte interfaceId;
|
|
private Byte endpoint;
|
|
private int interval;
|
|
private int responseSize;
|
|
|
|
//hid specific
|
|
private Integer usagePage;
|
|
private String serial;
|
|
|
|
public DeviceOptions(JSONObject parameters, DeviceMode deviceMode) {
|
|
this.deviceMode = deviceMode;
|
|
|
|
vendorId = UsbUtilities.hexToInt(parameters.optString("vendorId"));
|
|
productId = UsbUtilities.hexToInt(parameters.optString("productId"));
|
|
|
|
if (!parameters.isNull("interface")) {
|
|
interfaceId = UsbUtilities.hexToByte(parameters.optString("interface"));
|
|
}
|
|
if (!parameters.isNull("endpoint")) {
|
|
endpoint = UsbUtilities.hexToByte(parameters.optString("endpoint"));
|
|
} else if (!parameters.isNull("reportId")) {
|
|
endpoint = UsbUtilities.hexToByte(parameters.optString("reportId"));
|
|
}
|
|
interval = parameters.optInt("interval", 100);
|
|
responseSize = parameters.optInt("responseSize");
|
|
|
|
if (!parameters.isNull("usagePage")) {
|
|
usagePage = UsbUtilities.hexToInt(parameters.optString("usagePage"));
|
|
}
|
|
if (!parameters.isNull("serial")) {
|
|
serial = parameters.optString("serial", "");
|
|
serial = serial.isEmpty() ? null : serial;
|
|
}
|
|
}
|
|
|
|
public Integer getVendorId() {
|
|
return vendorId;
|
|
}
|
|
|
|
public Integer getProductId() {
|
|
return productId;
|
|
}
|
|
|
|
public Byte getInterfaceId() {
|
|
return interfaceId;
|
|
}
|
|
|
|
public Byte getEndpoint() {
|
|
return endpoint;
|
|
}
|
|
|
|
public int getInterval() {
|
|
return interval;
|
|
}
|
|
|
|
public int getResponseSize() {
|
|
return responseSize;
|
|
}
|
|
|
|
public Integer getUsagePage() {
|
|
return usagePage;
|
|
}
|
|
|
|
public String getSerial() {
|
|
return serial;
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object obj) {
|
|
if (obj == null || !(obj instanceof DeviceOptions)) { return false; }
|
|
|
|
DeviceOptions that = (DeviceOptions)obj;
|
|
|
|
if (this.getVendorId().equals(that.getVendorId()) && this.getProductId().equals(that.getProductId())) {
|
|
if (deviceMode == DeviceMode.USB
|
|
&& (this.getInterfaceId() == null || that.getInterfaceId() == null || this.getInterfaceId().equals(that.getInterfaceId()))
|
|
&& (this.getEndpoint() == null || that.getEndpoint() == null || this.getEndpoint().equals(that.getEndpoint()))) {
|
|
return true;
|
|
}
|
|
|
|
if (deviceMode == DeviceMode.HID
|
|
&& (this.getUsagePage() == null || that.getUsagePage() == null || this.getUsagePage().equals(that.getUsagePage()))
|
|
&& (this.getSerial() == null || that.getSerial() == null || this.getSerial().equals(that.getSerial()))) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return new HashCodeBuilder()
|
|
.append(deviceMode)
|
|
.append(vendorId)
|
|
.append(productId)
|
|
.toHashCode();
|
|
}
|
|
|
|
}
|