Transferring data USB

一世执手 提交于 2019-11-26 09:34:07

问题


I am trying to send and receive data over USB, my device, the Acer Iconia A500 has everything needed to connect to the device and everything, that is fine and works properly, but when I try sending and receiving data it doesn\'t behave as expected. This is my code

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 );
}

Its meant to return an Array of bytes about 80 characters long but it only returns two bytes back which are 1 and 96, if there was a error on the USB devices end it would still return a few more then two. Is my code even close to correct? I based it of the USB to serial article by serverbox.


回答1:


I was trying to send data over the wrong baud rate.

Here's the code that works. Posting it for everyone who is using FTDI devices and needs help.

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);
            }
        }
    };


来源:https://stackoverflow.com/questions/10429615/transferring-data-usb

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!