/** * @param parity 'N' for none, 'E' for even, 'O' for odd, 'M' for mark, 'S' for space ('N' is the * default) * @param dataBits 8 is the default * @param stopBits 1.0, 1.5, or 2.0 (1.0 is the default) */ public Serial( PApplet parent, String portName, int baudRate, char parity, int dataBits, float stopBits) { this.parent = parent; parent.registerMethod("dispose", this); parent.registerMethod("pre", this); // setup parity if (parity == 'O') { parity = SerialPort.PARITY_ODD; } else if (parity == 'E') { parity = SerialPort.PARITY_EVEN; } else if (parity == 'M') { parity = SerialPort.PARITY_MARK; } else if (parity == 'S') { parity = SerialPort.PARITY_SPACE; } else { parity = SerialPort.PARITY_NONE; } // setup stop bits int stopBitsIdx = SerialPort.STOPBITS_1; if (stopBits == 1.5f) { stopBitsIdx = SerialPort.STOPBITS_1_5; } else if (stopBits == 2) { stopBitsIdx = SerialPort.STOPBITS_2; } port = new SerialPort(portName); try { // the native open() call is not using O_NONBLOCK, so this might block for certain operations // (see write()) port.openPort(); port.setParams(baudRate, dataBits, stopBitsIdx, parity); // we could register more events here port.addEventListener(this, SerialPort.MASK_RXCHAR); } catch (SerialPortException e) { // this used to be a RuntimeException before, so stick with it throw new RuntimeException( "Error opening serial port " + e.getPortName() + ": " + e.getExceptionType()); } serialEventMethod = findCallback("serialEvent"); serialAvailableMethod = findCallback("serialAvailable"); }