1
This commit is contained in:
491
lib/src/ch34_manager.dart
Normal file
491
lib/src/ch34_manager.dart
Normal 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>0,vMin>0 时:阻塞直到读取到第一个字符后开始计时,
|
||||
/// 时间到或已读够 vMin 个字符则返回。
|
||||
/// - 当 vTime>0,vMin=0 时:读到数据立即返回,否则最多等待 vTime。
|
||||
/// - 当 vTime=0,vMin>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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user