package de.uniluebeck.itm.wsn.drivers.isense; import com.google.common.util.concurrent.TimeLimiter; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import de.uniluebeck.itm.wsn.drivers.core.operation.*; import de.uniluebeck.itm.wsn.drivers.core.serialport.SerialPortConnection; import de.uniluebeck.itm.wsn.drivers.core.serialport.SerialPortProgrammingMode; import gnu.io.SerialPort; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.annotation.Nullable; public class iSenseResetOperation extends TimeLimitedOperation<Void> implements ResetOperation { private static final Logger log = LoggerFactory.getLogger(iSenseResetOperation.class); private final SerialPortConnection connection; @Inject public iSenseResetOperation(final TimeLimiter timeLimiter, final SerialPortConnection connection, @Assisted final long timeoutMillis, @Assisted @Nullable final OperationListener<Void> operationListener) { super(timeLimiter, timeoutMillis, operationListener); this.connection = connection; } @Override @SerialPortProgrammingMode protected Void callInternal() throws Exception { log.debug("Resetting device..."); SerialPort serialPort = connection.getSerialPort(); serialPort.setDTR(true); progress(0.5f); Thread.sleep(200); serialPort.setDTR(false); progress(0.5f); log.debug("Device reset"); return null; } }