# AISU 830T Card Reader SDK AISU 830T Card Reader SDK 是一个面向 Unity 的 UPM Package,用于在 Windows 上连接 830T 读卡器,接收设备主动上报的卡片信息。 ## 支持环境 - Unity 2021.3 或更高版本 - AISU 830T Card Reader - Package ID:`xin.aisu.card-reader-830t` 当前不支持 Wiegand、主动寻卡/读卡/写卡命令或 ACK/NAK API。 ## 安装 在 Unity Package Manager 中选择 **Add package from git URL...**,输入: ```text https://git.aisu.xin/aisu-sdk/card-reader-830t-package.git ``` 也可以将本地 Package 目录添加到 Unity 项目。安装后,在包详情的 **Samples** 区域导入 **Basic** 或 **Console Demo**。 ## 快速开始 在场景中放置一个 `CardReaderManager`,在 Inspector 中配置 `SerialOptions`,然后使用 `CardReaderApi`: ```csharp using Aisu.CardReader; using UnityEngine; public sealed class CardReaderExample : MonoBehaviour { private void OnEnable() { CardReaderApi.OnConnected.AddListener(OnConnected); CardReaderApi.OnCardReceived.AddListener(OnCardReceived); CardReaderApi.OnError.AddListener(OnError); } private void Start() { CardReaderApi.Open(); } private static void OnConnected() { Debug.Log("Card reader connected."); } private static void OnCardReceived(CardInfo card) { Debug.Log($"{card.CardType} ({card.CardTypeCode:X2}): {card.CardNumber}"); } private static void OnError(CardReaderErrorEventArgs error) { Debug.LogError(error.Exception.Message); } private void OnDisable() { CardReaderApi.OnConnected.RemoveListener(OnConnected); CardReaderApi.OnCardReceived.RemoveListener(OnCardReceived); CardReaderApi.OnError.RemoveListener(OnError); CardReaderApi.Close(); } } ``` ## CardReaderManager `CardReaderManager` 是场景级入口。场景中应保持一个 Manager 实例。它提供 `SerialOptions`、`IsConnected`、`OpenReader()`、`CloseReader()` 以及连接、断开、状态、卡片和错误事件。 ## Inspector 串口参数 `SerialOptions` 类型为 `SerialDeviceOptions`,当前公开字段如下: - `PortName`:Windows COM 端口,例如 `COM3`。 - `BaudRate`:波特率,默认 `9600`。 - `Parity`:校验方式,默认 `None`。 - `DataBits`:数据位,默认 `8`。 - `StopBits`:停止位,默认 `One`。 - `Handshake`:握手方式,默认 `None`。 - `ReadTimeout`:读超时毫秒数,默认 `100`。 - `WriteTimeout`:写超时毫秒数,默认 `1000`。 - `RtsEnable` / `DtrEnable`:RTS/DTR,默认开启。 - `AutoReconnect`:连接异常后是否自动重连,默认开启。 - `ReconnectInterval`:重连间隔毫秒数,默认 `1000`。 - `MaxPendingSendCount`:发送队列容量,默认 `256`。 请根据实际设备参数配置 UART 字段。Sample 不包含固定的本地 COM 端口。 ## CardReaderApi 与事件 `CardReaderApi` 是当前 Manager 的静态访问入口,提供: - `Open()`:启动 Reader 连接。 - `Close()`:关闭当前连接并停止自动重连;之后可以再次 `Open()`。 - `IsConnected`:当前连接状态。 - `OnConnected`、`OnDisconnected`、`OnStateChanged`、`OnCardReceived`、`OnError`。 事件使用 `AddListener` 注册、`RemoveListener` 解除,建议在 `OnEnable` 和 `OnDisable` 中成对处理。没有活动的 `CardReaderManager` 时访问事件或调用 `Open`/`Close` 会抛出 `InvalidOperationException`。 ## CardInfo 与 CardNumber `CardInfo` 包含: - `CardType`:当前已知类型为 `CardType.EM4100`。 - `CardTypeCode`:设备上报的原始类型码。 - `CardNumber`:类型为 `string` 的十进制卡号字符串。 `CardNumber` 默认最小长度为 10 位;不足 10 位时在左侧补 `0`,超过 10 位时不截断。 ## 自动重连与错误处理 当 `AutoReconnect` 开启时,连接异常后 SDK 会按 `ReconnectInterval` 继续尝试连接。`OnError` 提供真实的 `Exception`,常见原因包括 COM 端口不存在、端口被占用或连接失败。相同的连接错误不会持续刷出重复事件,但 SDK 仍会继续自动重连。 ## Samples - **Basic**:完整 UI 操作、COM 端口选择、连接状态、卡片信息和错误日志显示。 - **Console Demo**:最小 API 调用和日志输出示例。 ## 常见问题 ### 找不到 COM 端口 确认设备已连接、驱动已安装,并在 Windows 设备管理器中查看实际 COM 名称。Basic Sample 的 **Refresh** 会重新扫描端口。 ### COM 端口被占用 关闭其他串口工具或正在使用该端口的程序,然后重新选择端口并调用 `Open()`。 ### 无法连接 Reader 检查 `PortName`、波特率、Parity、DataBits 和 StopBits 是否与设备设置一致,并确认设备没有被其他程序占用。 ### 自动重连如何工作 开启 `AutoReconnect` 后,SDK 会按 `ReconnectInterval` 重试。调用 `Close()` 会停止当前连接和自动重连。 ### Unity 退出后是否释放串口 `CardReaderManager` 在销毁或应用退出时会自动释放串口资源。 ### 如何导入 Basic Sample 安装 Package 后,在 Package Manager 的包详情中找到 **Samples**,点击 **Import** 导入 **Basic**。导入路径带有版本目录是 Unity 的标准行为。 ## 版本 当前文档对应 SDK `v0.1.0`。 更多内容: - [快速开始](Documentation~/GettingStarted.zh-CN.md) - [API 文档](Documentation~/API.zh-CN.md) - [Basic Sample 文档](Samples~/Basic/README.md)