Skip to content

Commit

Permalink
Merge pull request #15 from NordicSemiconductor/feature/testing-impro…
Browse files Browse the repository at this point in the history
…vements

Bug fixing
  • Loading branch information
philips77 authored Sep 20, 2021
2 parents ce93c2b + e02c0eb commit aeb5f08
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public class FirmwareUpgradeManager implements FirmwareUpgradeController {
//******************************************************************

public enum State {
NONE, VALIDATE, UPLOAD, TEST, RESET, CONFIRM, SUCCESS;
NONE, VALIDATE, UPLOAD, TEST, RESET, CONFIRM;

public boolean isInProgress() {
return this == VALIDATE || this == UPLOAD || this == TEST ||
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,18 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;

import io.runtime.mcumgr.McuMgrCallback;
import io.runtime.mcumgr.dfu.FirmwareUpgradeManager.Settings;
import io.runtime.mcumgr.dfu.FirmwareUpgradeManager.State;
import io.runtime.mcumgr.exception.McuMgrErrorException;
import io.runtime.mcumgr.exception.McuMgrException;
import io.runtime.mcumgr.managers.BasicManager;
import io.runtime.mcumgr.managers.ImageManager;
import io.runtime.mcumgr.response.McuMgrResponse;
import io.runtime.mcumgr.response.img.McuMgrImageStateResponse;
import io.runtime.mcumgr.task.TaskManager;

class EraseSettings extends FirmwareUpgradeTask {
private final static Logger LOG = LoggerFactory.getLogger(EraseSettings.class);
class EraseStorage extends FirmwareUpgradeTask {
private final static Logger LOG = LoggerFactory.getLogger(EraseStorage.class);

EraseSettings() {
EraseStorage() {
}

@Override
Expand All @@ -41,18 +36,22 @@ public void start(final @NotNull TaskManager<Settings, State> performer) {
manager.eraseStorage(new McuMgrCallback<McuMgrResponse>() {
@Override
public void onResponse(@NotNull final McuMgrResponse response) {
LOG.trace("Erase settings response: {}", response.toString());
LOG.trace("Erase storage response: {}", response.toString());

// Fix: If this feature is not supported on the device, this should not cause fail
// the process.

// Check for an error return code.
if (!response.isSuccess()) {
performer.onTaskFailed(EraseSettings.this, new McuMgrErrorException(response.getReturnCode()));
return;
}
performer.onTaskCompleted(EraseSettings.this);
// if (!response.isSuccess()) {
// performer.onTaskFailed(EraseSettings.this, new McuMgrErrorException(response.getReturnCode()));
// return;
// }
performer.onTaskCompleted(EraseStorage.this);
}

@Override
public void onError(@NotNull McuMgrException e) {
performer.onTaskFailed(EraseSettings.this, e);
performer.onTaskFailed(EraseStorage.this, e);
}
});
}
Expand Down
28 changes: 6 additions & 22 deletions mcumgr-core/src/main/java/io/runtime/mcumgr/dfu/task/Reset.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,37 +55,21 @@ public void onConnected() {

@Override
public void onDisconnected() {
LOG.info("Device disconnected");

transport.removeObserver(this);

LOG.info("Device disconnected");
final Runnable reconnect = () -> transport.connect(new McuMgrTransport.ConnectionCallback() {
@Override
public void onConnected() {
performer.onTaskCompleted(Reset.this);
}

@Override
public void onDeferred() {
performer.onTaskCompleted(Reset.this);
}

@Override
public void onError(@NotNull final Throwable t) {
performer.onTaskFailed(Reset.this, new McuMgrException(t));
}
});
// Calculate the delay needed before verification.
// It may have taken 20 sec before the phone realized that it's
// disconnected. No need to wait more, perhaps?
// Calculate the delay need that we need to wait until the swap is complete.
long now = SystemClock.elapsedRealtime();
long timeSinceReset = now - mResetResponseTime;
long remainingTime = settings.estimatedSwapTime - timeSinceReset;
final Runnable complete = () -> performer.onTaskCompleted(Reset.this);

if (remainingTime > 0) {
LOG.trace("Waiting for estimated swap time {} ms", settings.estimatedSwapTime);
new Handler().postDelayed(reconnect, remainingTime);
new Handler().postDelayed(complete, remainingTime);
} else {
reconnect.run();
complete.run();
}
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ public void onResponse(@NotNull final McuMgrImageStateResponse response) {
}
if (resetRequired) {
if (eraseSettings)
performer.enqueue(new EraseSettings());
performer.enqueue(new EraseStorage());
performer.enqueue(new Reset());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ public void pause() {
mStateLiveData.postValue(State.PAUSED);
mManager.pause();
Timber.i("Upload paused");
setLoggingEnabled(true);
setReady();
}
}
Expand All @@ -160,6 +161,7 @@ public void resume() {
mStateLiveData.postValue(State.UPLOADING);
Timber.i("Upload resumed");
mInitialBytes = 0;
setLoggingEnabled(false);
mManager.resume();
}
}
Expand All @@ -176,12 +178,7 @@ public void onUpgradeStarted(final FirmwareUpgradeController controller) {

@Override
public void onStateChanged(final FirmwareUpgradeManager.State prevState, final FirmwareUpgradeManager.State newState) {
// Enable logging for BLE transport
final McuMgrTransport transporter = mManager.getTransporter();
if (transporter instanceof McuMgrBleTransport) {
final McuMgrBleTransport bleTransporter = (McuMgrBleTransport) transporter;
bleTransporter.setLoggingEnabled(newState != FirmwareUpgradeManager.State.UPLOAD);
}
setLoggingEnabled(newState != FirmwareUpgradeManager.State.UPLOAD);
switch (newState) {
case UPLOAD:
Timber.i("Uploading firmware...");
Expand Down Expand Up @@ -223,6 +220,7 @@ public void onUploadProgressChanged(final int bytesSent, final int imageSize, fi
public void onUpgradeCompleted() {
mProgressLiveData.postValue(0);
mStateLiveData.postValue(State.COMPLETE);
setLoggingEnabled(true);
postReady();
}

Expand All @@ -231,13 +229,25 @@ public void onUpgradeCanceled(final FirmwareUpgradeManager.State state) {
mProgressLiveData.postValue(0);
mStateLiveData.postValue(State.IDLE);
mCancelledEvent.post();
setLoggingEnabled(true);
postReady();
}

@Override
public void onUpgradeFailed(final FirmwareUpgradeManager.State state, final McuMgrException error) {
mProgressLiveData.postValue(0);
mErrorLiveData.postValue(error);
setLoggingEnabled(true);
postReady();
}

private void setLoggingEnabled(final boolean enabled) {
super.postReady();

final McuMgrTransport transporter = mManager.getTransporter();
if (transporter instanceof McuMgrBleTransport) {
final McuMgrBleTransport bleTransporter = (McuMgrBleTransport) transporter;
bleTransporter.setLoggingEnabled(enabled);
}
}
}

0 comments on commit aeb5f08

Please sign in to comment.