Files
ch34/lib/src/ch34_manager.dart
2026-04-21 12:57:40 +08:00

492 lines
14 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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();
}
}