【问题标题】:android communication usb; why always need to replug USB to get responds data?安卓通讯usb;为什么总是需要重新插入 USB 才能获取响应数据?
【发布时间】:2016-05-27 04:04:34
【问题描述】:

我创建了一个 Android 通信来向/从 USB 发送和接收数据

int iRes2 = conn.bulkTransfer(epOUT, bcdInfo.cbwBuffer.array(), 31, 2000);
iRes2 = conn.bulkTransfer(epOUT, bcdInfo.finalBSTD.array(), 512, 2000);
                bcdInfo.requestData();
iRes2 = conn.bulkTransfer(epIN, bcdInfo.cswBuffer, 512, 2000); 
iRes2 = conn.bulkTransfer(epOUT, bcdInfo.cbwBuffer.array(), 31, 2000);
iRes2 = conn.bulkTransfer(epIN, bcdInfo.cswBuffer, 512, 2000);

我收到了正确的数据。问题是,我只有在以下情况下才能获得正确的数据

  1. 我删除了另一个命令通信。假设上面的代码是 命令 A。如果我将命令 B 放在命令 A 的上方,那么我得到了 A指令数据错误。
  2. 每次我都将 USB 插入 Android 设备 想调试。意味着我需要拔下 USB 并重新插入 Android 每次调试前再次设备。

【问题讨论】:

    标签: android usb


    【解决方案1】:

    我需要向 USB 发送一个默认命令,告诉 USB 通信已完成。之后,USB 将准备好接收新命令。下面是我的默认命令,我称之为 OK 命令。

     public void goOkCommand(UsbDeviceConnection conn, UsbEndpoint epOUT, UsbEndpoint epIN) {
    
            ByteBuffer goOk = ByteBuffer.allocate(31);
            goOk.putInt(0xVALUE);
            goOk.putInt(0xVALUE);
            goOk.put(index, (byte) 0xVALUE);
            int iRes2 = conn.bulkTransfer(epOUT, goOk.array(), 31, 2000);//1. SEND OK COMMAND
    
            //2. PREPARE MEMORY FOR RECEIVED DATA
            byte cswBuffer[] = new byte[13];
            Arrays.fill(cswBuffer, (byte) 0);// put ALL 0 first
    
            iRes2 = conn.bulkTransfer(epIN, cswBuffer, 13, 2000);//3. RECEIVED OK MESSAGE
            iRes2 = conn.bulkTransfer(epIN, cswBuffer, 13, 2000);
        }
    

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 1970-01-01
      • 2023-04-02
      • 2012-06-15
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多