diff --git a/.codegraph/.gitignore b/.codegraph/.gitignore
index 9de0f16..818241e 100644
--- a/.codegraph/.gitignore
+++ b/.codegraph/.gitignore
@@ -14,3 +14,4 @@ cache/
# Hook markers
.dirty
+daemon.pid
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 41cc7d8..8f58d67 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,15 @@
-## 0.0.1
+## 1.0.0
-* TODO: Describe initial release.
+- 重构插件代码,完整对接 CH934X Android SDK 文档中定义的全部接口:
+ - 设备查找:`getDeviceList` / `getSerialNumber` / `getDeviceType` / `getSerialPortList`
+ - 设备打开与关闭:`openPort` / `closePort`
+ - 串口读写:`read` / `write` / `dataStream`(持续接收)
+ - GPIO:`setGpioOutput` / `getGpioInput`
+ - Modem 控制:`setModemControl` / `getModemStatus`
+ - 异常回调:`setExceptionCallback`
+- 引入 `Ch934xDeviceType` / `ModemStatus` / `Ch934xException` / `Ch934xPortTarget`
+ 等模型类,统一跨平台语义。
+- Android 原生层通过反射方式桥接 `CH934XLib.jar`,降低对未公开 API 的耦合。
+- 新增 `example/lib/main.dart` 演示完整的设备扫描 / 串口打开 / 数据收发 / 异常监听流程。
+- 完善 Dart 单元测试与平台单元测试,默认 11 个测试用例全部通过。
+- 详细使用文档见 `docs/CH934X_Plugin_使用说明.md`。
diff --git a/README.md b/README.md
index cc567d2..f90bbad 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,30 @@
# ch934x_serial
-A new Flutter project.
+Flutter 插件:封装南京沁恒微电子 **CH934X 系列** USB 转多串口芯片的
+Android SDK,提供设备查找、串口读写、GPIO 与 Modem 控制等能力。
-## Getting Started
+## 文档
-This project is a starting point for a Flutter
-[plug-in package](https://flutter.dev/to/develop-plugins),
-a specialized package that includes platform-specific implementation code for
-Android and/or iOS.
+- 详细使用说明:[`docs/CH934X_Plugin_使用说明.md`](docs/CH934X_Plugin_使用说明.md)
+- 原 Android SDK 接口规范:[`docs/CH934X_Android_开发说明.md`](docs/CH934X_Android_开发说明.md)
-For help getting started with Flutter development, view the
-[online documentation](https://docs.flutter.dev), which offers tutorials,
-samples, guidance on mobile development, and a full API reference.
+## 快速上手
+```yaml
+dependencies:
+ ch934x_serial: ^1.0.0
+```
+
+```dart
+import 'package:ch934x_serial/ch934x_serial.dart';
+
+final plugin = Ch934xSerial();
+final devices = await plugin.getDeviceList();
+```
+
+完整 API 列表与示例请阅读上面的使用说明。
+
+## 平台支持
+
+- ✅ Android(基于 `CH934XLib.jar` 反射桥接)
+- ❌ iOS / Web / Desktop(暂未实现)
diff --git a/android/build.gradle.kts b/android/build.gradle.kts
index ffec0bd..16a117c 100644
--- a/android/build.gradle.kts
+++ b/android/build.gradle.kts
@@ -50,6 +50,8 @@ android {
}
dependencies {
+ // CH934X Android SDK,随插件发布。
+ implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
testImplementation("junit:junit:4.13.2")
testImplementation("org.mockito:mockito-core:5.0.0")
}
diff --git a/android/libs/CH934XLib.jar b/android/libs/CH934XLib.jar
new file mode 100644
index 0000000..888ac41
Binary files /dev/null and b/android/libs/CH934XLib.jar differ
diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml
index 4f9006f..a30bd23 100644
--- a/android/src/main/AndroidManifest.xml
+++ b/android/src/main/AndroidManifest.xml
@@ -1,3 +1,8 @@
+ package="com.xiarui.ch934x_serial">
+
+
+
diff --git a/android/src/main/java/com/xiarui/ch934x_serial/Ch934xSerialPlugin.java b/android/src/main/java/com/xiarui/ch934x_serial/Ch934xSerialPlugin.java
index 04e6e82..8e21c56 100644
--- a/android/src/main/java/com/xiarui/ch934x_serial/Ch934xSerialPlugin.java
+++ b/android/src/main/java/com/xiarui/ch934x_serial/Ch934xSerialPlugin.java
@@ -1,6 +1,18 @@
package com.xiarui.ch934x_serial;
+import android.content.Context;
+import android.hardware.usb.UsbDevice;
+import android.hardware.usb.UsbManager;
+
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.plugin.common.MethodCall;
@@ -8,31 +20,460 @@ import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
-/** Ch934xSerialPlugin */
+/**
+ * CH934X 系列 USB 转串口芯片的 Flutter 插件实现。
+ *
+ *
本类不直接引用 {@code CH934XLib.jar} 中的具体类型,以避免在
+ * 编译期对未公开 API 形成强耦合;所有原生调用均通过反射桥接
+ * {@code com.example.ch934xserial} 包下的 {@code UsbHelper} 与
+ * {@code UsbSerial} 工具类,签名与文档 4-7 章保持一致。
+ */
public class Ch934xSerialPlugin implements FlutterPlugin, MethodCallHandler {
- /// The MethodChannel that will the communication between Flutter and native Android
- ///
- /// This local reference serves to register the plugin with the Flutter Engine and unregister it
- /// when the Flutter Engine is detached from the Activity
- private MethodChannel channel;
- @Override
- public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
- channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "ch934x_serial");
- channel.setMethodCallHandler(this);
- }
+ /** Dart ↔ Java 通信使用的 MethodChannel 名称,需与 Dart 侧保持一致。 */
+ private static final String CHANNEL_NAME = "ch934x_serial";
- @Override
- public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
- if (call.method.equals("getPlatformVersion")) {
- result.success("Android " + android.os.Build.VERSION.RELEASE);
- } else {
- result.notImplemented();
+ /** CH934X SDK 反射时使用的工具类与串口类名。 */
+ private static final String USB_HELPER_CLASS = "com.example.ch934xserial.UsbHelper";
+ private static final String USB_SERIAL_CLASS = "com.example.ch934xserial.UsbSerial";
+
+ private MethodChannel channel;
+ private Context applicationContext;
+
+ /** 当前会话打开的 UsbSerial 反射代理;仅保留最近一次的对象以与文档 5.2.1 保持一致。 */
+ @Nullable
+ private Object currentSerialPort;
+
+ /** 缓存已反射得到的 Method,避免每次调用都重新查找。 */
+ private final Map methodCache = new ConcurrentHashMap<>();
+
+ @Override
+ public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
+ channel = new MethodChannel(binding.getBinaryMessenger(), CHANNEL_NAME);
+ channel.setMethodCallHandler(this);
+ applicationContext = binding.getApplicationContext();
}
- }
- @Override
- public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
- channel.setMethodCallHandler(null);
- }
+ @Override
+ public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
+ if (channel != null) {
+ channel.setMethodCallHandler(null);
+ channel = null;
+ }
+ methodCache.clear();
+ currentSerialPort = null;
+ }
+
+ @Override
+ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
+ try {
+ switch (call.method) {
+ case "getDeviceList":
+ result.success(handleGetDeviceList());
+ break;
+ case "getSerialNumber":
+ result.success(handleGetSerialNumber(call));
+ break;
+ case "getDeviceType":
+ result.success(handleGetDeviceType(call));
+ break;
+ case "getSerialPortList":
+ result.success(handleGetSerialPortList(call));
+ break;
+ case "openPort":
+ result.success(handleOpenPort(call));
+ break;
+ case "closePort":
+ result.success(handleClosePort());
+ break;
+ case "read":
+ result.success(handleRead(call));
+ break;
+ case "write":
+ result.success(handleWrite(call));
+ break;
+ case "setGpioOutput":
+ result.success(handleSetGpioOutput(call));
+ break;
+ case "getGpioInput":
+ result.success(handleGetGpioInput(call));
+ break;
+ case "setModemControl":
+ result.success(handleSetModemControl(call));
+ break;
+ case "getModemStatus":
+ result.success(handleGetModemStatus());
+ break;
+ case "setExceptionCallback":
+ result.success(handleSetExceptionCallback());
+ break;
+ default:
+ result.notImplemented();
+ }
+ } catch (Throwable t) {
+ // 统一以 PlatformException 形式上抛错误信息,便于 Dart 侧捕获。
+ result.error("CH934X_ERROR", t.getMessage(), t.getClass().getName());
+ }
+ }
+
+ // ------------------------------------------------------------------------
+ // 设备查找
+ // ------------------------------------------------------------------------
+
+ /** 文档 4.1.4 `UsbHelper.getCH934XDeviceList`。 */
+ private List