首页 文章

传输数据USB

提问于
浏览
13

我正在尝试通过USB发送和接收数据,我的设备,Acer Iconia A500具有连接到设备所需的一切和一切,这很好并且工作正常,但是当我尝试发送和接收数据时,它不会表现为预期 . 这是我的代码

for( ; ; ) { //this is the main loop for transferring   
    String get = "$getPos";
    byte[] getBytes = get.getBytes();
    conn.bulkTransfer( epOUT, getBytes, getBytes.length, 500 );

    try {
        Thread.sleep( 500 );
        byte[] buffer = new byte[4096];
        conn.bulkTransfer( epIN, buffer, 4096, 500 );
        StringBuilder byStr = new StringBuilder();

        for( int i = 0; i < buffer.length; i++ ) {
            if( buffer[i] != 0 ) {
                byStr.append( buffer[i] + ", " );
            }
        }

        l( byStr );
    }
    catch( InterruptedException e ) {
        e.printStackTrace();
    }

    if( mStop ) {
        mStopped = true;
        return;
    }

    l( "sent " + counter );
    counter++;
    counter = (byte)( counter % 16 );
}

它的意思是返回一个大约80个字符长的字节数组,但它只返回两个字节,分别为1和96,如果USB设备端有错误,它仍会返回两个以上的字节 . 我的代码是否接近正确?我根据服务器框的USB到串行文章 .

1 回答

  • 18

    我试图通过错误的波特率发送数据 .

    这是有效的代码 . 将它发布给使用FTDI设备并需要帮助的每个人 .

    private Runnable mLoop = new Runnable() {
    
            @Override
            public void run() {
                UsbDevice dev = sDevice;
                if (dev == null)
                    return;
                UsbManager usbm = (UsbManager) getSystemService(USB_SERVICE);
                UsbDeviceConnection conn = usbm.openDevice(dev);
                l("Interface Count: " + dev.getInterfaceCount());
                l("Using "
                        + String.format("%04X:%04X", sDevice.getVendorId(),
                                sDevice.getProductId()));
    
                if (!conn.claimInterface(dev.getInterface(0), true))
                    return;
    
                conn.controlTransfer(0x40, 0, 0, 0, null, 0, 0);// reset
                                                                // mConnection.controlTransfer(0×40,
                                                                // 0, 1, 0, null, 0,
                                                                // 0);//clear Rx
                conn.controlTransfer(0x40, 0, 2, 0, null, 0, 0);// clear Tx
                conn.controlTransfer(0x40, 0x02, 0x0000, 0, null, 0, 0);// flow
                                                                        // control
                                                                        // none
                conn.controlTransfer(0x40, 0x03, 0x0034, 0, null, 0, 0);// baudrate
                                                                        // 57600
                conn.controlTransfer(0x40, 0x04, 0x0008, 0, null, 0, 0);// data bit
                                                                        // 8, parity
                                                                        // none,
                                                                        // stop bit
                                                                        // 1, tx off
    
                UsbEndpoint epIN = null;
                UsbEndpoint epOUT = null;
    
                byte counter = 0;
    
                UsbInterface usbIf = dev.getInterface(0);
                for (int i = 0; i < usbIf.getEndpointCount(); i++) {
                    l("EP: "
                            + String.format("0x%02X", usbIf.getEndpoint(i)
                                    .getAddress()));
                    if (usbIf.getEndpoint(i).getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {
                        l("Bulk Endpoint");
                        if (usbIf.getEndpoint(i).getDirection() == UsbConstants.USB_DIR_IN)
                            epIN = usbIf.getEndpoint(i);
                        else
                            epOUT = usbIf.getEndpoint(i);
                    } else {
                        l("Not Bulk");
                    }
                }
    
                for (;;) {// this is the main loop for transferring
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    String get = "$fDump G" + "\n";
                    l("Sending: " + get);
    
                    byte[] by = get.getBytes();
    
                    // This is where it sends
                    l("out " + conn.bulkTransfer(epOUT, by, by.length, 500));
    
                    // This is where it is meant to receive
                    byte[] buffer = new byte[4096];
    
                    StringBuilder str = new StringBuilder();
    
                    if (conn.bulkTransfer(epIN, buffer, 4096, 500) >= 0) {
                        for (int i = 2; i < 4096; i++) {
                            if (buffer[i] != 0) {
                                str.append((char) buffer[i]);
                            } else {
                                l(str);
                                break;
                            }
                        }
    
                    }
                    // this shows the complete string
                    l(str);
    
                    if (mStop) {
                        mStopped = true;
                        return;
                    }
                    l("sent " + counter);
                    counter++;
                    counter = (byte) (counter % 16);
                }
            }
        };
    

相关问题