TeleStern/micropeak/MicroUSB.java

156 lines
3.7 KiB
Java

/*
* Copyright © 2010 Keith Packard <keithp@keithp.com>
*
* 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; 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
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
package org.altusmetrum.micropeak;
import java.util.*;
import libaltosJNI.*;
import org.altusmetrum.altoslib_14.*;
import org.altusmetrum.altosuilib_14.*;
public class MicroUSB extends altos_device implements AltosDevice {
static boolean initialized = false;
static boolean loaded_library = false;
public static boolean load_library() {
if (!initialized) {
try {
System.loadLibrary("altos");
libaltos.altos_init();
loaded_library = true;
} catch (UnsatisfiedLinkError e) {
try {
System.loadLibrary("altos64");
libaltos.altos_init();
loaded_library = true;
} catch (UnsatisfiedLinkError e2) {
loaded_library = false;
}
}
initialized = true;
}
return loaded_library;
}
public String toString() {
String name = getName();
if (name == null)
name = "Altus Metrum";
return String.format("%-24.24s %s",
name, getPath());
}
public String toShortString() {
String name = getName();
if (name == null)
name = "Altus Metrum";
return String.format("%s %s",
name, getPath());
}
public String getErrorString() {
altos_error error = new altos_error();
libaltos.altos_get_last_error(error);
return String.format("%s (%d)", error.getString(), error.getCode());
}
public SWIGTYPE_p_altos_file open() {
return libaltos.altos_open(this);
}
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;
return false;
}
public boolean matchProduct(int product) {
return isFTDI() || isMicro();
}
public int hashCode() {
return getVendor() ^ getProduct() ^ getSerial() ^ getPath().hashCode();
}
public boolean equals(Object o) {
if (o == null)
return false;
if (!(o instanceof MicroUSB))
return false;
MicroUSB other = (MicroUSB) o;
return getVendor() == other.getVendor() &&
getProduct() == other.getProduct() &&
getSerial() == other.getSerial() &&
getPath().equals(other.getPath());
}
static java.util.List<MicroUSB> list() {
if (!load_library())
return null;
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 (libaltos.altos_list_next(list, device) == 0)
break;
if (device.isMicro())
device_list.add(device);
}
libaltos.altos_list_finish(list);
}
return device_list;
}
}