jtermios.testsuite.JTermiosDemo Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of filo-firmata Show documentation
Show all versions of filo-firmata Show documentation
FiloFirmata is a client library for the Firmata protocol used with hardware project boards.
/*
* 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.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));
}
}