传输数据的USB [英] Transferring data USB

查看:272
本文介绍了传输数据的USB的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图发送和接收数据通过USB,我​​的设备中,宏碁Iconia A500已连接到设备和一切,这是没有必要的一切,工作正常,但是当我尝试发送和接收数据没有关系牛逼像预期的那样。这是我的code

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

它意味着约80个字符长,返回的字节数组,但它只返回两个字节后面这是1和96,如果有对USB设备的错误最终它仍然会返回一个数两个以上。难道我的code甚至接近正确吗?我基于USB通过serverbox系列文章吧。

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.

推荐答案

我试图在错误的波特率发送数据。

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

这里的code,它的工作原理。张贴于谁在使用FTDI设备和需要大家的帮助。

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

这篇关于传输数据的USB的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆