This commit is contained in:
2026-04-21 12:57:33 +08:00
commit c000eb12f8
64 changed files with 7970 additions and 0 deletions

491
lib/src/ch34_manager.dart Normal file
View File

@@ -0,0 +1,491 @@
import 'dart:typed_data';
import 'ch34_platform_interface.dart';
import 'types/ch34_types.dart';
/// CH34X USB 转串口插件的管理器。
///
/// 提供静态方法访问所有 WCH WCHUARTManager API。
/// 所有方法委托给 [Ch34Platform.instance] 实现。
class Ch34Manager {
Ch34Manager._();
/// ==================== 基础方法 ====================
/// 获取平台版本。
///
/// @return 平台版本字符串。
static Future<String?> getPlatformVersion() {
return Ch34Platform.instance.getPlatformVersion();
}
/// ==================== 设备枚举与识别 ====================
/// 枚举当前所有可用的 USB 设备。
///
/// @return 可用 USB 设备列表。
/// @throws Ch34Exception 如果枚举失败。
static Future<List<UsbDeviceInfo>> enumDevice() {
return Ch34Platform.instance.enumDevice();
}
/// 获取该 UsbDevice 的芯片型号。
///
/// @param deviceName 设备名称。
/// @return 芯片型号字符串null 表示无法识别。
static Future<String?> getChipType(String deviceName) {
return Ch34Platform.instance.getChipType(deviceName);
}
/// ==================== 设备打开与权限 ====================
/// 打开 USB 设备。
///
/// @param deviceName 设备名称。
/// @return `true` 成功,`false` 失败。
static Future<bool> openDevice(String deviceName) {
return Ch34Platform.instance.openDevice(deviceName);
}
/// 申请 USB 设备的权限。
///
/// @param deviceName 设备名称。
/// @return `true` 已授权,`false` 被拒绝。
static Future<bool> requestPermission(String deviceName) {
return Ch34Platform.instance.requestPermission(deviceName);
}
/// ==================== USB 状态监听 ====================
/// 注册 USB 设备插拔状态监听。
///
/// @param onStateChanged 状态变化回调。
static void setUsbStateListener(
void Function(String deviceName, bool connected) onStateChanged) {
Ch34Platform.instance.setUsbStateListener(onStateChanged);
}
/// 移除 USB 状态监听。
static void removeUsbStateListener() {
Ch34Platform.instance.removeUsbStateListener();
}
/// ==================== 串口信息 ====================
/// 获取设备的串口数目。
///
/// @param deviceName 设备名称。
/// @return 串口数目,-1 表示读取芯片型号失败。
static Future<int> getSerialCount(String deviceName) {
return Ch34Platform.instance.getSerialCount(deviceName);
}
/// 获取串口波特率。
///
/// 实际仅针对 CH9114 系列有效,其他类型设备无需调用。
///
/// @param deviceName 设备名称。
/// @param serialNumber 串口号。
/// @return 大于 0 表示串口波特率,小于 0 表示出错。
static Future<int> getSerialBaud(String deviceName, int serialNumber) {
return Ch34Platform.instance.getSerialBaud(deviceName, serialNumber);
}
/// 获取芯片主频。
///
/// 实际仅针对 CH9114 系列有效,其他类型设备无需调用。
///
/// @param deviceName 设备名称。
/// @return 芯片主频信息对象。
static Future<ChipMasterFrequency> getChipMasterFrequency(String deviceName) {
return Ch34Platform.instance.getChipMasterFrequency(deviceName);
}
/// 打开或关闭串口。
///
/// 实际仅针对 CH9114 系列有效,其他类型设备无需调用。
///
/// @param deviceName 设备名称。
/// @param serialNumber 串口号。
/// @param enable `true` 打开,`false` 关闭。
/// @return `true` 设置成功,`false` 设置失败。
static Future<bool> enableSerial(
String deviceName,
int serialNumber,
bool enable,
) {
return Ch34Platform.instance.enableSerial(deviceName, serialNumber, enable);
}
/// ==================== 串口参数设置 ====================
/// 设置串口参数。
///
/// @param deviceName 设备名称。
/// @param serialNumber 串口号(从 0 开始)。
/// @param parameter 串口参数配置。
/// @return `true` 设置成功,`false` 设置失败。
static Future<bool> setSerialParameter(
String deviceName,
int serialNumber,
SerialParameter parameter,
) {
return Ch34Platform.instance.setSerialParameter(
deviceName,
serialNumber,
parameter,
);
}
/// ==================== 数据读写 ====================
/// 发送串口数据(同步发送)。
///
/// @param deviceName 设备名称。
/// @param serialNumber 串口号。
/// @param data 要发送的数据。
/// @param timeout 超时时间毫秒0 表示不超时。
/// @return 实际发送的字节数。
static Future<int> writeData(
String deviceName,
int serialNumber,
Uint8List data, {
int timeout = 0,
}) {
return Ch34Platform.instance.writeData(
deviceName,
serialNumber,
data,
timeout: timeout,
);
}
/// 发送串口数据(异步发送)。
///
/// 将数据加入缓存持续发送,不返回状态和结果。
///
/// @param deviceName 设备名称。
/// @param serialNumber 串口号。
/// @param data 要发送的数据。
static Future<void> asyncWriteData(
String deviceName,
int serialNumber,
Uint8List data,
) {
return Ch34Platform.instance.asyncWriteData(
deviceName,
serialNumber,
data,
);
}
/// 阻塞读取串口数据。
///
/// @param deviceName 设备名称。
/// @param serialNumber 串口号。
/// @return 读取到的数据。
static Future<Uint8List> readData(
String deviceName,
int serialNumber,
) {
return Ch34Platform.instance.readData(deviceName, serialNumber);
}
/// 主动读取串口数据(带超时参数)。
///
/// 读取行为说明:
/// - 当 vTime>0vMin>0 时:阻塞直到读取到第一个字符后开始计时,
/// 时间到或已读够 vMin 个字符则返回。
/// - 当 vTime>0vMin=0 时:读到数据立即返回,否则最多等待 vTime。
/// - 当 vTime=0vMin>0 时:一直阻塞直到读到 vMin 个字符后返回。
///
/// @param deviceName 设备名称。
/// @param serialNumber 串口号。
/// @param vTime 等待时间(毫秒)。
/// @param vMin 读取的最小字节数。
/// @return 读取到的数据。
static Future<Uint8List> readDataWithTimeout(
String deviceName,
int serialNumber,
int vTime,
int vMin,
) {
return Ch34Platform.instance.readDataWithTimeout(
deviceName,
serialNumber,
vTime,
vMin,
);
}
/// 注册串口数据回调。
///
/// 注册后数据自动推送,不需要主动调用 [readData]。
///
/// @param deviceName 设备名称。
/// @param serialNumber 串口号。
/// @param onData 数据接收回调。
static Future<void> registerDataCallback(
String deviceName,
int serialNumber,
void Function(Uint8List data) onData,
) {
return Ch34Platform.instance.registerDataCallback(
deviceName,
serialNumber,
onData,
);
}
/// 取消注册串口数据回调。
///
/// @param deviceName 设备名称。
static void removeDataCallback(String deviceName) {
Ch34Platform.instance.removeDataCallback(deviceName);
}
/// ==================== 连接状态 ====================
/// 判断 USB 设备是否已经连接。
///
/// @param deviceName 设备名称。
/// @return `true` 已连接,`false` 未连接。
static Future<bool> isConnected(String deviceName) {
return Ch34Platform.instance.isConnected(deviceName);
}
/// 获取当前已经打开的设备列表。
///
/// @return 已打开的设备名称列表。
static Future<List<String>> getConnectedDevices() {
return Ch34Platform.instance.getConnectedDevices();
}
/// ==================== 断开与关闭 ====================
/// 断开 USB 设备的连接。
///
/// @param deviceName 设备名称。
static Future<void> disconnect(String deviceName) {
return Ch34Platform.instance.disconnect(deviceName);
}
/// 释放资源,关闭所有串口设备。
static Future<void> close() {
return Ch34Platform.instance.close();
}
/// ==================== GPIO 功能 ====================
/// 查询设备是否支持 GPIO 功能。
///
/// @param deviceName 设备名称。
/// @return `true` 支持,`false` 不支持。
static Future<bool> isSupportGpio(String deviceName) {
return Ch34Platform.instance.isSupportGpio(deviceName);
}
/// 查询该 USB 设备的 GPIO 数目。
///
/// @param deviceName 设备名称。
/// @return GPIO 数目。
static Future<int> queryGpioCount(String deviceName) {
return Ch34Platform.instance.queryGpioCount(deviceName);
}
/// 查询该 USB 设备指定 GPIO 的状态。
///
/// @param deviceName 设备名称。
/// @param gpioIndex GPIO 编号(从 0 开始)。
/// @return GPIO 状态。
static Future<GpioStatus> queryGpioStatus(
String deviceName,
int gpioIndex,
) {
return Ch34Platform.instance.queryGpioStatus(deviceName, gpioIndex);
}
/// 查询该 USB 设备的所有 GPIO 状态。
///
/// @param deviceName 设备名称。
/// @return 全部 GPIO 状态列表。
static Future<List<GpioStatus>> queryAllGpioStatus(String deviceName) {
return Ch34Platform.instance.queryAllGpioStatus(deviceName);
}
/// 使能指定 GPIO。
///
/// @param deviceName 设备名称。
/// @param gpioIndex GPIO 编号。
/// @param enable `true` 使能,`false` 关闭。
/// @param direction GPIO 方向。
/// @return `true` 使能成功,`false` 使能失败。
static Future<bool> enableGpio(
String deviceName,
int gpioIndex,
bool enable,
GpioDirection direction,
) {
return Ch34Platform.instance.enableGpio(
deviceName,
gpioIndex,
enable,
direction,
);
}
/// 设置指定 GPIO 的电平值。
///
/// @param deviceName 设备名称。
/// @param gpioIndex GPIO 编号。
/// @param value GPIO 电平值。
/// @return `true` 设置成功,`false` 设置失败。
static Future<bool> setGpioVal(
String deviceName,
int gpioIndex,
GpioValue value,
) {
return Ch34Platform.instance.setGpioVal(
deviceName,
gpioIndex,
value,
);
}
/// 获取指定 GPIO 的电平值。
///
/// @param deviceName 设备名称。
/// @param gpioIndex GPIO 编号。
/// @return GPIO 电平值。
static Future<GpioValue> getGpioVal(
String deviceName,
int gpioIndex,
) {
return Ch34Platform.instance.getGpioVal(deviceName, gpioIndex);
}
/// ==================== 信号控制 ====================
/// 设置 DTR 信号。
///
/// @param deviceName 设备名称。
/// @param serialNumber 串口号。
/// @param valid 是否有效(低电平有效)。
/// @return `true` 设置成功,`false` 设置失败。
static Future<bool> setDtr(
String deviceName,
int serialNumber,
bool valid,
) {
return Ch34Platform.instance.setDtr(deviceName, serialNumber, valid);
}
/// 设置 RTS 信号。
///
/// @param deviceName 设备名称。
/// @param serialNumber 串口号。
/// @param valid 是否有效(低电平有效)。
/// @return `true` 设置成功,`false` 设置失败。
static Future<bool> setRts(
String deviceName,
int serialNumber,
bool valid,
) {
return Ch34Platform.instance.setRts(deviceName, serialNumber, valid);
}
/// 设置 Break 信号。
///
/// @param deviceName 设备名称。
/// @param serialNumber 串口号。
/// @param valid 是否有效(低电平有效)。
/// @return `true` 设置成功,`false` 设置失败。
static Future<bool> setBreakSignal(
String deviceName,
int serialNumber,
bool valid,
) {
return Ch34Platform.instance.setBreakSignal(
deviceName,
serialNumber,
valid,
);
}
/// ==================== Modem 状态回调 ====================
/// 注册 Modem 控制信号状态回调。
///
/// @param deviceName 设备名称。
/// @param onModemStatus Modem 状态变化回调。
static Future<void> registerModemStatusCallback(
String deviceName,
void Function(ModemStatus status) onModemStatus,
) {
return Ch34Platform.instance.registerModemStatusCallback(
deviceName,
onModemStatus,
);
}
/// 移除 Modem 状态回调。
///
/// @param deviceName 设备名称。
static void removeModemStatusCallback(String deviceName) {
Ch34Platform.instance.removeModemStatusCallback(deviceName);
}
/// ==================== 错误查询 ====================
/// 查询串口错误状态。
///
/// @param deviceName 设备名称。
/// @param serialNumber 串口号。
/// @param errorType 错误类型。
/// @return 该种错误出现的次数。
static Future<int> querySerialErrorCount(
String deviceName,
int serialNumber,
SerialErrorType errorType,
) {
return Ch34Platform.instance.querySerialErrorCount(
deviceName,
serialNumber,
errorType,
);
}
/// ==================== 全局配置 ====================
/// 设置读取超时时间。
///
/// 全局有效,应在 APP 初始化时调用。
///
/// @param timeout 超时时间(毫秒)。
static Future<void> setReadTimeout(int timeout) {
return Ch34Platform.instance.setReadTimeout(timeout);
}
/// 添加自定义硬件 VID/PID。
///
/// @param vid 硬件 VID。
/// @param pid 硬件 PID。
/// @param chipType 芯片类型(必填,如 "CH340"、"CH9102")。
static Future<void> addNewHardware(int vid, int pid, String chipType) {
return Ch34Platform.instance.addNewHardware(vid, pid, chipType);
}
/// 设置调试模式。
///
/// @param enabled `true` 开启,`false` 关闭。
static Future<void> setDebug(bool enabled) {
return Ch34Platform.instance.setDebug(enabled);
}
/// 返回当前是否处于调试模式。
///
/// @return `true` 处于调试模式,`false` 不处于。
static Future<bool> isDebugMode() {
return Ch34Platform.instance.isDebugMode();
}
}