# External Integrations **Analysis Date:** 2026-04-16 ## Hardware/Device **WCH CH34X Series USB-to-Serial Chips:** - **CH340, CH341, CH342, CH343, CH344, CH347** - Standard USB-to-serial converters - **CH9101, CH9102, CH9103, CH9104** - Newer generation USB-to-serial chips - **CH9143** - Multi-port USB-to-serial chip **SDK/Driver:** - Library: `CH34XUARTDriver.jar` (local JAR, 140KB) - Location: `android/libs/CH34XUARTDriver.jar` - Package: `cn.wch.uartlib` - Manager: `WCHUARTManager.getInstance()` - Singleton pattern **USB Host Protocol:** - Android USB Host API (`android.hardware.usb.UsbManager`) - Feature declaration: `android.hardware.usb.host` (optional, in `android/src/main/AndroidManifest.xml`) - Permission model: Runtime USB permission via `WCHUARTManager.requestPermission()` **VID/PID:** - Default VID/PID managed by WCH driver - Custom VID/PID supported via `Ch34Manager.addNewHardware(vid, pid)` - maps to `WCHUARTManager.addNewHardware()` ## Communication Channels **MethodChannel (`'ch34'`):** - Location: `lib/src/ch34_method_channel.dart` (Dart), `android/src/main/java/com/example/ch34/Ch34Plugin.java` (Java) - 33 methods mapped: `enumDevice`, `openDevice`, `requestPermission`, `writeData`, `readData`, `setDtr`, `setRts`, `setBreak`, `enableGpio`, `setGpioVal`, `getGpioVal`, etc. - Error codes: `ENUM_DEVICE_FAILED`, `OPEN_DEVICE_FAILED`, `PERMISSION_DENIED`, `WRITE_DATA_FAILED`, `GPIO_CHECK_FAILED`, etc. **EventChannel (`'ch34/data'`):** - Location: `android/src/main/java/com/example/ch34/Ch34DataStreamHandler.java` - Payload: `byte[]` serial data bytes - Registered via `manager.registerDataCallback(device, callback)` **EventChannel (`'ch34/modem'`):** - Location: `android/src/main/java/com/example/ch34/Ch34ModemStreamHandler.java` - Payload: Map with `cts`, `dsr`, `ri`, `dcd` boolean values - Registered via `manager.registerModemStatusCallback(device, IModemStatus)` **EventChannel (`'ch34/usb_state'`):** - Location: `android/src/main/java/com/example/ch34/Ch34UsbStateStreamHandler.java` - Payload: Map with `deviceName` (String) and `connected` (boolean) - Triggered by Android broadcast receiver (`UsbManager.ACTION_USB_DEVICE_ATTACHED`, `UsbManager.ACTION_USB_DEVICE_DETACHED`) ## Data Sources **Serial Data:** - Read: `Ch34Manager.readData(deviceName, serialNumber)` -> `Uint8List` (blocking) - Stream: `Ch34Manager.registerDataCallback(deviceName, serialNumber, onData)` -> EventChannel push - Write: `Ch34Manager.writeData(deviceName, serialNumber, data)` -> `int` bytes written **GPIO Data:** - Query: `Ch34Manager.queryGpioStatus(deviceName, gpioIndex)` -> `GpioStatus` - Query all: `Ch34Manager.queryAllGpioStatus(deviceName)` -> `List` - Control: `Ch34Manager.setGpioVal(deviceName, gpioIndex, value)` / `Ch34Manager.getGpioVal(deviceName, gpioIndex)` **Modem Status:** - `ModemStatus` class with fields: `cts` (Clear To Send), `dsr` (Data Set Ready), `ri` (Ring Indicator), `dcd` (Data Carrier Detect) - Registered via `Ch34Manager.registerModemStatusCallback(deviceName, onModemStatus)` **Error Types:** - `SerialErrorType.framingError` - Framing error - `SerialErrorType.parityError` - Parity error - `SerialErrorType.overrunError` - Overrun error - `SerialErrorType.breakInterrupt` - Break interrupt - Query via `Ch34Manager.querySerialErrorCount(deviceName, serialNumber, errorType)` ## Authentication **USB Device Permission:** - Android runtime USB permission dialog via `WCHUARTManager.requestPermission(context, device)` - No API keys, tokens, or credentials required - Permission flow: `openDevice` -> if no permission, auto-request -> retry after 2000ms delay ## Third-party Services **None.** This is a pure hardware driver plugin with no external API integrations, cloud services, or network dependencies. ## CI/CD & Deployment **Hosting:** Not applicable (Flutter plugin package, published to pub.dev) **CI Pipeline:** Not detected (no `.github/`, `.gitlab-ci.yml`, or `.circleci/` found) ## Webhooks & Callbacks **Incoming:** None **Outgoing:** None --- *Integration audit: 2026-04-16*