From 518e2438e80f7dd54be90f78701cece3b1c3ba41 Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Wed, 6 Jan 2021 11:10:01 +0800 Subject: [PATCH] fix autobug: don't fail updates (for now) if the spiffs has problems --- .../geeksville/mesh/service/MeshService.kt | 2 +- .../mesh/service/SoftwareUpdateService.kt | 24 +++++++++++++------ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt index bde6821fc..72e6ef6f1 100644 --- a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt +++ b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt @@ -892,7 +892,7 @@ class MeshService : Service(), Logging { // Do our startup init try { connectTimeMsec = System.currentTimeMillis() - SoftwareUpdateService.sendProgress(this, ProgressNotStarted) // Kinda crufty way of reiniting software update + SoftwareUpdateService.sendProgress(this, ProgressNotStarted, true) // Kinda crufty way of reiniting software update startConfig() } catch (ex: InvalidProtocolBufferException) { diff --git a/app/src/main/java/com/geeksville/mesh/service/SoftwareUpdateService.kt b/app/src/main/java/com/geeksville/mesh/service/SoftwareUpdateService.kt index 84bcfbc1a..6504601bf 100644 --- a/app/src/main/java/com/geeksville/mesh/service/SoftwareUpdateService.kt +++ b/app/src/main/java/com/geeksville/mesh/service/SoftwareUpdateService.kt @@ -194,8 +194,16 @@ class SoftwareUpdateService : JobIntentService(), Logging { } - fun sendProgress(context: Context, p: Int) { - if(progress != p) { + /** + * Update our progress indication for GUIs + * + * @param isAppload if false, we don't report failure indications (because we consider spiffs non critical for now). But do report to analytics + */ + fun sendProgress(context: Context, p: Int, isAppload: Boolean) { + if(!isAppload && progress < 0) + reportError("Error while writing spiffs $progress") // See if this is happening in the wild + + if(progress != p && (progress >= 0 || isAppload)) { progress = p val intent = Intent(ACTION_UPDATE_PROGRESS).putExtra( @@ -280,7 +288,7 @@ class SoftwareUpdateService : JobIntentService(), Logging { errormsg("Ignoring failure to update spiffs on old appload") } assets.appLoad?.let { doUpdate(context, sync, it, FLASH_REGION_APPLOAD) } - sendProgress(context, ProgressSuccess) + sendProgress(context, ProgressSuccess, true) } // writable region codes in the ESP32 update code @@ -292,6 +300,8 @@ class SoftwareUpdateService : JobIntentService(), Logging { * you can use it for the software update. */ private fun doUpdate(context: Context, sync: SafeBluetooth, assetName: String, flashRegion: Int = FLASH_REGION_APPLOAD) { + val isAppload = flashRegion == FLASH_REGION_APPLOAD + try { val g = sync.gatt!! val service = g.services.find { it.uuid == SW_UPDATE_UUID } @@ -306,7 +316,7 @@ class SoftwareUpdateService : JobIntentService(), Logging { info("Starting firmware update for $assetName, flash region $flashRegion") - sendProgress(context,0) + sendProgress(context,0, isAppload) val totalSizeDesc = getCharacteristic(SW_UPDATE_TOTALSIZE_CHARACTER) val dataDesc = getCharacteristic(SW_UPDATE_DATA_CHARACTER) val crc32Desc = getCharacteristic(SW_UPDATE_CRC32_CHARACTER) @@ -354,7 +364,7 @@ class SoftwareUpdateService : JobIntentService(), Logging { // yet val maxProgress = if(flashRegion != FLASH_REGION_APPLOAD) 50 else 100 - sendProgress(context, firmwareNumSent * maxProgress / firmwareSize) + sendProgress(context, firmwareNumSent * maxProgress / firmwareSize, isAppload) debug("sending block ${progress}%") var blockSize = 512 - 3 // Max size MTU excluding framing @@ -384,7 +394,7 @@ class SoftwareUpdateService : JobIntentService(), Logging { sync.readCharacteristic(updateResultDesc) .getIntValue(BluetoothGattCharacteristic.FORMAT_UINT8, 0) if (updateResult != 0) { - sendProgress(context, ProgressUpdateFailed) + sendProgress(context, ProgressUpdateFailed, isAppload) throw Exception("Device update failed, reason=$updateResult") } @@ -395,7 +405,7 @@ class SoftwareUpdateService : JobIntentService(), Logging { } } } catch (ex: BLEException) { - sendProgress(context, ProgressBleException) + sendProgress(context, ProgressBleException, isAppload) throw ex // Unexpected BLE exception } }