diff --git a/android/app/src/main/kotlin/com/meshcore/meshcore_open/MainActivity.kt b/android/app/src/main/kotlin/com/meshcore/meshcore_open/MainActivity.kt index 3d91e71..5955744 100644 --- a/android/app/src/main/kotlin/com/meshcore/meshcore_open/MainActivity.kt +++ b/android/app/src/main/kotlin/com/meshcore/meshcore_open/MainActivity.kt @@ -105,8 +105,12 @@ class MainActivity : FlutterActivity() { "connect" -> handleUsbConnect(call, result) "write" -> handleUsbWrite(call, result) "disconnect" -> { - closeUsbConnection() - result.success(null) + usbIoExecutor.execute { + closeUsbConnection() + mainHandler.post { + result.success(null) + } + } } else -> result.notImplemented() } diff --git a/lib/services/usb_serial_frame_codec.dart b/lib/services/usb_serial_frame_codec.dart index eb4c41e..ebe1733 100644 --- a/lib/services/usb_serial_frame_codec.dart +++ b/lib/services/usb_serial_frame_codec.dart @@ -6,6 +6,13 @@ const int usbSerialHeaderLength = 3; const int usbSerialMaxPayloadLength = 172; Uint8List wrapUsbSerialTxFrame(Uint8List payload) { + if (payload.length > usbSerialMaxPayloadLength) { + throw ArgumentError.value( + payload.length, + 'payload.length', + 'USB serial payload exceeds $usbSerialMaxPayloadLength bytes', + ); + } final packet = Uint8List(usbSerialHeaderLength + payload.length); packet[0] = usbSerialTxFrameStart; packet[1] = payload.length & 0xff;