Beispiel #1
0
 private void openAccessory(UsbAccessory accessory) {
   mFileDescriptor = mUsbManager.openAccessory(accessory);
   if (mFileDescriptor != null) {
     mAccessory = accessory;
     FileDescriptor fd = mFileDescriptor.getFileDescriptor();
     mInputStream = new FileInputStream(fd);
     mOutputStream = new FileOutputStream(fd);
     Log.d(TAG, "accessory opened");
   } else {
     Log.d(TAG, "accessory open fail");
   }
 }
Beispiel #2
0
 // GIVEN FUNCTIONS
 private void openAccessory(UsbAccessory mAccessory2) {
   mFileDescriptor = mUsbManager.openAccessory(mAccessory2);
   if (mFileDescriptor != null) {
     mAccessory = mAccessory2;
     FileDescriptor fd = mFileDescriptor.getFileDescriptor();
     mInputStream = new FileInputStream(fd);
     mOutputStream = new FileOutputStream(fd);
     Log.d(TAG, "accessory opened");
   } else {
     Log.d(TAG, "accessory open fail");
     debug.setText("did not open");
   }
 }
 private void openAccessory(UsbAccessory accessory) {
   mFileDescriptor = mUsbManager.openAccessory(accessory);
   if (mFileDescriptor != null) {
     mAccessory = accessory;
     FileDescriptor fd = mFileDescriptor.getFileDescriptor();
     mInputStream = new FileInputStream(fd);
     mOutputStream = new FileOutputStream(fd);
     Thread listenThread = new Thread(null, this, "accessoryListener");
     listenThread.start();
     Log.d(TAG, "accessory opened");
   } else {
     Log.d(TAG, "accessory open fail");
   }
 }
Beispiel #4
0
  // open the accessory here
  private boolean openMyAccessory() {
    boolean accOpened = false;
    if (DEBUG_VERBOSE) Log.d(TAG, "openMyAccessory entered!");

    // Next, ask the UsbManager (singleton?) for the ParcelFileDescriptor for the accessory
    myParcelFD = androidUsbManager.openAccessory(adkAccessory);

    if (myParcelFD != null) {
      accOpened = true;
      if (DEBUG_VERBOSE)
        Log.d("myADK_OpenMyAccessory", "accessory opened. " + myParcelFD.toString());

    } else {
      Log.e("myADK_OpenMyAccessory", "opening failed :(");
    }

    if (DEBUG_VERBOSE) Log.d(TAG, "openMyAccessory exited!");
    return accOpened;
  }
  private void openAccessory() {
    Log.d(TAG, "openAccessory: " + mAccessory);
    mFileDescriptor = mUsbManager.openAccessory(mAccessory);
    avalible = true;
    if (mFileDescriptor != null) {
      FileDescriptor fd = mFileDescriptor.getFileDescriptor();
      mInputStream = new FileInputStream(fd);
      mOutputStream = new FileOutputStream(fd);
      avalible = true;
      readTh =
          new Thread() {
            @Override
            public void run() {
              final byte[] buffer = new byte[512];
              while (true) {
                try {
                  if (mInputStream.available() > 0) {
                    mInputStream.read(buffer, 0, 512);
                    tv.post(
                        new Runnable() {
                          private byte[] buf = buffer.clone();

                          public void run() {
                            tv.append(new String(buf));
                          }
                        });
                  } else {
                    Thread.sleep(50);
                  }
                } catch (IOException e) {
                  e.printStackTrace();
                  return;
                } catch (InterruptedException e) {
                  e.printStackTrace();
                  return;
                }
              }
            }
          };
    }
  }
  /**
   * Enables the
   *
   * @param context The context that the USB manager should register to
   * @return RETURN_CODES - the status of the enable request
   */
  public RETURN_CODES enable(Context context) {
    // Grab the packageName to use for an attach Intent
    actionString = context.getPackageName() + ".action.USB_PERMISSION";

    PendingIntent permissionIntent =
        PendingIntent.getBroadcast(context, 0, new Intent(actionString), 0);

    // If the USB manager isn't already enabled
    if (enabled == false) {
      // Create a new filter with the package name (for the accessory
      // attach)

      try {
        Thread.sleep(500);
      } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
      }

      IntentFilter filter = new IntentFilter(actionString);
      // Also add a few other actions to the intent...
      filter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);
      filter.addAction(UsbManager.ACTION_USB_ACCESSORY_DETACHED);
      // and register the intent with the specified context
      context.registerReceiver(receiver, filter);

      UsbManager deviceManager = null;
      UsbAccessory[] accessories = null;
      UsbAccessory accessory = null;

      // Get a UsbManager object from the specified intent (only works for
      // v3.1+ devices)
      deviceManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);

      // If we were unable to get a UsbManager, return an error
      if (deviceManager == null) {
        return RETURN_CODES.DEVICE_MANAGER_IS_NULL;
      }

      // Get a list of all of the accessories from the UsbManager
      accessories = deviceManager.getAccessoryList();

      // If the list of accessories is empty, then exit
      if (accessories == null) {
        return RETURN_CODES.ACCESSORIES_LIST_IS_EMPTY;
      }

      // Get the first accessory in the list (currently the Android OS
      // only
      // supports one accessory, so this is it)
      accessory = accessories[0];

      // If the accessory isn't null, then let's try to attach to it.
      if (accessory != null) {
        // If we have permission to access the accessory,
        if (deviceManager.hasPermission(accessory)) {
          // Try to open a ParcelFileDescriptor by opening the
          // accessory
          parcelFileDescriptor = deviceManager.openAccessory(accessory);
          //					try {
          //						parcelFileDescriptor.close() ;
          //					} catch (IOException e1) {
          //						e1.printStackTrace();
          //					}
          //					parcelFileDescriptor = deviceManager
          //							.openAccessory(accessory);

          if (parcelFileDescriptor != null) {
            // Create a new read thread to handle reading data from
            // the accessory
            readThread = new ReadThread(parcelFileDescriptor);
            readThread.start();

            deviceManager.requestPermission(accessory, permissionIntent);

            if (parcelFileDescriptor == null) {
              Log.d(TAG, "USBAccessoryManager:enable() parcelFileDescriptor == null");
              return RETURN_CODES.FILE_DESCRIPTOR_WOULD_NOT_OPEN;
            }

            // Open the output file stream for writing data out to
            // the accessory
            outputStream = new FileOutputStream(parcelFileDescriptor.getFileDescriptor());

            if (outputStream == null) {
              Log.d(TAG, "USBAccessoryManager:enable() outputStream == null");

              try {
                parcelFileDescriptor.close();
              } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
              }
              return RETURN_CODES.FILE_DESCRIPTOR_WOULD_NOT_OPEN;
            }

            Log.d(TAG, "USBAccessoryManager:enable() outputStream open");

            // If the ParcelFileDescriptor was successfully opened,
            // mark the accessory as enabled and open
            enabled = true;
            open = true;

            handler
                .obtainMessage(
                    what,
                    new USBAccessoryManagerMessage(
                        USBAccessoryManagerMessage.MessageType.READY, accessory))
                .sendToTarget();

            Log.d(TAG, "USBAccessoryManager:enable() device ready");

            return RETURN_CODES.SUCCESS;
          } else {
            /*
             * If we weren't able to open the ParcelFileDescriptor,
             * then we will not be able to talk to the device. Due
             * to a bug in the Android v2.3.4 OS this situation may
             * occur if a user presses the "home" or "back" buttons
             * while an accessory is still attached. In this case
             * the attempt to close the ReadThread will fail if a
             * read() is in progress on the FileInputStream. This
             * results in the ParcelFileDescriptor not being freed
             * up for later access. A future attempt to connect to
             * the accessory (via reopening the app) will end up
             * having the openAccessory() request return null,
             * ending up in this section of code.
             */
            return RETURN_CODES.FILE_DESCRIPTOR_WOULD_NOT_OPEN;
          }
        } else {
          /*
           * If we don't currently have permission to access the
           * accessory, then we need to request it. If we haven't
           * requested it already...
           */
          if (permissionRequested == false) {
            // Then go ahead and request it...
            deviceManager.requestPermission(accessory, permissionIntent);

            permissionRequested = true;
            return RETURN_CODES.PERMISSION_PENDING;
          }
        }
      }

      return RETURN_CODES.ACCESSORIES_LIST_IS_EMPTY;
    }

    return RETURN_CODES.SUCCESS;
  }
        @Override
        public void onReceive(Context context, Intent intent) {
          /* get the action for this event */
          String action = intent.getAction();

          /*
           * if it corresponds to the packageName, then it was a permissions
           * grant request
           */
          if (actionString.equals(action)) {
            /* see if we got permission */
            if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
              /* if so, then try to open the accessory */
              UsbManager deviceManager = null;
              UsbAccessory accessory = null;

              deviceManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);

              if (deviceManager == null) {
                // TODO: error. report to user?
                return;
              }

              accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);

              parcelFileDescriptor = deviceManager.openAccessory(accessory);

              if (parcelFileDescriptor != null) {
                enabled = true;
                open = true;

                outputStream = new FileOutputStream(parcelFileDescriptor.getFileDescriptor());

                readThread = new ReadThread(parcelFileDescriptor);
                readThread.start();

                Log.d(TAG, "USBAccessoryManager:BroadcastReceiver()-1");
                handler
                    .obtainMessage(
                        what,
                        new USBAccessoryManagerMessage(
                            USBAccessoryManagerMessage.MessageType.READY, accessory))
                    .sendToTarget();
              } else {
                // TODO: error. report to user?
                return;
              }
            }
          }

          if (UsbManager.ACTION_USB_ACCESSORY_ATTACHED.equals(action)) {
            /*
             * if it was a device attach notice, then try to open the
             * accessory
             */
            UsbManager deviceManager = null;
            UsbAccessory[] accessories = null;
            UsbAccessory accessory = null;

            deviceManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);

            if (deviceManager == null) {
              // TODO: error. report to user?
              return;
            }

            accessories = deviceManager.getAccessoryList();

            if (accessories == null) {
              // TODO: error. report to user?
              return;
            }

            accessory = accessories[0];

            parcelFileDescriptor = deviceManager.openAccessory(accessory);

            if (parcelFileDescriptor != null) {
              enabled = true;
              open = true;

              outputStream = new FileOutputStream(parcelFileDescriptor.getFileDescriptor());

              readThread = new ReadThread(parcelFileDescriptor);
              readThread.start();

              Log.d(TAG, "USBAccessoryManager:BroadcastReceiver()-2");
              handler
                  .obtainMessage(
                      what,
                      new USBAccessoryManagerMessage(
                          USBAccessoryManagerMessage.MessageType.READY, accessory))
                  .sendToTarget();
            } else {
              // TODO: error. report to user?
              return;
            }
          } else if (UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) {
            /*
             * if it was a detach notice, then close the accessory and
             * notify the user
             */
            closeAccessory();
            handler
                .obtainMessage(
                    what,
                    new USBAccessoryManagerMessage(
                        USBAccessoryManagerMessage.MessageType.DISCONNECTED))
                .sendToTarget();
          } else if (UsbManager.EXTRA_PERMISSION_GRANTED.equals(action)) {

          }
        }