Package jtermios.testsuite

Source Code of jtermios.testsuite.JTermiosDemo

/*
* Copyright (c) 2011, Kustaa Nyholm / SpareTimeLabs
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this list
* of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or other
* materials provided with the distribution.
* Neither the name of the Kustaa Nyholm or SpareTimeLabs nor the names of its
* contributors may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*/

package jtermios.testsuite;

import static jtermios.JTermios.*;
import static jtermios.testsuite.TestBase.S;
import static jtermios.testsuite.TestBase.fail;

import jtermios.FDSet;
import jtermios.Termios;
import jtermios.TimeVal;

public class JTermiosDemo {

  public static void run() throws TestFailedException {
    String port = TestBase.getPortName();

    int fd;
    S(fd = open(port, O_RDWR | O_NOCTTY | O_NONBLOCK), "failed to open port");

    Termios opts = new Termios();

    S(tcgetattr(fd, opts));

    opts.c_iflag = IGNBRK | IGNPAR;
    opts.c_oflag = 0;
    opts.c_cflag = CLOCAL | CREAD | CS8;
    opts.c_lflag = 0;
   
    opts.c_cc[VMIN] = 0;
    opts.c_cc[VTIME] = 10;

    cfsetispeed(opts, B9600);
    cfsetospeed(opts, B9600);

    S(tcsetattr(fd, TCSANOW, opts));

    S(tcflush(fd, TCIOFLUSH));

    final String TEST_STRING = "Not so very long text string";
   
    byte[] tx = TEST_STRING.getBytes();
    byte[] rx = new byte[tx.length];
    int l = tx.length;
    S(write(fd, tx, l), "write() failed ");

    FDSet rdset = newFDSet();
    FD_ZERO(rdset);
    FD_SET(fd, rdset);

    TimeVal tout = new TimeVal();
    tout.tv_sec = 10;

    byte buffer[] = new byte[1024];

    while (l > 0) {
      int s;
      S(s = select(fd + 1, rdset, null, null, tout), "select() failed ");
      if (s == 0) {
        fail("Timeout (no dongle connected?)");
      } else {
        int m;
        S(m = read(fd, buffer, l), "read() failed ");
        System.arraycopy(buffer, 0, rx, rx.length - l, m);
        l -= m;
      }
    }

    if (!new String(rx).equals(TEST_STRING)) {
      fail("Didn't receive what we expected (is \"%s\", should be \"%s\")", new String(rx), TEST_STRING);
    }
    S(close(fd));
  }
}
TOP

Related Classes of jtermios.testsuite.JTermiosDemo

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.