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

9.2 KiB

Codebase Structure

Analysis Date: 2026-04-16

Directory Layout

ch34/                              # Flutter plugin root
├── lib/                           # Dart source code
│   ├── ch34.dart                  # Main library entry point (exports)
│   ├── ch34_platform_interface.dart  # Backward compat: re-exports src/
│   ├── ch34_method_channel.dart   # Backward compat: re-exports src/
│   └── src/                       # Core implementation
│       ├── ch34_manager.dart      # Public static API facade
│       ├── ch34_platform_interface.dart  # Abstract platform interface
│       ├── ch34_method_channel.dart      # MethodChannel implementation
│       └── types/
│           └── ch34_types.dart    # All data types and enums
├── android/                       # Android native code
│   ├── build.gradle               # Android library build config
│   ├── settings.gradle            # Gradle settings
│   ├── libs/                      # Native dependency JARs
│   │   └── CH34XUARTDriver.jar    # WCH UART library
│   └── src/
│       ├── main/java/com/example/ch34/
│       │   ├── Ch34Plugin.java           # Main plugin + MethodCallHandler
│       │   ├── Ch34DataStreamHandler.java # Data EventChannel handler
│       │   ├── Ch34ModemStreamHandler.java # Modem EventChannel handler
│       │   ├── Ch34UsbStateStreamHandler.java # USB hotplug handler
│       │   └── Ch34TypeConverter.java    # Type conversion utilities
│       └── test/java/com/example/ch34/
│           └── Ch34PluginTest.java       # Unit tests
├── example/                       # Example Flutter app
│   ├── lib/
│   │   └── main.dart              # Example app with device scan/connect/send
│   ├── test/
│   │   └── widget_test.dart       # Widget test (stub)
│   └── integration_test/
│       └── plugin_integration_test.dart  # Integration test
├── test/                          # Plugin unit tests
│   ├── ch34_test.dart             # Platform interface + manager tests
│   └── ch34_method_channel_test.dart     # MethodChannel mock tests
├── docs/
│   └── CH34X-api_docs.md          # WCH API documentation reference
├── pubspec.yaml                   # Plugin package manifest
├── analysis_options.yaml          # Dart linting config
├── CHANGELOG.md                   # Version history
├── LICENSE                        # License file
├── README.md                      # Plugin documentation
└── .gitignore                     # Git ignore rules

Directory Purposes

lib/ - Dart Source

  • Purpose: All Dart code for the Flutter plugin
  • Key files:
    • lib/ch34.dart - Primary consumer import: import 'package:ch34/ch34.dart';
    • lib/src/ch34_manager.dart - Static facade, all public APIs
    • lib/src/ch34_platform_interface.dart - Abstract interface with 33 methods
    • lib/src/ch34_method_channel.dart - MethodChannel + EventChannel implementation
    • lib/src/types/ch34_types.dart - Shared data models and enums

android/ - Android Native

  • Purpose: Java implementation bridging to WCH CH34X UART library
  • Key files:
    • android/src/main/java/com/example/ch34/Ch34Plugin.java - Plugin entry point (788 lines)
    • android/build.gradle - Library configuration (compileSdk 34, minSdk 21, Java 8)
    • android/libs/CH34XUARTDriver.jar - WCH vendor SDK (binary dependency)

example/ - Sample Application

  • Purpose: Demonstrates plugin usage for development and testing
  • Key files:
    • example/lib/main.dart - Full working example: scan devices, open, set params, send/receive data

test/ - Plugin Tests

  • Purpose: Unit tests for the Dart plugin code
  • Contains: MethodChannel mock tests, platform interface mock implementation

Key File Locations

Entry Points:

  • lib/ch34.dart: Main library entry, consumer-facing import
  • android/src/main/java/com/example/ch34/Ch34Plugin.java: Android plugin entry, registered via pubspec.yaml

Configuration:

  • pubspec.yaml: Plugin declaration, Android platform registration (package: com.example.ch34, pluginClass: Ch34Plugin)
  • android/build.gradle: Android library build configuration
  • analysis_options.yaml: Dart linting (extends flutter_lints)

Core Logic:

  • lib/src/ch34_manager.dart: Static API facade (all consumer methods)
  • lib/src/ch34_platform_interface.dart: Abstract interface contract
  • lib/src/ch34_method_channel.dart: Channel communication implementation
  • android/src/main/java/com/example/ch34/Ch34Plugin.java: Native bridge logic

Types:

  • lib/src/types/ch34_types.dart: All data classes (UsbDeviceInfo, SerialParameter, ModemStatus, GpioStatus) and enums (DataBits, StopBits, Parity, GpioDirection, GpioValue, SerialErrorType)

Testing:

  • test/ch34_method_channel_test.dart: Unit tests with mock platform
  • test/ch34_test.dart: Integration-style tests with real MethodChannel mock
  • example/integration_test/plugin_integration_test.dart: On-device integration test

Naming Conventions

Files:

  • Dart: snake_case.dart for all files (e.g., ch34_manager.dart, ch34_types.dart)
  • Java: PascalCase.java for all classes (e.g., Ch34Plugin.java, Ch34TypeConverter.java)

Dart Classes:

  • Public API class: Ch34Manager (static methods, facade pattern)
  • Platform interface: Ch34Platform (abstract, extends PlatformInterface)
  • Channel implementation: MethodChannelCh34 (extends Ch34Platform)
  • Data types: UsbDeviceInfo, SerialParameter, ModemStatus, GpioStatus
  • Enums: DataBits, StopBits, Parity, GpioDirection, GpioValue, SerialErrorType
  • Exception: Ch34Exception

Java Classes:

  • Main plugin: Ch34Plugin (implements FlutterPlugin, MethodCallHandler)
  • Stream handlers: Ch34DataStreamHandler, Ch34ModemStreamHandler, Ch34UsbStateStreamHandler
  • Utility: Ch34TypeConverter (static methods only, private constructor)

MethodChannel names:

  • Method channel: 'ch34'
  • Data event channel: 'ch34/data'
  • Modem event channel: 'ch34/modem'
  • USB state event channel: 'ch34/usb_state'

Method names: Match Dart method names exactly (e.g., enumDevice, openDevice, setSerialParameter, writeData, readData)

Where to Add New Code

New Dart API Method:

  1. Add abstract method signature to lib/src/ch34_platform_interface.dart
  2. Add concrete implementation to lib/src/ch34_method_channel.dart (using methodChannel.invokeMethod())
  3. Add static wrapper to lib/src/ch34_manager.dart (delegating to Ch34Platform.instance)
  4. Add mock implementation in test/ch34_method_channel_test.dart for testing
  5. Add native handler in android/src/main/java/com/example/ch34/Ch34Plugin.java

New EventChannel (streaming):

  1. Create new *StreamHandler.java in android/src/main/java/com/example/ch34/
  2. Register in Ch34Plugin.onAttachedToEngine()
  3. Add EventChannel and StreamSubscription in lib/src/ch34_method_channel.dart
  4. Add platform interface methods to Ch34Platform
  5. Add static wrappers to Ch34Manager

New Data Type:

  • Add to lib/src/types/ch34_types.dart
  • Add corresponding conversion in android/src/main/java/com/example/ch34/Ch34TypeConverter.java

New Native Utility:

  • Add to android/src/main/java/com/example/ch34/ as a new Java class or extend existing

Module Boundaries

Dart Layer

lib/ch34.dart (exports)
    |
    v
lib/src/ch34_manager.dart (static facade)
    |
    v
lib/src/ch34_platform_interface.dart (abstract contract)
    |
    v
lib/src/ch34_method_channel.dart (concrete implementation)
    |
    +---> lib/src/types/ch34_types.dart (shared types)

Native Layer

Ch34Plugin.java (MethodCallHandler + 3 EventChannels)
    |
    +---> Ch34DataStreamHandler.java (data streaming)
    +---> Ch34ModemStreamHandler.java (modem status streaming)
    +---> Ch34UsbStateStreamHandler.java (USB hotplug streaming)
    +---> Ch34TypeConverter.java (type conversion utilities)
    |
    v
CH34XUARTDriver.jar (WCH vendor SDK)

Platform Bridge

Dart: MethodChannel('ch34') <---> Java: Ch34Plugin (MethodCallHandler)
Dart: EventChannel('ch34/data') <---> Java: Ch34DataStreamHandler
Dart: EventChannel('ch34/modem') <---> Java: Ch34ModemStreamHandler
Dart: EventChannel('ch34/usb_state') <---> Java: Ch34UsbStateStreamHandler

Special Directories

android/libs/:

  • Purpose: Contains binary JAR dependency (CH34XUARTDriver.jar)
  • Generated: No, committed to repo
  • Referenced by: android/build.gradle via flatDir repository

example/:

  • Purpose: Self-contained Flutter app demonstrating plugin usage
  • Generated: No, committed to repo
  • Note: The example app package is ch34_example

docs/:

  • Purpose: API documentation reference for WCH WCHUARTManager
  • Contains: CH34X-api_docs.md - comprehensive API documentation in Markdown

lib/ root-level files:

  • Purpose: Backward compatibility re-exports
  • lib/ch34_platform_interface.dart exports src/ch34_platform_interface.dart
  • lib/ch34_method_channel.dart exports src/ch34_method_channel.dart

Structure analysis: 2026-04-16