根据封库需求生成 DFRobot Arduino 库
前提:用户提供的 requirements.md 是唯一规格——编写需求时没有目标库的 src/、.h、成品代码。
输入:§3 协议 + §4 能力(见 requirements-template.md)。
输出:可发布的 DFRobot Arduino 库。
样例:requirements-example-C4002.md 仅为一份封库前规格示例;其它产品复制 requirements-template.md 填写,不得把 C4002 的 CMD/枚举/方法名当作通用默认值。
设计原则
- 只读需求与 §3 附件,禁止引用或 git 恢复待生成库源码;
python_src、既有src/均不是依据 - §3 协议 → 底层实现、CMD、每条命令的 payload 字节布局、枚举线值、多步命令序列
- §4 能力 → public API(Agent 推导命名,§5 可覆盖);§4.6 业务说明 → 各 API 的 Doxygen
@n续行;§3 协议 →.h中宏/enum/struct的 Doxygen(见 conventions.md) - §3 不足以实现 → 停止并索要,不猜协议;禁止用 C 枚举序号、数组下标或「常见写法」代替 §3 线值
- §4.6 未写但某 API 明显需要
@n(阈值特殊值、重启生效、位图含义等)→ 停止并索要,禁止只写@brief敷衍 - 封库日期:§1 未填「发布日期」→ 用生成当天;版本号来自 §1(默认
V1.0.0),见 conventions.md - §5 有填写 → public API 命名/签名必须与 §5 一致;§5 留空 → 按 DFRobot 惯例推导,不要求与仓库内其它成品库同名
- 按 §2 定主通信接口与类结构:见 conventions.md;§3 只用于协议实现,不定类架构
- 外设对象由用户注入:见 conventions.md「外设对象注入」
- 多接口示例一份业务逻辑:见 conventions.md「多接口示例固定模板」;单接口不生成选择宏
- §3 为
Modbus RTU→ 按下方 Protocol Resolution 加载公共库,禁止重写 CRC / 帧 / 功能码
交付物须含 README.md 与 README_CN.md 两个文件(见 conventions.md README 节)。工作流第 7 步写「README」时不得只生成英文一份。
Protocol Resolution
实现前必须读取需求 §3 协议类型:
| §3 协议类型 | 动作 |
|---|---|
Modbus RTU(精确匹配) |
加载 references/modbus-rtu/conventions.md + DFRobot_RTU.h;底层用已安装的 DFRobot_RTU;禁止重新实现 Modbus RTU |
仅 Modbus,或 Modbus TCP / Modbus ASCII 等 |
停止,要求明确是否为 Modbus RTU |
| I2C / SPI / 自定义 UART 帧等 | 不加载 references/modbus-rtu/,不引用 DFRobot_RTU |
用户只需声明协议,不必填写 Dependency: DFRobot_RTU。
若 §2 主接口为 I2C/SPI 而 §3 为 Modbus RTU:停止并列冲突,不得猜。
§3 必须写清的内容(通用)
| 缺什么 | 常见后果 |
|---|---|
| 仅列 CMD 名、不写 data 布局 | 组帧长度/字段顺序错误 |
| 枚举只写含义、不写线值 | 0/1/2 与 0x01/0x02/0xFF 混用 |
| 多步命令只写一步 | 恢复出厂、改波特率等流程不完整 |
| 「各门/各通道」未说明批量还是逐条 | API 形态与模块不符 |
工作流
- [ ] 1. 读 §1–§2、§4–§8:按 §2 定主通信接口与类结构(见 [conventions.md](conventions.md));解析日期/版本;确认 §5(若有)与 §7 产品图
- [ ] 2. 读 §3(及 @ 附件):整理 CMD/帧/寄存器/上报;核对 payload 与枚举线值;**不够则停止索要,不进入第 3 步**;做 **Protocol Resolution**(仅 `Modbus RTU` 才加载 [references/modbus-rtu/](references/modbus-rtu/))
- [ ] 3. 输出「§4 → 拟 public 方法」表(§5 有则不得偏离)
- [ ] 4. 输出「方法 → 拟 `@n`」表(对照 §4.6 + 下方强制 `@n` 模板)
- [ ] 5. 按 [conventions.md](conventions.md) 实现类结构与外设注入(Modbus RTU:继承/组合 `DFRobot_RTU`,见 conventions)
- [ ] 6. 实现 public + `begin()`;`.h` 注释与 Doxygen 按 [conventions.md](conventions.md)
- [ ] 7. 生成 examples、library.properties、keywords.txt、**README.md + README_CN.md**、resources/images/(示例与 README 按 [conventions.md](conventions.md);§6 主示例含完整配置链;Modbus RTU 时 `depends=DFRobot_RTU`)
- [ ] 8. **逐条执行** [checklist.md](checklist.md);缺项补齐后再交付
强制 @n 模板(§4.6 未写时也须写入 .h 与 README Methods)
| API 类型 | 必须有的 @n |
|---|---|
通知缓存 getter(§4.4 解析后的 getXxx) |
「须先 getNoteInfo(或 §4.4 等价入口)」;数据来自哪类通知 |
| 环境光/同类阈值 setter | 为 0 的特殊行为;非 0 时的触发条件;范围与单位 |
| 改波特率 / 恢复出厂 / 会重启模块的写命令 | 模块重启或生效条件;主机侧须同步的操作 |
| 位图/数组类返回值 | 各 bit 或长度与当前模式(分辨率/档位)的关系 |
枚举 @param |
每个可选值一行 @n 或等价说明 |
交付前门禁(通用封库)
- 禁止 README 引用不存在的
resources/images/…;§7 无图 → 向用户索要或 README 暂不放图片行,不得留断链 - 禁止示例接线表与代码引脚不一致
- 禁止仅 init 的 §6 主示例(通常为
getAllResults或需求指定的第一个示例) - 类结构、外设注入、多接口示例:按 conventions.md;需求对主接口冲突或无法判断时停止并列出冲突,不得猜
能力 → API(推导规则)
| §4 | 推导 |
|---|---|
| 4.1 初始化 | begin() |
| 4.2 每项配置 | setXxx / configureXxx / startXxx |
| 4.3 每项读取 | getXxx;缓存型数据配合通知解析 |
| 4.4 事件 | getNoteInfo 或等价入口 + 解析 §3.3 |
| 4.5 内部 | protected / private |
Agent 禁止
- 读取「对照用」的既有
src/DFRobot_XXX.*来补全需求缺口 - 因仓库里已有同名库而跳过生成或只做 diff
- 把 §3 未定义的内容当作已实现
- 把某一产品(如 C4002)的 API 命名、枚举名、示例结构套用到其它 SKU
- 违背 conventions.md 类结构 / 外设注入 / 多接口示例(常见错:板型串口变体当多种主接口、GPIO 当主接口、库内硬编码
Wire/SPI/Serial、按接口复制示例或把setup()/loop()塞进每个分支)