如何使用Android硬件USB API发送/接收数据到USB设备连接?

py49o6xq  于 2022-12-02  发布在  Android
关注(0)|答案(2)|浏览(204)

我这里有一个Bluefruit LE Feather 32u4板连接到我的Android设备,我试图发送和接收数据。它目前的编程是回送发送的内容,所以我试图找出Android API写入和读取它。
以下是我尝试与之通信的硬件的详细信息:https://pastebin.com/ktyBhzE8
在测试应用程序中,有一个运行以下代码的按钮。

private void DoTheThing() {
      String textMessage = "";

      m_usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);

      HashMap<String, UsbDevice> deviceList = m_usbManager.getDeviceList();
      Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
      while (deviceIterator.hasNext()) {
         m_usbDevice = deviceIterator.next();
         // I know I'm expecting just one device.
      }

      textMessage += "Devices: " + deviceList.size() + "\n";

      textMessage += "Interfaces: " + m_usbDevice.getInterfaceCount() + "\n";
      for ( int i = 0; i < m_usbDevice.getInterfaceCount(); i++) {
         textMessage += "Interface " + i + ":\n";
         textMessage += "   ID: " + m_usbDevice.getInterface(i).getId() + "\n";
         textMessage += "   EP: " + m_usbDevice.getInterface(i).getEndpointCount() + "\n";

      }

      UsbEndpoint int0_ep0_out = m_usbDevice.getInterface(0).getEndpoint(0);
      UsbEndpoint int1_ep0_in  = m_usbDevice.getInterface(1).getEndpoint(0);
      UsbEndpoint int1_ep1_out = m_usbDevice.getInterface(1).getEndpoint(1);
      // I know I'm expecting two interfaces and three endpoints.

      UsbDeviceConnection usbConnection = m_usbManager.openDevice(m_usbDevice);

      byte[] message = new byte[1];
      message[0] = (byte) 0;

      int success = 0;

      try {
         success = usbConnection.bulkTransfer(int1_ep0_in, message, message.length, 0);
         textMessage += success + "\n";
      } catch (Exception e) {
         textMessage += e + "\n";
      }

      m_textView.setText(textMessage);
   }

在我尝试批量传输之前,一切似乎都正常。我遇到以下异常:
java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“int android.hardware.usb.UsbDeviceConnection.bulkTransfer(android.hardware.usb.UsbEndpoint,byte[],int,int)”。
对IN终结点的引用是否无效?
UsbEndpoint int1_ep0_in = m_usbDevice.getInterface(1).getEndpoint(0);
我如何确定它是否是?
我也在尝试弄清楚如何从USB设备接收数据,因为我的Feather板应该回应它接收到的数据。我知道应该使用bulkTransfer之类的东西,但是怎么做呢?什么会调用它?是否需要设置一些事件侦听器来等待数据进入特定的端点?

polhcujo

polhcujo1#

您可以使用usb-serial-for-android库与此类设备进行通信

pgx2nnw8

pgx2nnw82#

java.lang.NullPointerException:尝试调用虚拟方法'int android.hardware.usb.UsbDeviceConnection.bulkTransfer'
翻译:是的。
您无法打开某些USB设备,尤其是当有其他程序(或内核本身)正在使用它时。

相关问题