pzzzy/rongta-f11-open
GitHub: pzzzy/rongta-f11-open
该项目用纯 Swift 为荣泰 F11 打印机提供了一套净室开发的无二进制驱动和 PDF 打印方案,彻底摆脱厂商专有驱动的依赖。
Stars: 0 | Forks: 0
# Rongta F11 开源驱动
这是一个针对 macOS 的 Rongta F11 打印协议的净室开发、无二进制块的 Swift 实现。
本代码库允许应用程序渲染 PDF 或生成光栅页面,并将其直接发送到 F11,而无需安装或分发 Rongta 的专有驱动程序、过滤器、PPD、DLL 或 Intel 二进制文件。
## 功能
- 原生 Apple Silicon Swift 库
- PDFKit/CoreGraphics 参考渲染器
- 确定性 1-bit ordered-Bayer 转换
- 净室 Huffman 树构建与序列化
- RTProtocol 组帧与带种子的 CRC-32
- 独立的生成流解码器与验证
- 源代码可见的 libusb 发送器
- 双重 CLI/AppKit 拖放参考应用程序
- 无专有二进制块
- 无需 Rosetta、CUPS 过滤器、PPD 或 Python 运行时
## 流水线
```
PDF or 8-bit grayscale page
→ 1664 × page-height grayscale canvas
→ 1592-dot / 199-byte monochrome rows
→ Huffman tree + compressed rows
→ A3 1E 1C RTProtocol frames
→ USB bulk OUT endpoint 0x01
→ F11
```
在 USB 传输之前,参考应用程序会独立解码完整的生成流,并且除非每一行恢复的数据都与预期的光栅完全一致,否则拒绝打印。
## 环境要求
- macOS 13 或更高版本
- Swift 6 / Xcode 或 Command Line Tools
- 用于物理 USB 传输的 libusb
```
brew install libusb
```
协议编码、解码和空运行不需要 libusb。
## 构建与测试
```
swift run F11CoreTests
swift build -c release
```
构建自包含的本地 App Bundle:
```
./Scripts/build-app.sh
```
输出:
```
dist/F11 PDF Printer.app
dist/f11print
```
## CLI
```
dist/f11print document.pdf
```
安全的空运行:
```
dist/f11print --dry-run --output /tmp/f11-preview document.pdf
```
选项:
```
--dry-run Generate and validate without USB transmission
--output DIR Preserve grayscale, PNG preview, and .f11 stream
--density 1-15 Default: 8
--speed N Default: 16
--copies 1-255 Default: 1
--help
```
## 使用库
将此代码库添加为 Swift package,并依赖于 `F11PrintCore`。
```
import F11PrintCore
let gray = [UInt8](repeating: 255, count: 1664 * 2233)
let stream = try F11JobEncoder.encode(
gray: gray,
sourceWidth: 1664,
sourceHeight: 2233,
speed: 16,
density: 8,
tracking: 0
)
// Strongly recommended before transport:
let decoded = try F11JobDecoder.decode(stream)
precondition(decoded.rows.count == 2233)
```
该库刻意不打开 USB 设备。应用程序可以使用包含的 `Helpers/f11usb.c`、直接使用 libusb,或其他适合其平台的传输方式。
## 协议文档
- [协议规范](Docs/PROTOCOL.md)
- [架构与集成](Docs/INTEGRATION.md)
- [净室来源说明](Docs/PROVENANCE.md)
已验证的设备标识为 USB VID `0x0FE6`、PID `0x811E`、接口 0、批量 OUT endpoint `0x01`。
## 已知范围
此实现针对在 203 dpi 下测试过的 Rongta F11。尽管在某些供应商包中存在共享的协议组帧,但它不声称与同系列的 Rongta 型号兼容。打印不需要状态读取,且被测试的设备未返回应用程序级别的确认信息。
默认渲染器使用从测试设备中学习到的 24 点左侧校准修正。机械对齐可能会有所不同;应用程序可以配置渲染偏移量。
## 安全性
- 从 `--dry-run` 开始并检查生成的产物。
- 确保打印机装入正确的介质。
- 不要发送任意或未经验证的 `.f11` 数据。
- 参考应用程序在传输前会验证组帧、CRC、树重建和光栅一致性。
安全问题应按照 [SECURITY.md](SECURITY.md) 进行报告。
## 许可证
本代码库中的原始源代码和文档均在 MIT 许可证下授权。参见 [LICENSE](LICENSE)。
libusb 是一个独立的项目,采用 LGPL-2.1-or-later 许可证授权。构建脚本可能会将您本地安装的 libusb 动态库复制到 App Bundle 中;该库仍受 libusb 许可证的约束,不属于本代码库源代码许可证的一部分。
不包含任何 Rongta 专有二进制文件、PPD、反编译代码或提取的源代码。
标签:Clean-room, PDF渲染, Rongta F11, Swift, 打印机驱动, 硬件通信