Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
[fw/altos] / micropeak / MicroUSB.java
index 6ffdb6281ea82e0e9a14a68a588675c9101e7667..4ab5fcc96b33e0d01396d42ee1d6e87c24ac445c 100644 (file)
@@ -3,7 +3,8 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -19,8 +20,8 @@ package org.altusmetrum.micropeak;
 
 import java.util.*;
 import libaltosJNI.*;
-import org.altusmetrum.altoslib_5.*;
-import org.altusmetrum.altosuilib_3.*;
+import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altosuilib_11.*;
 
 public class MicroUSB extends altos_device implements AltosDevice {
 
@@ -75,11 +76,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 +94,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();