X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Forg%2Fsigrok%2Fandroidutils%2FUsbHelper.java;h=cfa2aa992155e82746ae65aa0c12a3821638b1fb;hb=054991d3ec685bf80bd7ca5c2f4c54963f797952;hp=441ee8e3d402effc319e6ddc7f5d6fd1aebd90bc;hpb=5de7ce63348454b645281e7ab8c09ecba7123dc2;p=sigrok-androidutils.git diff --git a/src/org/sigrok/androidutils/UsbHelper.java b/src/org/sigrok/androidutils/UsbHelper.java index 441ee8e..cfa2aa9 100644 --- a/src/org/sigrok/androidutils/UsbHelper.java +++ b/src/org/sigrok/androidutils/UsbHelper.java @@ -28,42 +28,110 @@ import java.util.HashMap; public final class UsbHelper { - private static UsbManager manager; + private static UsbManager manager; + private static Context context; + private static UsbEventMonitor eventMonitor; - public static void setContext(Context ctx) - { - if (ctx == null) - manager = null; - else - manager = (UsbManager) ctx.getSystemService(Context.USB_SERVICE); - } + public static void setContext(Context ctx) + { + context = ctx; + if (ctx == null) + manager = null; + else + manager = (UsbManager) ctx.getSystemService(Context.USB_SERVICE); + } + + private static int open(UsbManager manager, String name, int mode) + { + if (manager == null) { + Log.w("UsbHelper", "no manager"); + return -1; + } + HashMap devlist = manager.getDeviceList(); + UsbDevice dev = (devlist == null ? null : devlist.get(name)); + if (dev == null) + return -1; + if (!manager.hasPermission(dev)) + return -1; + UsbDeviceConnection conn = manager.openDevice(dev); + return (conn == null ? -1 : conn.getFileDescriptor()); + } - private static int open(UsbManager manager, String name, int mode) - { - if (manager == null) { - Log.w("UsbHelper", "no manager"); - return -1; + private static synchronized void startEventMonitor(Context context, UsbManager manager, UsbEventListener listener) + { + if (eventMonitor != null) { + eventMonitor.stop(); + eventMonitor = null; + } + if (context == null) { + Log.w("UsbHelper", "no context"); + return; + } + if (manager == null) { + Log.w("UsbHelper", "no manager"); + return; + } + eventMonitor = new UsbEventMonitor(context, manager, listener); + eventMonitor.start(); } - HashMap devlist = manager.getDeviceList(); - UsbDevice dev = (devlist == null? null : devlist.get(name)); - if (dev == null) { - return -1; + + private static synchronized void stopEventMonitor(Context context) + { + if (eventMonitor != null) { + eventMonitor.stop(); + eventMonitor = null; + } + } + + private static String[] scanDevices(UsbManager manager) + { + if (manager == null) { + Log.w("UsbHelper", "no manager"); + return null; + } + HashMap devlist = manager.getDeviceList(); + if (devlist == null) + return null; + String[] list = devlist.keySet().toArray(new String[devlist.size()]); + return list; } - if (!manager.hasPermission(dev)) { - return -1; + + public static int open(String name, int mode) + { + try { + return open(manager, name, mode); + } catch (Exception e) { + Log.w("UsbHelper", "caught exception " + e); + return -1; + } + } + + public static void startEventMonitor(UsbEventListener listener) + { + try { + startEventMonitor(context, manager, listener); + } catch (Exception e) { + Log.w("UsbHelper", "caught exception " + e); + } + } + + public static void stopEventMonitor() + { + try { + stopEventMonitor(context); + } catch (Exception e) { + Log.w("UsbHelper", "caught exception " + e); + } } - UsbDeviceConnection conn = manager.openDevice(dev); - return (conn == null? -1 : conn.getFileDescriptor()); - } - public static int open(String name, int mode) - { - try { - return open(manager, name, mode); - } catch(Exception e) { - Log.w("UsbHelper", "caught exception "+e); - return -1; + public static String[] scanDevices() + { + try { + return scanDevices(manager); + } catch (Exception e) { + Log.w("UsbHelper", "caught exception " + e); + return null; + } } - } }