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.*;
import de.uniluebeck.itm.wsn.drivers.core.serialport.SerialPortProgrammingMode;
import javax.annotation.Nullable;
/**
* This operation fills the byte array of the given configuration with 0x00.
*
* @author Malte Legenhausen
* @author Daniel Bimschas
*/
public class MockEraseFlashOperation extends TimeLimitedOperation<Void> implements EraseFlashOperation {
/**
* The configuration that contains the byte array that has to be erased.
*/
private final MockConfiguration configuration;
@Inject
public MockEraseFlashOperation(final TimeLimiter timeLimiter,
final MockConfiguration configuration,
@Assisted final long timeoutMillis,
@Assisted @Nullable final OperationListener<Void> operationCallback) {
super(timeLimiter, timeoutMillis, operationCallback);
this.configuration = configuration;
}
@Override
@SerialPortProgrammingMode
protected Void callInternal() throws Exception {
final byte[] flashRom = configuration.getFlashRom();
final float worked = 1.0f / flashRom.length;
for (int i = 0; i < flashRom.length; ++i) {
Thread.sleep(100);
flashRom[i] = 0x00;
progress(worked);
}
configuration.setFlashRom(flashRom);
return null;
}
}