feat(android): 添加 CH934X USB 转串口芯片支持

- 在 AndroidManifest.xml 中添加 USB Host 权限声明
- 集成 CH934X Android SDK 并通过反射调用原生功能
- 实现设备查找、串口读写、GPIO 和 Modem 控制功能
- 添加异常回调机制处理设备拔出等情况
- 提供 Stream 数据流支持实时串口数据监听
- 完善单元测试覆盖所有核心功能模块
This commit is contained in:
Developer
2026-07-06 16:06:54 +08:00
parent 6efaf5671f
commit e0d1a1775d
26 changed files with 2055 additions and 184 deletions
+81 -10
View File
@@ -1,29 +1,100 @@
import 'dart:typed_data';
import 'package:plugin_platform_interface/plugin_platform_interface.dart';
import 'ch934x_serial_method_channel.dart';
import 'src/models/models.dart';
/// CH934X 插件的平台无关抽象接口。
///
/// Dart 侧应面向此接口编程,具体实现由 Android 平台
/// (MethodChannel) 提供;`set mockMethodCallHandler` 的
/// 单元测试可以替换该实现以验证上层逻辑。
abstract class Ch934xSerialPlatform extends PlatformInterface {
/// Constructs a Ch934xSerialPlatform.
/// 构造 [Ch934xSerialPlatform]。
Ch934xSerialPlatform() : super(token: _token);
static final Object _token = Object();
static Ch934xSerialPlatform _instance = MethodChannelCh934xSerial();
/// The default instance of [Ch934xSerialPlatform] to use.
///
/// Defaults to [MethodChannelCh934xSerial].
/// 平台无关实现当前持有的具体后端。
static Ch934xSerialPlatform get instance => _instance;
/// Platform-specific implementations should set this with their own
/// platform-specific class that extends [Ch934xSerialPlatform] when
/// they register themselves.
/// 替换具体实现,常用于单元测试。
static set instance(Ch934xSerialPlatform instance) {
PlatformInterface.verifyToken(instance, _token);
_instance = instance;
}
Future<String?> getPlatformVersion() {
throw UnimplementedError('platformVersion() has not been implemented.');
}
// ---------------------------------------------------------------------------
// 设备查找
// ---------------------------------------------------------------------------
/// 获取所有已连接的 CH934X 设备信息(对应 4.1.4 `getCH934XDeviceList`)。
Future<List<Ch934xDeviceInfo>> getDeviceList();
/// 获取指定设备的 CH934X 序列号(对应 4.1.1 `CH934XSerialNum`)。
Future<String?> getSerialNumber(int deviceId);
/// 获取指定设备类型(对应 4.1.2 `CH934XDeviceType`)。
Future<int> getDeviceType(int deviceId);
/// 获取指定设备的串口列表(对应 4.1.3 `getCH934XSerialPortList`)。
Future<List<Ch934xSerialPortInfo>> getSerialPortList(
int deviceId, {
required int interfaceNumber,
});
// ---------------------------------------------------------------------------
// 设备打开 / 关闭
// ---------------------------------------------------------------------------
/// 初始化并打开指定串口(对应 5.1.1 `UsbSerial.init`)。
Future<bool> openPort(Ch934xPortTarget target);
/// 关闭当前线程/会话最近一次打开的串口(对应 5.2.1 `UsbSerial.close`)。
Future<bool> closePort();
// ---------------------------------------------------------------------------
// 串口读写
// ---------------------------------------------------------------------------
/// 从串口读取数据(对应 6.1.1 `UsbSerial.read`)。
Future<Uint8List> read(int length);
/// 向串口写入数据(对应 6.2.1 `UsbSerial.write`)。
Future<int> write(Uint8List data);
// ---------------------------------------------------------------------------
// GPIO
// ---------------------------------------------------------------------------
/// 设置 GPIO 输出(对应 7.1.1 `UsbSerial.setGpioOutput`)。
Future<bool> setGpioOutput({required int gpioNumber, required int level});
/// 读取 GPIO 输入(对应 7.1.2 `UsbSerial.getGpioInput`)。
Future<int> getGpioInput(int gpioNumber);
// ---------------------------------------------------------------------------
// Modem
// ---------------------------------------------------------------------------
/// 设置 Modem 控制(对应 7.2.1 `UsbSerial.setModemControl`)。
Future<bool> setModemControl({required int dtr, required int rts});
/// 获取 Modem 状态(对应 7.2.2 `UsbSerial.getModemStatus`)。
Future<int> getModemStatus();
// ---------------------------------------------------------------------------
// 异常回调
// ---------------------------------------------------------------------------
/// 注册异常回调(对应 7.3.1 `UsbSerial.setExceptionCallback`)。
///
/// 当原生层触发异常(例如设备拔出)时,会通过
/// [onException] 中传入的回调通知调用方。
Future<void> setExceptionCallback(
void Function(Ch934xException exception) onException,
);
}