diff --git a/android/app/src/main/java/nl/eddydevink/sylda/BleRelayManager.kt b/android/app/src/main/java/nl/eddydevink/sylda/BleRelayManager.kt index 846e382..e932aba 100644 --- a/android/app/src/main/java/nl/eddydevink/sylda/BleRelayManager.kt +++ b/android/app/src/main/java/nl/eddydevink/sylda/BleRelayManager.kt @@ -194,12 +194,12 @@ class BleRelayManager( } @SuppressLint("MissingPermission") - fun sendOtaData(data: ByteArray) { - val char = otaCharacteristic ?: return - val gatt = bluetoothGatt ?: return + fun sendOtaData(data: ByteArray): Boolean { + val char = otaCharacteristic ?: return false + val gatt = bluetoothGatt ?: return false char.value = data char.writeType = BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE - gatt.writeCharacteristic(char) + return gatt.writeCharacteristic(char) } @SuppressLint("MissingPermission") diff --git a/android/app/src/main/java/nl/eddydevink/sylda/OtaManager.kt b/android/app/src/main/java/nl/eddydevink/sylda/OtaManager.kt index ab99f57..eb0fffb 100644 --- a/android/app/src/main/java/nl/eddydevink/sylda/OtaManager.kt +++ b/android/app/src/main/java/nl/eddydevink/sylda/OtaManager.kt @@ -105,7 +105,13 @@ class OtaManager( var retries = 0 while (retries < MAX_RETRIES) { - relayManager.sendOtaData(packet.array()) + val writeOk = relayManager.sendOtaData(packet.array()) + if (!writeOk) { + Log.w(TAG, "writeCharacteristic returned false for chunk $seq, retrying") + retries++ + delay(100) + continue + } Log.d(TAG, "Sent chunk $seq/$totalChunks ($chunkSize bytes) attempt ${retries + 1}") try {