Improve USB disconnection handling and add payload length validation for USB frames

This commit is contained in:
just_stuff_tm
2026-03-02 03:24:19 -05:00
committed by just-stuff-tm
parent 3542adad1d
commit 3cec3dc233
2 changed files with 13 additions and 2 deletions
@@ -105,8 +105,12 @@ class MainActivity : FlutterActivity() {
"connect" -> handleUsbConnect(call, result) "connect" -> handleUsbConnect(call, result)
"write" -> handleUsbWrite(call, result) "write" -> handleUsbWrite(call, result)
"disconnect" -> { "disconnect" -> {
closeUsbConnection() usbIoExecutor.execute {
result.success(null) closeUsbConnection()
mainHandler.post {
result.success(null)
}
}
} }
else -> result.notImplemented() else -> result.notImplemented()
} }
+7
View File
@@ -6,6 +6,13 @@ const int usbSerialHeaderLength = 3;
const int usbSerialMaxPayloadLength = 172; const int usbSerialMaxPayloadLength = 172;
Uint8List wrapUsbSerialTxFrame(Uint8List payload) { 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); final packet = Uint8List(usbSerialHeaderLength + payload.length);
packet[0] = usbSerialTxFrameStart; packet[0] = usbSerialTxFrameStart;
packet[1] = payload.length & 0xff; packet[1] = payload.length & 0xff;