package de.uniluebeck.itm.wsn.drivers.mock; 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.OperationListener; import de.uniluebeck.itm.wsn.drivers.core.operation.ProgramOperation; import de.uniluebeck.itm.wsn.drivers.core.operation.TimeLimitedOperation; import de.uniluebeck.itm.wsn.drivers.core.serialport.SerialPortProgrammingMode; import javax.annotation.Nullable; import java.util.Arrays; /** * The operation for programming the <code>MockDevice</code>. * * @author Malte Legenhausen * @author Daniel Bimschas */ public class MockProgramOperation extends TimeLimitedOperation<Void> implements ProgramOperation { private final MockDevice device; /** * The binary image that has to be written to the device. */ private final byte[] binaryImage; /** * The configuration that will store the binary image. */ private MockConfiguration configuration; @Inject public MockProgramOperation(final TimeLimiter timeLimiter, final MockConfiguration configuration, final MockDevice device, @Assisted byte[] binaryImage, @Assisted final long timeoutMillis, @Assisted @Nullable final OperationListener<Void> operationCallback) { super(timeLimiter, timeoutMillis, operationCallback); this.configuration = configuration; this.device = device; this.binaryImage = binaryImage; } @Override @SerialPortProgrammingMode protected Void callInternal() throws Exception { for (int i = 0; i < 10; i++) { Thread.sleep(1000); progress(i * 0.1f); } configuration.setFlashRom(Arrays.copyOf(binaryImage, binaryImage.length)); device.reset(); return null; } }