启枢科技文档
启枢档案馆
这里是后续撰写产品文档的入口页。左侧负责文档分类与章节层级,右侧保留正式文档正文、提示块、代码、表格与上一页 / 下一页的位置。
sdk / errors
错误处理
SDK 接入时常见错误的边界和处理方式。
错误处理的目标不是把异常吞掉,而是判断它发生在哪一层。层级判断清楚后,排查会快很多:连接问题不要改模板,指令不支持不要靠重试,缺纸也不是 BLE MTU 的问题。
| 类型 | 常见原因 | 处理方向 |
|---|---|---|
| 连接错误 | 蓝牙权限未开、设备未配对、service/characteristic UUID 不匹配、网络不可达、连接超时。 | 回到连接流程,检查权限、设备选择、UUID、地址和平台状态。 |
| 写入错误 | 连接中断、平台 write API 返回失败、分片过大、write with/without response 模式不匹配。 | 缩小分片,确认写入模式,记录失败发生在第几个 chunk。 |
| 流控错误 | BLE credit 没有到达、MTU/credit notify 格式不匹配、credit 超时、错误使用 bypass-write。 |
确认是否需要 lane-credit 或 signal-credit,检查 notify 是否被订阅并路由到 flow control。 |
| 查询错误 | pending query 超时、matcher 不匹配、receive source 未启动、设备不支持该查询。 | 检查查询指令、timeout、notify/read 来源和方言 parser。 |
| 指令错误 | 设备不支持当前 ESC、TSPL 或 CPCL 指令,或使用了错误方言。 | 切换到设备支持的指令集,减少设备不支持的扩展命令。 |
| 内容错误 | 纸宽不匹配、图片过宽、编码不兼容、标签坐标超出页面、payload 过大。 | 回到模板和图片处理层,确认宽度、编码、坐标和最终字节大小。 |
新手排查顺序
Section titled “新手排查顺序”按这个顺序排查,通常能避免在错误层里打转:
- 先确认连接:设备是否真的 connected,权限、UUID、地址和系统蓝牙状态是否正确。
- 再发最小内容:只打印一小段文本或一条简单标签,确认基础写入可用。
- 再看分片和 BLE:如果小内容正常、大内容失败,检查 chunk size、MTU、write mode 和 credit。
- 再看状态查询:如果打印可用但状态读不到,检查 receive source、notify/read、pending query timeout 和 parser。
- 最后看模板内容:如果只有特定模板失败,检查纸宽、图片宽度、编码、条码/二维码参数和指令支持。
日志要能定位阶段,但不要记录敏感打印内容。建议记录:
| 可以记录 | 避免记录 |
|---|---|
| SDK 语言和版本、平台、传输方式。 | 小票正文、收件人、手机号、地址、订单明细等敏感内容。 |
| 设备名称或脱敏后的设备 ID、service/characteristic UUID。 | 完整业务 payload 或未脱敏的用户数据。 |
| 指令族、总字节数、chunk size、chunk index、write mode。 | 可还原打印内容的 raw bytes。 |
| MTU、payload MTU、credit 策略、credit timeout、fallback mode。 | 生产环境长期开启的超详细二进制 dump。 |
| 查询类型、timeout、是否收到 raw response、parser 结果类型。 | 包含客户信息的 parser 文本字段。 |
调试阶段需要看 raw bytes 时,优先只记录长度、前几个字节、hash 或脱敏后的 hex 片段,并确保不会进入长期生产日志。
| 症状 | 可能层级 | 下一步检查 |
|---|---|---|
| 扫描不到设备 | 连接 | 权限、蓝牙开关、设备是否广播、平台 discovery filter。 |
| 能扫描但连接失败 | 连接 | 地址/设备对象是否过期,service UUID 是否匹配,连接超时是否过短。 |
| 连接成功但完全不打印 | 写入 / 指令 | 写入 characteristic 是否正确,最小文本是否能打印,指令族是否支持。 |
| 打印一半或大图失败 | 写入 / 流控 / 内容 | chunk size、BLE MTU、credit、图片宽度和 payload 总大小。 |
| 开启 credit 后卡住 | 流控 | credit notify 是否订阅成功,通知是否进入 lane-credit 或 signal-credit,timeout 是否合理。 |
bypass-write 能打印,fail 模式超时 |
流控 | 设备可能不需要 credit,或 credit 特征值/通知格式配置错误。 |
| 查询状态一直超时 | 查询 / 接收 | receive source 是否启动,notify/read 是否有数据,matcher 和查询指令是否匹配。 |
| 收到 response 但结果是 unknown | 查询 / parser | raw bytes 已到达,检查方言、查询类型和固件回包格式。 |
| 小票乱码 | 内容 / 指令 | 字符编码、代码页、字体和设备语言设置。 |
| 缺纸仍继续写入 | 状态 / 产品逻辑 | 设备是否支持缺纸状态,应用是否在写入前/写入中读取并处理状态。 |
排查时尽量保留“发生在哪一层”的原始错误信息,再把它转换成用户能理解的提示,例如“请检查打印机是否缺纸”或“请重新连接打印机”。