diff --git a/app/src/main/java/eu/depau/etchdroid/exceptions/UsbWriteException.kt b/app/src/main/java/eu/depau/etchdroid/exceptions/UsbWriteException.kt new file mode 100644 index 0000000..d79681e --- /dev/null +++ b/app/src/main/java/eu/depau/etchdroid/exceptions/UsbWriteException.kt @@ -0,0 +1,8 @@ +package eu.depau.etchdroid.exceptions + +import eu.depau.etchdroid.kotlin_exts.toHRSize +import java.io.IOException + +class UsbWriteException(offset: Long, writtenBytes: Long, exc: Exception) : IOException( + "Write failed at block $offset, ${writtenBytes.toHRSize()} written. Error: $exc", exc +) \ No newline at end of file diff --git a/app/src/main/java/eu/depau/etchdroid/services/UsbApiWriteService.kt b/app/src/main/java/eu/depau/etchdroid/services/UsbApiWriteService.kt index cb3b091..ca2438f 100644 --- a/app/src/main/java/eu/depau/etchdroid/services/UsbApiWriteService.kt +++ b/app/src/main/java/eu/depau/etchdroid/services/UsbApiWriteService.kt @@ -5,6 +5,7 @@ import android.hardware.usb.UsbDevice import android.net.Uri import android.util.Log import com.github.mjdev.libaums.UsbMassStorageDevice +import eu.depau.etchdroid.exceptions.UsbWriteException import eu.depau.etchdroid.kotlin_exts.getFileName import eu.depau.etchdroid.kotlin_exts.name import java.io.BufferedInputStream @@ -69,7 +70,11 @@ abstract class UsbApiWriteService(name: String) : UsbWriteService(name) { byteBuffer.limit(readBlocksBytes) // Write the buffer to the device - blockDev.write(offset, byteBuffer) + try { + blockDev.write(offset, byteBuffer) + } catch (e: Exception) { + throw UsbWriteException(offset, writtenBytes, e) + } offset += (readBlocksBytes) / blockDev.blockSize writtenBytes += readBlocksBytes