Files
ch34/.planning/codebase/INTEGRATIONS.md
2026-04-21 12:57:40 +08:00

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, 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<GpioStatus>
  • 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