package de.uniluebeck.itm.wsn.drivers.telosb;
import com.google.inject.Inject;
import de.uniluebeck.itm.wsn.drivers.core.serialport.AbstractSerialPortConnection;
import gnu.io.SerialPort;
import gnu.io.UnsupportedCommOperationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* TelosB connection.
*
* @author Malte Legenhausen
* @author Daniel Bimschas
*/
public class TelosbSerialPortConnection extends AbstractSerialPortConnection {
private static final Logger log = LoggerFactory.getLogger(TelosbSerialPortConnection.class);
public static final int NORMAL_BAUD_RATE = 115200;
public static final int PROGRAM_BAUD_RATE = 9600;
public static final int NORMAL_PARITY_BIT = SerialPort.PARITY_NONE;
public static final int PROGRAM_PARITY_BIT = SerialPort.PARITY_EVEN;
@Inject
public TelosbSerialPortConnection() {
setProgramBaudRate(PROGRAM_BAUD_RATE);
setNormalBaudRate(NORMAL_BAUD_RATE);
setNormalParityBit(NORMAL_PARITY_BIT);
setProgramParityBit(PROGRAM_PARITY_BIT);
}
@Override
public void setSerialPortMode(final SerialPortMode mode) {
log.trace("TelosbSerialPortConnection.setSerialPortMode(mode={})", mode);
try {
final int baudrate = mode == SerialPortMode.PROGRAM ? programBaudRate : normalBaudRate;
final int parityBit = mode == SerialPortMode.PROGRAM ? programParityBit : normalParityBit;
serialPort.setSerialPortParams(baudrate, dataBits, stopBits, parityBit);
log.trace("baudrate={},dataBits={},stopBits={},parityBit={}",
serialPort.getBaudRate(),
serialPort.getDataBits(),
serialPort.getStopBits(),
serialPort.getParity()
);
} catch (final UnsupportedCommOperationException e) {
log.warn("Problem while setting serial port params.", e);
}
serialPort.setDTR(true);
serialPort.setRTS(true);
log.debug("COM-Port parameters set to baud rate: " + serialPort.getBaudRate());
}
}