micropeak: Support both FTDI and Altus Metrum USB IDs
authorKeith Packard <keithp@keithp.com>
Fri, 6 Feb 2015 11:32:27 +0000 (03:32 -0800)
committerKeith Packard <keithp@keithp.com>
Fri, 6 Feb 2015 11:32:27 +0000 (03:32 -0800)
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>
micropeak/MicroUSB.java

index 6ffdb6281ea82e0e9a14a68a588675c9101e7667..ae582a31b4750ecedda294005857159c66de241c 100644 (file)
@@ -75,11 +75,17 @@ public class MicroUSB extends altos_device implements AltosDevice {
                return libaltos.altos_open(this);
        }
 
                return libaltos.altos_open(this);
        }
 
-       private boolean isMicro() {
+       private boolean isFTDI() {
                int vid = getVendor();
                int pid = getProduct();
                if (vid == 0x0403 && pid == 0x6015)
                        return true;
                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;
                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) {
        }
 
        public boolean matchProduct(int product) {
-               return isMicro();
+               return isFTDI() || isMicro();
        }
 
        static java.util.List<MicroUSB> list() {
                if (!load_library())
                        return null;
 
        }
 
        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>();
                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();
                if (list != null) {
                        for (;;) {
                                MicroUSB device = new MicroUSB();