summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2015-02-06 03:32:27 -0800
committerKeith Packard <keithp@keithp.com>2015-02-06 03:32:27 -0800
commita3f26f6d0c7574b8cdaecbccd7cfe89aaeb736b0 (patch)
tree917e8b08a3fef32c3820a89299791a157bf80e46
parentcc707432c6eaedb9587bb63ac570146b356b6bfd (diff)
micropeak: Support both FTDI and Altus Metrum USB IDs
The windows driver only returns FTDI devices when altos_ftdi_list_start is invoked, so we need to call both that and the regular altos_list_start to get all of the devices. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--micropeak/MicroUSB.java30
1 files changed, 26 insertions, 4 deletions
diff --git a/micropeak/MicroUSB.java b/micropeak/MicroUSB.java
index 6ffdb628..ae582a31 100644
--- a/micropeak/MicroUSB.java
+++ b/micropeak/MicroUSB.java
@@ -75,11 +75,17 @@ public class MicroUSB extends altos_device implements AltosDevice {
return libaltos.altos_open(this);
}
- private boolean isMicro() {
+ private boolean isFTDI() {
int vid = getVendor();
int pid = getProduct();
if (vid == 0x0403 && pid == 0x6015)
return true;
+ return false;
+ }
+
+ private boolean isMicro() {
+ int vid = getVendor();
+ int pid = getProduct();
if (vid == AltosLib.vendor_altusmetrum &&
pid == AltosLib.product_mpusb)
return true;
@@ -87,16 +93,32 @@ public class MicroUSB extends altos_device implements AltosDevice {
}
public boolean matchProduct(int product) {
- return isMicro();
+ return isFTDI() || isMicro();
}
static java.util.List<MicroUSB> list() {
if (!load_library())
return null;
- SWIGTYPE_p_altos_list list = libaltos.altos_ftdi_list_start();
-
ArrayList<MicroUSB> device_list = new ArrayList<MicroUSB>();
+
+ SWIGTYPE_p_altos_list list;
+
+ list = libaltos.altos_ftdi_list_start();
+
+ if (list != null) {
+ for (;;) {
+ MicroUSB device = new MicroUSB();
+ if (libaltos.altos_list_next(list, device) == 0)
+ break;
+ if (device.isFTDI())
+ device_list.add(device);
+ }
+ libaltos.altos_list_finish(list);
+ }
+
+ list = libaltos.altos_list_start();
+
if (list != null) {
for (;;) {
MicroUSB device = new MicroUSB();