2 * Copyright © 2010 Keith Packard <keithp@keithp.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 2 of the License.
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
23 public class AltosDevice extends altos_device {
25 static boolean initialized = false;
28 System.loadLibrary("altos");
29 libaltos.altos_init();
31 } catch (UnsatisfiedLinkError e) {
32 System.err.println("Native library failed to load.\n" + e);
35 public final static int AltusMetrum = libaltosConstants.USB_PRODUCT_ALTUSMETRUM;
36 public final static int TeleMetrum = libaltosConstants.USB_PRODUCT_TELEMETRUM;
37 public final static int TeleDongle = libaltosConstants.USB_PRODUCT_TELEDONGLE;
38 public final static int TeleTerra = libaltosConstants.USB_PRODUCT_TELETERRA;
39 public final static int Any = 0x10000;
40 public final static int BaseStation = 0x10000 + 1;
42 public String toString() {
43 String name = getName();
45 name = "Altus Metrum";
46 return String.format("%-20.20s %4d %s",
47 getName(), getSerial(), getPath());
50 public boolean isAltusMetrum() {
51 if (getVendor() != libaltosConstants.USB_VENDOR_ALTUSMETRUM)
53 if (getProduct() < libaltosConstants.USB_PRODUCT_ALTUSMETRUM_MIN)
55 if (getProduct() > libaltosConstants.USB_PRODUCT_ALTUSMETRUM_MAX)
60 public boolean matchProduct(int want_product) {
65 if (want_product == Any)
68 if (want_product == BaseStation)
69 return matchProduct(TeleDongle) || matchProduct(TeleTerra);
71 int have_product = getProduct();
73 if (have_product == AltusMetrum) /* old devices match any request */
76 if (want_product == have_product)
82 static AltosDevice[] list(int product) {
86 SWIGTYPE_p_altos_list list = libaltos.altos_list_start();
88 ArrayList<AltosDevice> device_list = new ArrayList<AltosDevice>();
90 SWIGTYPE_p_altos_file file;
93 AltosDevice device = new AltosDevice();
94 if (libaltos.altos_list_next(list, device) == 0)
96 if (device.matchProduct(product))
97 device_list.add(device);
99 libaltos.altos_list_finish(list);
102 AltosDevice[] devices = new AltosDevice[device_list.size()];
103 for (int i = 0; i < device_list.size(); i++)
104 devices[i] = device_list.get(i);