4.0 KiB
4.0 KiB
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, inandroid/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 toWCHUARTManager.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,dcdboolean 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) andconnected(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)->intbytes written
GPIO Data:
- Query:
Ch34Manager.queryGpioStatus(deviceName, gpioIndex)->GpioStatus - Query all:
Ch34Manager.queryAllGpioStatus(deviceName)->List<GpioStatus> - Control:
Ch34Manager.setGpioVal(deviceName, gpioIndex, value)/Ch34Manager.getGpioVal(deviceName, gpioIndex)
Modem Status:
ModemStatusclass 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 errorSerialErrorType.parityError- Parity errorSerialErrorType.overrunError- Overrun errorSerialErrorType.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