From a3f26f6d0c7574b8cdaecbccd7cfe89aaeb736b0 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 6 Feb 2015 03:32:27 -0800 Subject: [PATCH] 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 --- micropeak/MicroUSB.java | 30 ++++++++++++++++++++++++++---- 1 file 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 list() { if (!load_library()) return null; - SWIGTYPE_p_altos_list list = libaltos.altos_ftdi_list_start(); - ArrayList device_list = new ArrayList(); + + 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(); -- 2.30.2