feat(ch934x): 添加GPIO方向控制和串口参数配置功能
- 添加Ch934xMode和GpioDirection枚举类定义 - 实现GPIO方向控制相关方法(setGpioDir/queryGpioDirFromCache) - 添加GPIO使能控制(enableGpio)和数量/组数查询(getGpiocount/getGpiogroup) - 实现串口参数配置(setSerialParameter)包括波特率/数据位/停止位/校验位/流控 - 添加Break信号控制(setBreak)功能 - 实现当前串口模式查询(getCurrentMode) - 添加设备连接状态查询(isConnected)和已打开设备列表获取(getConnectedDevices) - 更新文档说明GPIO方向控制和串口参数配置用法 - 在示例应用中添加相关功能按钮和操作逻辑
This commit is contained in:
+120
-7
@@ -16,9 +16,13 @@ Android SDK 封装的 Flutter 插件,文档面向其他 Flutter 开发者,介绍
|
||||
- CH934X 设备枚举、序列号读取、芯片类型识别
|
||||
- 多串口打开 / 关闭 / **同设备内串口切换**
|
||||
- 字节级串口读写
|
||||
- GPIO 输出 / 输入
|
||||
- GPIO 输出 / 输入 / 方向控制 / 使能
|
||||
- Modem 控制 (DTR/RTS) 与状态 (CTS/DSR/RI/DCD) 读取
|
||||
- **主动申请 USB 权限**
|
||||
- **Break 信号控制**
|
||||
- **串口参数配置(波特率/数据位/停止位/校验/流控)**
|
||||
- **查询设备连接状态与已打开设备列表**
|
||||
- **查询 GPIO 数量、组信息**
|
||||
- 设备拔出、Modem 错误等异常事件回调
|
||||
- **底层依赖:** 沁恒官方 `CH934XLib.jar`(插件随包发布,位于
|
||||
`android/libs/CH934XLib.jar`),通过原生 `CH934XManager` 单例直接调用,
|
||||
@@ -189,14 +193,40 @@ await sub.cancel();
|
||||
### 3.4 GPIO 接口
|
||||
|
||||
```dart
|
||||
// 设置 GPIO 输出电平
|
||||
final ok = await plugin.setGpioOutput(gpioNumber: 0, level: 1);
|
||||
final value = await plugin.getGpioInput(0); // 负值表示失败
|
||||
|
||||
// 读取 GPIO 输入电平(负值表示失败)
|
||||
final value = await plugin.getGpioInput(0);
|
||||
```
|
||||
|
||||
- `gpioNumber` 与 `level` 与原文档保持一致(0/1)。
|
||||
- `getGpioInput` 失败时返回 -1,业务方需要自行处理。
|
||||
- GPIO 操作同样作用于**当前活跃串口**。
|
||||
|
||||
### 3.4.1 GPIO 方向控制
|
||||
|
||||
```dart
|
||||
// 使能 GPIO(需要先获取 chipType,可从 Ch934xDeviceInfo.deviceType 取得)
|
||||
await plugin.enableGpio(chipType: device.deviceType, gpioGroup: 0, enable: 1);
|
||||
|
||||
// 设置 GPIO 方向
|
||||
await plugin.setGpioDir(gpioGroup: 0, gpioNumber: 0, dir: GpioDirection.out);
|
||||
|
||||
// 从缓存查询 GPIO 方向
|
||||
final dir = await plugin.queryGpioDirFromCache(gpioGroup: 0, gpioNumber: 0);
|
||||
if (dir == GpioDirection.out) { /* 输出 */ }
|
||||
|
||||
// 查询 GPIO 数量与组数
|
||||
final count = await plugin.getGpiocount(device.deviceId);
|
||||
final groups = await plugin.getGpiogroup(device.deviceId);
|
||||
```
|
||||
|
||||
- `GpioDirection` 常量: `in_ = 0`(输入)、`out = 1`(输出)。
|
||||
- `enableGpio` 的 `enable` 参数: CH9344 传 1/0 控制整组;CH348 使用位掩码。
|
||||
- 方向查询返回 -1 表示失败。
|
||||
- `getGpiocount`/`getGpiogroup` 失败时返回 -1,需先 `openPort`。
|
||||
|
||||
### 3.5 Modem 控制接口
|
||||
|
||||
```dart
|
||||
@@ -224,6 +254,78 @@ final sub = await plugin.setExceptionCallback((event) {
|
||||
await sub.cancel();
|
||||
```
|
||||
|
||||
- 异常类型见 `Ch934xExceptionType`:
|
||||
- `deviceDetached = 1`:设备被拔出(由 SDK 的 `usbDeviceDetach` 触发)。
|
||||
- `ioError = 2`:Modem overrun / parity / frame 等错误。
|
||||
- `sdk = 3`:原生 SDK 主动抛出的其他异常(目前未触发,保留语义)。
|
||||
- `unknown = 0`:未识别(当前未触发,保留语义)。
|
||||
- `Ch934xException` 包含 `type / message / cause`,`toString()` 会把
|
||||
`type` 翻译为对应的常量名,方便日志/UI 显示。
|
||||
- 返回的 `StreamSubscription` **必须在合适时机 `cancel`**,以便
|
||||
释放底层 `StreamController` 与 `MethodCallHandler`。
|
||||
|
||||
### 3.7 其他接口
|
||||
|
||||
#### 3.7.1 Break 信号
|
||||
|
||||
```dart
|
||||
final ok = await plugin.setBreak(true); // 设置 Break(低电平有效)
|
||||
```
|
||||
|
||||
- 作用于**当前活跃串口**。
|
||||
|
||||
#### 3.7.2 获取当前串口模式
|
||||
|
||||
```dart
|
||||
final mode = await plugin.getCurrentMode();
|
||||
// mode 取值见 Ch934xMode 常量
|
||||
```
|
||||
|
||||
- `Ch934xMode` 常量: `normal = 0`(普通)、`hardflow = 1`(硬件流控)、`gpio = 2`(GPIO)。
|
||||
- **仅对 CH934X 型号有效**,CH348 返回 -1。
|
||||
|
||||
#### 3.7.3 设备连接状态
|
||||
|
||||
```dart
|
||||
final connected = await plugin.isConnected(device.deviceId);
|
||||
final ids = await plugin.getConnectedDevices();
|
||||
```
|
||||
|
||||
- `isConnected`: 查询指定设备是否已被打开。
|
||||
- `getConnectedDevices`: 返回当前已打开设备的 `deviceId` 列表。
|
||||
|
||||
### 3.8 串口参数配置
|
||||
|
||||
```dart
|
||||
// 配置波特率为 9600
|
||||
final ok = await plugin.setSerialParameter(
|
||||
baud: 9600,
|
||||
dataBit: 8,
|
||||
stopBit: 1,
|
||||
parityBit: 0,
|
||||
flow: false,
|
||||
);
|
||||
```
|
||||
|
||||
- 作用于**当前活跃串口**。`openPort` 内部默认设为 `115200/8/1/N/无流控`,
|
||||
如需修改可在此之后调用。
|
||||
- `stopBit`: 0=1 停止位,1=1.5 停止位,2=2 停止位。
|
||||
- `parityBit`: 0=无校验,1=奇校验,2=偶校验。
|
||||
|
||||
---
|
||||
|
||||
## 4. 完整示例
|
||||
|
||||
```dart
|
||||
final sub = await plugin.setExceptionCallback((event) {
|
||||
debugPrint('设备异常: ${event.type} ${event.message}');
|
||||
// 业务方应主动关闭串口、刷新设备列表或提示用户重新插拔
|
||||
});
|
||||
|
||||
// 主动取消监听
|
||||
await sub.cancel();
|
||||
```
|
||||
|
||||
- 异常类型见 `Ch934xExceptionType`:
|
||||
- `deviceDetached = 1`:设备被拔出(由 SDK 的 `usbDeviceDetach` 触发)。
|
||||
- `ioError = 2`:Modem overrun / parity / frame 等错误。
|
||||
@@ -346,9 +448,9 @@ void main() {
|
||||
才返回真实数据,枚举阶段调用只会得到空列表。
|
||||
|
||||
**Q3. `read()` 一直返回空数组。**
|
||||
- 确认对端设备正在发送数据,且波特率/校验位等参数与原 SDK 默认值
|
||||
一致(`CH934XLib` 提供独立的 `setConfig` 接口,本插件当前未做
|
||||
封装,需要时可扩展原 SDK 直接调用)。
|
||||
- 确认对端设备正在发送数据,且波特率/校验位等参数匹配。可通过
|
||||
`setSerialParameter(baud: 9600, dataBit: 8, stopBit: 1, parityBit: 0, flow: false)`
|
||||
配置串口参数。
|
||||
- 检查线序:RX/TX 是否接反,以及硬件流控是否正确。
|
||||
- 确认 `setActivePort` 已切换到正确的串口索引。
|
||||
|
||||
@@ -398,12 +500,23 @@ void main() {
|
||||
| `requestUsbPermission` | 2.2 增强 | 主动授权(插件新增) |
|
||||
| `read` | 6.1.1 | 串口读写 |
|
||||
| `write` | 6.2.1 | 串口读写 |
|
||||
| `setGpioOutput` | 7.1.1 | GPIO |
|
||||
| `getGpioInput` | 7.1.2 | GPIO |
|
||||
| `setSerialParameter` | setSerialParameter | 串口参数 |
|
||||
| `setBreak` | setBreak | 其他 |
|
||||
| `getCurrentMode` | getCurrentMode | 其他 |
|
||||
| `isConnected` | isConnected | 设备状态 |
|
||||
| `getConnectedDevices` | getConnectedDevices | 设备状态 |
|
||||
| `setGpioOutput` | setGPIOValue | GPIO |
|
||||
| `getGpioInput` | getGPIOValue | GPIO |
|
||||
| `setGpioDir` | setGPIODir | GPIO 方向 |
|
||||
| `queryGpioDirFromCache` | queryGPIODirFromCache | GPIO 方向 |
|
||||
| `enableGpio` | enableGPIO | GPIO |
|
||||
| `getGpiocount` | getGPIOCount | GPIO |
|
||||
| `getGpiogroup` | getGPIOGroup | GPIO |
|
||||
| `setModemControl` | 7.2.1 | Modem |
|
||||
| `getModemStatus` | 7.2.2 | Modem |
|
||||
| `setExceptionCallback` | 7.3.1 | 异常 |
|
||||
| `dataStream` | 6.1 增强 | 串口流(插件新增) |
|
||||
| `portDataStream` | 6.1 增强 | 多端口轮询流(插件新增) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user