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 getPlatformVersion() { return Ch34Platform.instance.getPlatformVersion(); } /// ==================== 设备枚举与识别 ==================== /// 枚举当前所有可用的 USB 设备。 /// /// @return 可用 USB 设备列表。 /// @throws Ch34Exception 如果枚举失败。 static Future> enumDevice() { return Ch34Platform.instance.enumDevice(); } /// 获取该 UsbDevice 的芯片型号。 /// /// @param deviceName 设备名称。 /// @return 芯片型号字符串,null 表示无法识别。 static Future getChipType(String deviceName) { return Ch34Platform.instance.getChipType(deviceName); } /// ==================== 设备打开与权限 ==================== /// 打开 USB 设备。 /// /// @param deviceName 设备名称。 /// @return `true` 成功,`false` 失败。 static Future openDevice(String deviceName) { return Ch34Platform.instance.openDevice(deviceName); } /// 申请 USB 设备的权限。 /// /// @param deviceName 设备名称。 /// @return `true` 已授权,`false` 被拒绝。 static Future 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 getSerialCount(String deviceName) { return Ch34Platform.instance.getSerialCount(deviceName); } /// 获取串口波特率。 /// /// 实际仅针对 CH9114 系列有效,其他类型设备无需调用。 /// /// @param deviceName 设备名称。 /// @param serialNumber 串口号。 /// @return 大于 0 表示串口波特率,小于 0 表示出错。 static Future getSerialBaud(String deviceName, int serialNumber) { return Ch34Platform.instance.getSerialBaud(deviceName, serialNumber); } /// 获取芯片主频。 /// /// 实际仅针对 CH9114 系列有效,其他类型设备无需调用。 /// /// @param deviceName 设备名称。 /// @return 芯片主频信息对象。 static Future getChipMasterFrequency(String deviceName) { return Ch34Platform.instance.getChipMasterFrequency(deviceName); } /// 打开或关闭串口。 /// /// 实际仅针对 CH9114 系列有效,其他类型设备无需调用。 /// /// @param deviceName 设备名称。 /// @param serialNumber 串口号。 /// @param enable `true` 打开,`false` 关闭。 /// @return `true` 设置成功,`false` 设置失败。 static Future 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 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 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 asyncWriteData( String deviceName, int serialNumber, Uint8List data, ) { return Ch34Platform.instance.asyncWriteData( deviceName, serialNumber, data, ); } /// 阻塞读取串口数据。 /// /// @param deviceName 设备名称。 /// @param serialNumber 串口号。 /// @return 读取到的数据。 static Future 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 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 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 isConnected(String deviceName) { return Ch34Platform.instance.isConnected(deviceName); } /// 获取当前已经打开的设备列表。 /// /// @return 已打开的设备名称列表。 static Future> getConnectedDevices() { return Ch34Platform.instance.getConnectedDevices(); } /// ==================== 断开与关闭 ==================== /// 断开 USB 设备的连接。 /// /// @param deviceName 设备名称。 static Future disconnect(String deviceName) { return Ch34Platform.instance.disconnect(deviceName); } /// 释放资源,关闭所有串口设备。 static Future close() { return Ch34Platform.instance.close(); } /// ==================== GPIO 功能 ==================== /// 查询设备是否支持 GPIO 功能。 /// /// @param deviceName 设备名称。 /// @return `true` 支持,`false` 不支持。 static Future isSupportGpio(String deviceName) { return Ch34Platform.instance.isSupportGpio(deviceName); } /// 查询该 USB 设备的 GPIO 数目。 /// /// @param deviceName 设备名称。 /// @return GPIO 数目。 static Future queryGpioCount(String deviceName) { return Ch34Platform.instance.queryGpioCount(deviceName); } /// 查询该 USB 设备指定 GPIO 的状态。 /// /// @param deviceName 设备名称。 /// @param gpioIndex GPIO 编号(从 0 开始)。 /// @return GPIO 状态。 static Future queryGpioStatus( String deviceName, int gpioIndex, ) { return Ch34Platform.instance.queryGpioStatus(deviceName, gpioIndex); } /// 查询该 USB 设备的所有 GPIO 状态。 /// /// @param deviceName 设备名称。 /// @return 全部 GPIO 状态列表。 static Future> 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 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 setGpioVal( String deviceName, int gpioIndex, GpioValue value, ) { return Ch34Platform.instance.setGpioVal( deviceName, gpioIndex, value, ); } /// 获取指定 GPIO 的电平值。 /// /// @param deviceName 设备名称。 /// @param gpioIndex GPIO 编号。 /// @return GPIO 电平值。 static Future getGpioVal( String deviceName, int gpioIndex, ) { return Ch34Platform.instance.getGpioVal(deviceName, gpioIndex); } /// ==================== 信号控制 ==================== /// 设置 DTR 信号。 /// /// @param deviceName 设备名称。 /// @param serialNumber 串口号。 /// @param valid 是否有效(低电平有效)。 /// @return `true` 设置成功,`false` 设置失败。 static Future 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 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 setBreakSignal( String deviceName, int serialNumber, bool valid, ) { return Ch34Platform.instance.setBreakSignal( deviceName, serialNumber, valid, ); } /// ==================== Modem 状态回调 ==================== /// 注册 Modem 控制信号状态回调。 /// /// @param deviceName 设备名称。 /// @param onModemStatus Modem 状态变化回调。 static Future 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 querySerialErrorCount( String deviceName, int serialNumber, SerialErrorType errorType, ) { return Ch34Platform.instance.querySerialErrorCount( deviceName, serialNumber, errorType, ); } /// ==================== 全局配置 ==================== /// 设置读取超时时间。 /// /// 全局有效,应在 APP 初始化时调用。 /// /// @param timeout 超时时间(毫秒)。 static Future setReadTimeout(int timeout) { return Ch34Platform.instance.setReadTimeout(timeout); } /// 添加自定义硬件 VID/PID。 /// /// @param vid 硬件 VID。 /// @param pid 硬件 PID。 /// @param chipType 芯片类型(必填,如 "CH340"、"CH9102")。 static Future addNewHardware(int vid, int pid, String chipType) { return Ch34Platform.instance.addNewHardware(vid, pid, chipType); } /// 设置调试模式。 /// /// @param enabled `true` 开启,`false` 关闭。 static Future setDebug(bool enabled) { return Ch34Platform.instance.setDebug(enabled); } /// 返回当前是否处于调试模式。 /// /// @return `true` 处于调试模式,`false` 不处于。 static Future isDebugMode() { return Ch34Platform.instance.isDebugMode(); } }