]> sigrok.org Git - sigrok-androidutils.git/blobdiff - src/org/sigrok/androidutils/UsbHelper.java
UsbHelper: Add additional methods for device enumeration and monitoring
[sigrok-androidutils.git] / src / org / sigrok / androidutils / UsbHelper.java
index e53e93a237ea3e2373097445bcc4786a87eda2b2..cfa2aa992155e82746ae65aa0c12a3821638b1fb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file is part of the sigrok project.
+ * This file is part of the sigrok-androidutils project.
  *
  * Copyright (C) 2014 Marcus Comstedt <marcus@mc.pp.se>
  *
@@ -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<String,UsbDevice> 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<String,UsbDevice> 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<String,UsbDevice> 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;
+               }
        }
-    }
 }