package de.uniluebeck.itm.wsn.drivers.pacemate;
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.EraseFlashOperation;
import de.uniluebeck.itm.wsn.drivers.core.operation.OperationListener;
import de.uniluebeck.itm.wsn.drivers.core.operation.TimeLimitedOperation;
import de.uniluebeck.itm.wsn.drivers.core.serialport.SerialPortProgrammingMode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Nullable;
public class PacemateEraseFlashOperation extends TimeLimitedOperation<Void> implements EraseFlashOperation {
private static final Logger log = LoggerFactory.getLogger(PacemateEraseFlashOperation.class);
private static final int START_ADDRESS = 3;
private static final int END_ADDRESS = 14;
private final PacemateHelper helper;
@Inject
public PacemateEraseFlashOperation(final TimeLimiter timeLimiter,
final PacemateHelper helper,
@Assisted final long timeoutMillis,
@Assisted @Nullable final OperationListener<Void> operationCallback) {
super(timeLimiter, timeoutMillis, operationCallback);
this.helper = helper;
}
@Override
@SerialPortProgrammingMode
protected Void callInternal() throws Exception {
log.trace("Erasing whole flash...");
helper.configureFlash(START_ADDRESS, END_ADDRESS);
progress(0.25f);
helper.eraseFlash(START_ADDRESS, END_ADDRESS);
log.trace("Flash completely erased");
return null;
}
}