com.hoho.android.usbserial.driver.FtdiSerialDriver Java Examples

The following examples show how to use com.hoho.android.usbserial.driver.FtdiSerialDriver. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: DeviceTest.java    From usb-serial-for-android with GNU Lesser General Public License v2.1 6 votes vote down vote up
@Test
public void ftdiMethods() throws Exception {
    if(!(usbSerialDriver instanceof FtdiSerialDriver))
        return;
    byte[] b;
    usbOpen();
    usbParameters(115200, 8, 1, UsbSerialPort.PARITY_NONE);
    telnetParameters(115200, 8, 1, UsbSerialPort.PARITY_NONE);

    FtdiSerialDriver.FtdiSerialPort ftdiSerialPort = (FtdiSerialDriver.FtdiSerialPort) usbSerialPort;
    int lt = ftdiSerialPort.getLatencyTimer();
    ftdiSerialPort.setLatencyTimer(1);
    telnetWrite("x".getBytes());
    b = usbRead(1);
    long t1 = System.currentTimeMillis();
    telnetWrite("x".getBytes());
    b = usbRead(1);
    ftdiSerialPort.setLatencyTimer(100);
    long t2 = System.currentTimeMillis();
    telnetWrite("x".getBytes());
    b = usbRead(1);
    long t3 = System.currentTimeMillis();
    ftdiSerialPort.setLatencyTimer(lt);
    assertEquals("latency 1", 99, Math.max(t2-t1, 99)); // looks strange, but shows actual value
    assertEquals("latency 100", 99, Math.min(t3-t2, 99));
}
 
Example #2
Source File: DeviceTest.java    From usb-serial-for-android with GNU Lesser General Public License v2.1 4 votes vote down vote up
@Test
public void readTimeout() throws Exception {
    if (usbSerialDriver instanceof FtdiSerialDriver)
        return; // periodically sends status messages, so does not block here
    final Boolean[] closed = {Boolean.FALSE};

    Runnable closeThread = new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            usbClose();
            closed[0] = true;
        }
    };

    usbOpen(EnumSet.of(UsbOpenFlags.NO_IOMANAGER_THREAD));
    usbParameters(19200, 8, 1, UsbSerialPort.PARITY_NONE);
    telnetParameters(19200, 8, 1, UsbSerialPort.PARITY_NONE);

    byte[] buf = new byte[]{1};
    int len,i,j;
    long time;

    // w/o timeout
    telnetWrite(buf);
    len = usbSerialPort.read(buf, 0); // not blocking because data is available
    assertEquals(1, len);

    time = System.currentTimeMillis();
    closed[0] = false;
    Executors.newSingleThreadExecutor().submit(closeThread);
    len = usbSerialPort.read(buf, 0); // blocking until close()
    assertEquals(0, len);
    assertTrue(System.currentTimeMillis()-time >= 100);
    // wait for usbClose
    for(i=0; i<100; i++) {
        if(closed[0]) break;
        Thread.sleep(1);
    }
    assertTrue("not closed in time", closed[0]);

    // with timeout
    usbOpen(EnumSet.of(UsbOpenFlags.NO_IOMANAGER_THREAD));
    usbParameters(19200, 8, 1, UsbSerialPort.PARITY_NONE);
    telnetParameters(19200, 8, 1, UsbSerialPort.PARITY_NONE);

    int longTimeout = 1000;
    int shortTimeout = 10;
    time = System.currentTimeMillis();
    len = usbSerialPort.read(buf, shortTimeout);
    assertEquals(0, len);
    assertTrue(System.currentTimeMillis()-time < 100);

    // no issue with slow transfer rate and short read timeout
    time = System.currentTimeMillis();
    for(i=0; i<50; i++) {
        Thread.sleep(10);
        telnetWrite(buf);
        for(j=0; j<20; j++) {
            len = usbSerialPort.read(buf, shortTimeout);
            if (len > 0)
                break;
        }
        assertEquals("failed after " + i, 1, len);
    }
    Log.i(TAG, "average time per read " + (System.currentTimeMillis()-time)/i + " msec");

    if(!(usbSerialDriver instanceof CdcAcmSerialDriver)) {
        int diffLen;
        usbClose();
        // no issue with high transfer rate and long read timeout
        diffLen = readSpeedInt(5, longTimeout);
        if(usbSerialDriver instanceof Ch34xSerialDriver && diffLen == -1)
            diffLen = 0; // todo: investigate last packet loss
        assertEquals(0, diffLen);
        usbClose();
        // date loss with high transfer rate and short read timeout !!!
        diffLen = readSpeedInt(5, shortTimeout);
        assertNotEquals(0, diffLen);

        // data loss observed with read timeout up to 200 msec, e.g.
        //  difference at 181 len 64
        //        got 000020,0000021,0000030,0000031,0000032,0
        //   expected 000020,0000021,0000022,0000023,0000024,0
        // difference at 341 len 128
        //        got 000048,0000049,0000066,0000067,0000068,0
        //   expected 000048,0000049,0000050,0000051,0000052,0
        // difference at 724 len 704
        //        got 0000112,0000113,0000202,0000203,0000204,
        //   expected 0000112,0000113,0000114,0000115,0000116,
        // difference at 974 len 8
        //        got 00231,0000232,0000234,0000235,0000236,00
        //   expected 00231,0000232,0000233,0000234,0000235,00
    }
}