tirtc-device-builder 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codex-plugin/plugin.json +1 -1
- package/CHANGELOG.md +19 -0
- package/README.md +657 -362
- package/bin/esp32-kit-metadata.js +8 -0
- package/bin/install-esp32-kit.js +208 -0
- package/bin/setup-esp32.js +796 -0
- package/bin/tirtc-device-builder.js +19 -2
- package/package.json +2 -1
- package/skills/tirtc-esp32-builder/SKILL.md +11 -8
- package/skills/tirtc-esp32-builder/USAGE.md +30 -22
- package/skills/tirtc-esp32-builder/assets/developer-intake-prompt.md +50 -0
- package/skills/tirtc-esp32-builder/assets/hardware-ir-v2.example.json +122 -0
- package/skills/tirtc-esp32-builder/assets/report-template.md +15 -0
- package/skills/tirtc-esp32-builder/references/capability-rules.md +41 -16
- package/skills/tirtc-esp32-builder/references/environment.md +25 -4
- package/skills/tirtc-esp32-builder/references/hardware-ir.md +44 -24
- package/skills/tirtc-esp32-builder/references/porting-risks.md +49 -0
- package/skills/tirtc-esp32-builder/references/reporting.md +5 -1
- package/skills/tirtc-esp32-builder/references/workflow.md +10 -9
- package/skills/tirtc-esp32-builder/scripts/doctor.py +4 -4
- package/skills/tirtc-esp32-builder/scripts/hardware_ir.py +670 -40
package/README.md
CHANGED
|
@@ -1,369 +1,447 @@
|
|
|
1
1
|
# TiRTC Device Builder
|
|
2
2
|
|
|
3
|
-
TiRTC Device Builder
|
|
3
|
+
TiRTC Device Builder 用于把 ESP32-S3 开发板接入 TiRTC。输入可以只有开发板型号,也可以包含原理图、BSP、引脚表和外设示例。安装后的 Codex Skill 会先检查环境、整理有依据的硬件事实,再生成独立的 ESP-IDF 工程并完成板级移植和编译。烧录和实机验证只有在开发者明确给出目标串口并授权后才会执行。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
当前仓库提供一个 Skill:
|
|
6
6
|
|
|
7
|
-
| Skill | 平台 |
|
|
7
|
+
| Skill | 平台 | 主要用途 |
|
|
8
8
|
|---|---|---|
|
|
9
|
-
| `tirtc-esp32-builder` | ESP32-S3
|
|
9
|
+
| `tirtc-esp32-builder` | ESP32-S3、ESP-IDF 5.5.x | 环境检查、Hardware IR、工程生成、板级媒体移植、编译、烧录和分层验收 |
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
开发者不需要克隆 `tirtc-server-example`,也不用登录 npm。工程模板、协议文档和 TiRTC SDK 已打包在独立的 ESP32 Device Kit 中,安装命令会自动下载并校验。
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
- npm 包:[tirtc-device-builder](https://www.npmjs.com/package/tirtc-device-builder)
|
|
14
|
+
- GitHub 仓库:[tangeai/tirtc-device-builder](https://github.com/tangeai/tirtc-device-builder)
|
|
15
|
+
- ESP32 Device Kit:[kit-esp32s3-v1.0.0](https://github.com/tangeai/tirtc-device-builder/releases/tag/kit-esp32s3-v1.0.0)
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
文档导航:
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
- [新用户快速开始](#新用户快速开始)
|
|
20
|
+
- [准备板卡资料](#准备板卡资料)
|
|
21
|
+
- [依赖和支持范围](#依赖和支持范围)
|
|
22
|
+
- [安装方式和默认目录](#安装方式和目录)
|
|
23
|
+
- [检查、生成和编译](#常用检查和开发命令)
|
|
24
|
+
- [烧录和实机验收](#烧录和验收)
|
|
25
|
+
- [常见问题](#常见问题)
|
|
18
26
|
|
|
19
|
-
##
|
|
27
|
+
## 新用户快速开始
|
|
20
28
|
|
|
21
|
-
|
|
29
|
+
### 1. 确认 Node.js
|
|
22
30
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
能力门禁(READY_TO_PORT 才进入实现)
|
|
29
|
-
↓
|
|
30
|
-
独立 ESP-IDF 工程 + 板级媒体适配
|
|
31
|
-
↓
|
|
32
|
-
编译 → 授权烧录 → 配网绑定 → H5/AI 验收
|
|
33
|
-
↓
|
|
34
|
-
TIRTC_PORTING_REPORT.md
|
|
31
|
+
安装命令依赖 Node.js 18 或更高版本:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
node --version
|
|
35
|
+
npm --version
|
|
35
36
|
```
|
|
36
37
|
|
|
37
|
-
|
|
38
|
+
`node --version` 应输出 `v18.x` 或更高版本。如果终端提示找不到 `node` 或 `npm`,先从 [Node.js 官方下载页](https://nodejs.org/en/download) 安装受支持版本,再打开一个新终端。
|
|
38
39
|
|
|
39
|
-
|
|
40
|
+
### 2. 安装并检查开发环境
|
|
40
41
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
| 模组 | ESP32-S3-WROOM-1-N16R8,或资源与配置经过确认的兼容板 |
|
|
45
|
-
| ESP-IDF | 5.5.x |
|
|
46
|
-
| TiRTC SDK | `espressif-esp32s3/2.3.0` |
|
|
47
|
-
| 业务 | H5 实时音视频、H5 对讲、AI 双向语音 |
|
|
48
|
-
| 工程生成 | 需要一次本地 ThingConnect 工作区 |
|
|
49
|
-
| 烧录 | 必须明确给出串口并授权 |
|
|
42
|
+
```bash
|
|
43
|
+
npx --yes tirtc-device-builder@latest setup esp32 --install
|
|
44
|
+
```
|
|
50
45
|
|
|
51
|
-
|
|
46
|
+
这条命令会:
|
|
52
47
|
|
|
53
|
-
|
|
48
|
+
- 把 `tirtc-esp32-builder` 安装到 Codex Skill 目录;
|
|
49
|
+
- 下载 ESP32 Device Kit 并校验 SHA-256;
|
|
50
|
+
- 复用当前可用的 ESP-IDF 5.5.x,找不到时安装 ESP-IDF 5.5.4;
|
|
51
|
+
- 安装 Espressif 管理的 ESP32-S3 工具链;
|
|
52
|
+
- 写入只包含本地路径的 `config.json` 和 `env.sh`;
|
|
53
|
+
- 激活托管环境并运行 Doctor。
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
安装器只写入当前用户有权限的目录,不执行 `sudo`,也不修改 `.bashrc`、`.zshrc` 等 shell 配置。如果缺少系统软件,它会停下来说明缺少什么;补齐后重新执行同一条命令即可继续。
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
安装成功时,输出末尾应包含:
|
|
58
58
|
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
export TIRTC_PROJECT_DIR="$TIRTC_WORKSPACE/my-esp32-device"
|
|
59
|
+
```text
|
|
60
|
+
OVERALL: PASS
|
|
61
|
+
SETUP: READY
|
|
62
|
+
Start a new Codex session and invoke $tirtc-esp32-builder.
|
|
64
63
|
```
|
|
65
64
|
|
|
66
|
-
|
|
65
|
+
如果看到 `OVERALL: NEEDS_SETUP`、`MISS` 或 `FAIL`,先看[常见问题](#常见问题)。
|
|
67
66
|
|
|
68
|
-
|
|
69
|
-
printf 'workspace: %s\n' "$TIRTC_WORKSPACE"
|
|
70
|
-
printf 'ThingConnect: %s\n' "$TIRTC_THING_CONNECT_ROOT"
|
|
71
|
-
printf 'board docs: %s\n' "$TIRTC_BOARD_DOCS"
|
|
72
|
-
printf 'output project: %s\n' "$TIRTC_PROJECT_DIR"
|
|
73
|
-
```
|
|
67
|
+
### 3. 重新打开 Codex
|
|
74
68
|
|
|
75
|
-
|
|
69
|
+
Skill 在 Codex 会话启动时被发现。安装完成后,关闭当前 Codex 会话,再打开一个新会话。
|
|
76
70
|
|
|
77
|
-
|
|
78
|
-
- 板卡资料和输出工程使用不同目录。
|
|
79
|
-
- 不要把 Wi-Fi 密码、设备密钥、MQTT/WHIP token 或真实用户音视频放入板卡资料目录和 Git 仓库。
|
|
80
|
-
- 新开终端后需要重新设置这些变量,除非开发者自行把它们加入 shell 配置。
|
|
71
|
+
### 4. 把板卡和目标告诉 Codex
|
|
81
72
|
|
|
82
|
-
|
|
73
|
+
把你已经掌握的信息填进下面的提示词即可,不用先查齐所有硬件参数。路径请使用绝对路径,不确定的内容写“未知”。可直接复制的版本见[开发板接入提示词](skills/tirtc-esp32-builder/assets/developer-intake-prompt.md)。
|
|
83
74
|
|
|
84
|
-
|
|
75
|
+
```text
|
|
76
|
+
请使用 $tirtc-esp32-builder 完成这块开发板的 TiRTC 移植。
|
|
85
77
|
|
|
86
|
-
|
|
87
|
-
|
|
78
|
+
开发板:
|
|
79
|
+
- 厂商、完整型号、PCB/硬件版本:<填写>
|
|
80
|
+
- 资料与手中实物是否对应:<是/否/未知>
|
|
81
|
+
|
|
82
|
+
资料:
|
|
83
|
+
- <原理图、BSP/厂商示例、数据手册或产品页;一行一个>
|
|
84
|
+
|
|
85
|
+
目标:
|
|
86
|
+
- 功能:<例如 H5 实时音视频、H5 对讲、AI 双向语音>
|
|
87
|
+
- 视频:<MJPEG/H264/H265/根据合同和硬件证据选择>
|
|
88
|
+
- Wi-Fi:<指定方案/根据 BSP 选择>
|
|
89
|
+
- 设备绑定:<指定方案/根据平台合同选择>
|
|
90
|
+
|
|
91
|
+
工程:<输出目录或现有工程的绝对路径>
|
|
92
|
+
|
|
93
|
+
请先运行 Doctor,分析全部资料并生成 Hardware IR v2。资料不足时列出最小补充项;达到 READY_TO_PORT 后再生成、适配和编译,并输出 TIRTC_PORTING_REPORT.md。
|
|
94
|
+
本轮不访问串口、不烧录、不擦除 NVS,也不要把任何凭证写入源码或报告。
|
|
88
95
|
```
|
|
89
96
|
|
|
90
|
-
|
|
97
|
+
手头只有型号也可以开始:
|
|
91
98
|
|
|
92
|
-
|
|
99
|
+
```text
|
|
100
|
+
$tirtc-esp32-builder
|
|
101
|
+
|
|
102
|
+
分析 <厂商> <完整型号> <PCB 版本>,目标是 H5 实时音视频、
|
|
103
|
+
H5 对讲和 AI 双向对讲。
|
|
104
|
+
先给出板卡资料清单、Hardware IR、能力结论和最小缺失项;
|
|
105
|
+
本轮不生成工程、不烧录。
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
只有型号时,Skill 会先调查公开资料并列出缺口,不会猜测 GPIO、器件或媒体能力。要进入代码移植,通常还需要准确的板卡版本、原理图,以及能在实物上运行的 BSP 或外设示例。
|
|
109
|
+
|
|
110
|
+
## 工作范围
|
|
111
|
+
|
|
112
|
+
整个流程从板卡资料核对开始,以分层验收报告结束:
|
|
113
|
+
|
|
114
|
+
```text
|
|
115
|
+
开发板型号、原理图、BSP、数据手册
|
|
116
|
+
│
|
|
117
|
+
▼
|
|
118
|
+
Hardware IR:硬件事实、来源和未知项
|
|
119
|
+
│
|
|
120
|
+
▼
|
|
121
|
+
能力门禁:能否支持 H5 / AI
|
|
122
|
+
│
|
|
123
|
+
▼
|
|
124
|
+
独立 ESP-IDF 工程与板级媒体适配
|
|
125
|
+
│
|
|
126
|
+
▼
|
|
127
|
+
编译 → 授权烧录 → 分层实机验收
|
|
128
|
+
│
|
|
129
|
+
▼
|
|
130
|
+
TIRTC_PORTING_REPORT.md
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Skill 负责:
|
|
134
|
+
|
|
135
|
+
- 检查 Node.js 之外的 ESP-IDF、编译器、TiRTC SDK、工程配置和串口;
|
|
136
|
+
- 从原理图、BSP、数据手册和实测示例中提取有来源的硬件事实;
|
|
137
|
+
- 生成并校验 `hardware-ir.json`,把冲突和未知项留在报告里;
|
|
138
|
+
- 判断视频、上行音频、下行播放和 AI 会话是否具备移植条件;
|
|
139
|
+
- 生成带 TiRTC SDK 的独立 ESP-IDF 工程;
|
|
140
|
+
- 把摄像头、所选 MJPEG/H.264/H.265 路径、麦克风、Codec、I2S、功放和按键接到板级 adapter;
|
|
141
|
+
- 运行测试和 `idf.py build`,记录固件路径、版本和 SHA-256;
|
|
142
|
+
- 在用户明确给出芯片、工程和串口后烧录;
|
|
143
|
+
- 分别验证启动、上线、本地媒体、H5、AI 和稳定性;
|
|
144
|
+
- 输出 `TIRTC_PORTING_REPORT.md`,每一层都标成 `PASS`、`FAIL` 或 `SKIP`。
|
|
145
|
+
|
|
146
|
+
### Skill 不猜硬件
|
|
147
|
+
|
|
148
|
+
模板工程提供配网、绑定、MQTT、TiRTC、H5 和 AI 会话骨架,但不会内置所有开发板的产品驱动。每块开发板仍要根据自身资料接入:
|
|
149
|
+
|
|
150
|
+
- 摄像头和所选 MJPEG/H.264/H.265 完整媒体路径;
|
|
151
|
+
- 麦克风采集路径;
|
|
152
|
+
- Codec、I2S、功放和扬声器播放路径;
|
|
153
|
+
- 板级电源、时钟、复位和使能控制;
|
|
154
|
+
- 需要用于 AI 会话的实体按键或其他触发方式。
|
|
155
|
+
|
|
156
|
+
编译成功只代表构建层通过。只有拿到浏览器画面、实体扬声器声音和双向 AI 音频的实测证据,报告才能把对应能力标为 `PASS`。
|
|
157
|
+
|
|
158
|
+
## 准备板卡资料
|
|
159
|
+
|
|
160
|
+
板卡资料要和手上的实物版本对应。建议为每块板、每个 PCB 版本单独建目录,避免混入相似型号的文档。
|
|
161
|
+
|
|
162
|
+
建议按下面的结构整理:
|
|
163
|
+
|
|
164
|
+
```text
|
|
165
|
+
board-materials/
|
|
166
|
+
├── BOARD.md
|
|
167
|
+
├── schematic/
|
|
168
|
+
│ └── board-rev-a.pdf
|
|
169
|
+
├── bom/
|
|
170
|
+
│ └── board-rev-a.xlsx
|
|
171
|
+
├── bsp/
|
|
172
|
+
│ └── README.md
|
|
173
|
+
├── datasheets/
|
|
174
|
+
│ ├── camera-sensor.pdf
|
|
175
|
+
│ ├── audio-codec.pdf
|
|
176
|
+
│ └── amplifier.pdf
|
|
177
|
+
└── examples/
|
|
178
|
+
├── camera/
|
|
179
|
+
├── audio-record/
|
|
180
|
+
└── audio-playback/
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
`BOARD.md` 至少记录:
|
|
184
|
+
|
|
185
|
+
```markdown
|
|
186
|
+
# 板卡身份
|
|
187
|
+
|
|
188
|
+
- 厂商:
|
|
189
|
+
- 完整销售型号:
|
|
190
|
+
- 模组型号:
|
|
191
|
+
- PCB 丝印:
|
|
192
|
+
- 硬件版本:
|
|
193
|
+
- Flash / PSRAM:
|
|
194
|
+
|
|
195
|
+
# 资料来源
|
|
196
|
+
|
|
197
|
+
- 产品页:
|
|
198
|
+
- 原理图名称和版本:
|
|
199
|
+
- BSP 仓库、commit 或 tag:
|
|
200
|
+
- 已在实物上验证的示例:
|
|
201
|
+
|
|
202
|
+
# 开发目标
|
|
203
|
+
|
|
204
|
+
- H5 实时视频:
|
|
205
|
+
- H5 实时音频:
|
|
206
|
+
- H5 下行对讲:
|
|
207
|
+
- AI 双向对讲:
|
|
208
|
+
|
|
209
|
+
# 媒体与接入合同
|
|
210
|
+
|
|
211
|
+
- H5 支持/选定的视频 profile:
|
|
212
|
+
- 音频格式与 stream ID:
|
|
213
|
+
- 板卡/BSP 支持的 Wi-Fi 凭证方法:
|
|
214
|
+
- 本工程选择的凭证方法和重配入口:
|
|
215
|
+
- ThingConnect 绑定、已绑定跳过和清除方式:
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
不同能力需要的证据不一样:
|
|
219
|
+
|
|
220
|
+
| 资料 | 用来确认什么 | 重要程度 |
|
|
93
221
|
|---|---|---|
|
|
94
|
-
|
|
|
95
|
-
|
|
|
96
|
-
|
|
|
97
|
-
|
|
|
98
|
-
|
|
|
99
|
-
|
|
|
100
|
-
|
|
|
222
|
+
| 板卡身份 | 厂商、完整型号、模组、PCB 丝印和硬件版本 | 必需 |
|
|
223
|
+
| 原理图或网表 | GPIO、电源、复位、时钟、I2C、I2S、SPI、摄像头和音频链路 | 必需 |
|
|
224
|
+
| BSP 或厂商示例 | 实际初始化顺序、驱动版本、ESP-IDF 版本和可工作的管脚定义 | 必需 |
|
|
225
|
+
| 摄像头和编码资料 | Sensor、输入接口、所选 MJPEG/H.264/H.265 输出边界与刷新/关键帧控制 | H5 视频必需 |
|
|
226
|
+
| 音频资料 | 麦克风类型、Codec/ADC/DAC、采样率、位宽、声道、MCLK/BCLK/LRCK、功放使能 | 对讲必需 |
|
|
227
|
+
| 配网/绑定资料 | 可用 Wi-Fi 凭证方法、凭证存储/重配、可用绑定方法、已有绑定状态和清除入口 | 上线必需 |
|
|
228
|
+
| 数据手册 | 器件寄存器、时序、电气限制和版本差异 | 推荐 |
|
|
229
|
+
| 实测小工程 | 证明摄像头、录音、播放或编码确实在该 PCB 版本工作 | 强烈推荐 |
|
|
101
230
|
|
|
102
|
-
|
|
231
|
+
提供 BSP 时,请同时注明可复现的 commit、tag 或压缩包版本,以及它使用的 ESP-IDF 版本。只有一个持续变化的仓库首页,后续很难追溯代码与实物不一致的原因。
|
|
103
232
|
|
|
104
|
-
|
|
233
|
+
不要放进资料包的内容包括 Wi-Fi 密码、设备密钥、MQTT/WHIP token、证书、生产配置和真实用户音视频。
|
|
105
234
|
|
|
106
|
-
|
|
235
|
+
## 依赖和支持范围
|
|
107
236
|
|
|
108
|
-
|
|
237
|
+
### 当前版本基线
|
|
109
238
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
239
|
+
| 项目 | 当前要求 |
|
|
240
|
+
|---|---|
|
|
241
|
+
| 芯片 | ESP32-S3 |
|
|
242
|
+
| 参考模组 | ESP32-S3-WROOM-1-N16R8,或资源和配置经过确认的兼容板 |
|
|
243
|
+
| ESP-IDF | 5.5.x |
|
|
244
|
+
| 自动安装版本 | ESP-IDF v5.5.4 |
|
|
245
|
+
| TiRTC SDK | `espressif-esp32s3/2.3.0` |
|
|
246
|
+
| ESP32 Device Kit | 1.0.0 |
|
|
247
|
+
| Node.js | 18 或更高版本 |
|
|
248
|
+
| 支持自动安装的系统 | Linux、WSL、macOS |
|
|
249
|
+
| 原生 Windows | 使用 Espressif 官方安装器准备 ESP-IDF,再重新运行检查 |
|
|
115
250
|
|
|
116
|
-
|
|
251
|
+
当前生成器只支持 ESP32-S3。Flash 或 PSRAM 不是 16 MB / 8 MB 时,需要重新评估 `sdkconfig.defaults`、分区表、DMA 和媒体缓存预算。名称相近的芯片不会被自动当作 ESP32-S3 处理。
|
|
117
252
|
|
|
118
|
-
|
|
119
|
-
- npm registry 输出 `https://registry.npmjs.org/`。
|
|
253
|
+
### 本机软件
|
|
120
254
|
|
|
121
|
-
|
|
255
|
+
`setup esp32 --install` 会检查以下基础命令:
|
|
122
256
|
|
|
123
|
-
|
|
257
|
+
| 命令 | 用途 |
|
|
258
|
+
|---|---|
|
|
259
|
+
| `python3` | ESP-IDF、工程生成器和检查脚本 |
|
|
260
|
+
| `git` | 获取固定版本的 ESP-IDF |
|
|
261
|
+
| `bash` | 激活和安装 ESP-IDF |
|
|
262
|
+
| `tar` | 解包并验证 Device Kit |
|
|
124
263
|
|
|
125
|
-
|
|
126
|
-
npm config set registry https://registry.npmjs.org/
|
|
127
|
-
```
|
|
264
|
+
Doctor 还会检查 `cmake`、`ninja`、`idf.py` 和 `xtensa-esp32s3-elf-gcc`。安装器不会调用系统包管理器;缺少基础命令时,需要开发者按当前操作系统安装。
|
|
128
265
|
|
|
129
|
-
|
|
266
|
+
Ubuntu、Debian 或 WSL 可以参考:
|
|
130
267
|
|
|
131
268
|
```bash
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
npx tirtc-device-builder@0.2.0 install esp32
|
|
269
|
+
sudo apt-get update
|
|
270
|
+
sudo apt-get install -y git python3 python3-venv bash tar
|
|
135
271
|
```
|
|
136
272
|
|
|
137
|
-
|
|
273
|
+
### 网络和业务环境
|
|
138
274
|
|
|
139
|
-
|
|
140
|
-
Installed tirtc-esp32-builder 0.2.0 to /home/.../.codex/skills/tirtc-esp32-builder
|
|
141
|
-
Start a new Codex session, then invoke $tirtc-esp32-builder.
|
|
142
|
-
```
|
|
275
|
+
首次安装通常需要访问:
|
|
143
276
|
|
|
144
|
-
|
|
277
|
+
- npm 官方 Registry,用于取得 `tirtc-device-builder`;
|
|
278
|
+
- GitHub Release,用于下载 ESP32 Device Kit;
|
|
279
|
+
- Espressif 的 GitHub 仓库和工具下载地址,用于安装 ESP-IDF 与工具链。
|
|
145
280
|
|
|
146
|
-
|
|
281
|
+
H5 和 AI 的端到端验收还需要可访问的 ThingConnect 服务、可用账号、设备绑定条件、浏览器和外网。缺少其中一项,不影响工程生成和编译,但对应验收层要记录为 `SKIP`。
|
|
147
282
|
|
|
148
|
-
|
|
149
|
-
npx tirtc-device-builder@0.2.0 install esp32 --force
|
|
150
|
-
```
|
|
283
|
+
### 媒体约束
|
|
151
284
|
|
|
152
|
-
|
|
285
|
+
H5 视频要先从前端和服务端支持的合同中选择一种 profile。MJPEG 提交完整 JPEG 帧;H.264/H.265 按合同提交 Annex-B access unit、参数集,并实现刷新或关键帧控制。板上有摄像头 Sensor,只能证明图像有来源,不能证明浏览器一定能持续出图。
|
|
153
286
|
|
|
154
|
-
|
|
155
|
-
npx tirtc-device-builder@0.2.0 install esp32 \
|
|
156
|
-
--skills-dir /absolute/path/to/skills
|
|
157
|
-
```
|
|
287
|
+
当前音频基线使用 G.711 A-law、8 kHz、单声道。对讲还要有可靠的下行队列、A-law 解码、Codec/I2S/功放播放和会话停止清理。没有可用的全双工和 AEC 证据时,应按半双工设计 AI 对讲。
|
|
158
288
|
|
|
159
|
-
|
|
289
|
+
## 安装方式和目录
|
|
160
290
|
|
|
161
|
-
|
|
162
|
-
$skill-installer
|
|
291
|
+
### 推荐:用 npx 一次检查并安装
|
|
163
292
|
|
|
164
|
-
|
|
165
|
-
|
|
293
|
+
```bash
|
|
294
|
+
npx --yes tirtc-device-builder@latest setup esp32 --install
|
|
166
295
|
```
|
|
167
296
|
|
|
168
|
-
|
|
297
|
+
`npx` 会临时取得最新 CLI 并运行,不要求全局安装。它适合这种低频的安装和诊断工具,也避免用户机器里长期保留旧版本命令。
|
|
298
|
+
|
|
299
|
+
### 也可以全局安装
|
|
169
300
|
|
|
170
301
|
```bash
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
--ref v0.2.0 \
|
|
174
|
-
--path skills/tirtc-esp32-builder
|
|
302
|
+
npm install --global tirtc-device-builder@latest
|
|
303
|
+
tirtc-device-builder setup esp32 --install
|
|
175
304
|
```
|
|
176
305
|
|
|
177
|
-
|
|
306
|
+
安装命令是 `npm install`,不要写成 `npm --install`。
|
|
178
307
|
|
|
179
|
-
|
|
308
|
+
只执行 `npm install --global tirtc-device-builder` 会安装 CLI,不会准备完整开发环境。随后还要运行 `setup esp32 --install`,由它安装 Codex Skill、下载 Device Kit,并在需要时安装 ESP-IDF。npm 包没有 `preinstall`、`install` 或 `postinstall` 生命周期脚本,因此不会在安装 CLI 时改动这些目录。
|
|
180
309
|
|
|
181
|
-
|
|
310
|
+
安装公开包不需要执行 `npm login`;这个命令只和维护者发布新版本有关。
|
|
182
311
|
|
|
183
|
-
|
|
184
|
-
- 起步模板和平台公共组件;
|
|
185
|
-
- TiRTC ESP32-S3 SDK 头文件、静态库和构建契约;
|
|
186
|
-
- H5、AI、设备接入和会话协议文档。
|
|
312
|
+
### 只安装 Skill
|
|
187
313
|
|
|
188
|
-
|
|
314
|
+
如果 ESP-IDF 和 Device Kit 已经由团队统一准备,可以只复制 Codex Skill:
|
|
189
315
|
|
|
190
316
|
```bash
|
|
191
|
-
|
|
192
|
-
git clone https://github.com/tangeai/tirtc-server-example.git \
|
|
193
|
-
"$TIRTC_WORKSPACE/tirtc-server-example"
|
|
317
|
+
npx --yes tirtc-device-builder@latest install esp32
|
|
194
318
|
```
|
|
195
319
|
|
|
196
|
-
|
|
320
|
+
这条命令不安装 ESP-IDF,也不下载 Device Kit。完整的新用户环境仍建议使用 `setup esp32 --install`。
|
|
321
|
+
|
|
322
|
+
### 默认目录
|
|
323
|
+
|
|
324
|
+
| 内容 | 默认位置 |
|
|
325
|
+
|---|---|
|
|
326
|
+
| Codex Skill | `${CODEX_HOME:-~/.codex}/skills/tirtc-esp32-builder` |
|
|
327
|
+
| 托管根目录 | `~/.tirtc-device-builder` |
|
|
328
|
+
| Device Kit | `~/.tirtc-device-builder/kits/esp32s3/1.0.0` |
|
|
329
|
+
| ESP-IDF | `~/.tirtc-device-builder/esp-idf-v5.5.4` |
|
|
330
|
+
| Espressif 工具 | `~/.tirtc-device-builder/espressif` |
|
|
331
|
+
| 安装记录 | `~/.tirtc-device-builder/config.json` |
|
|
332
|
+
| 环境入口 | `~/.tirtc-device-builder/env.sh` |
|
|
333
|
+
|
|
334
|
+
新开终端后,用下面的命令激活托管环境:
|
|
197
335
|
|
|
198
336
|
```bash
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
ls -l "$TIRTC_THING_CONNECT_ROOT/device-sim/sdk/espressif-esp32s3/2.3.0/manifest/build-contract.env"
|
|
337
|
+
source ~/.tirtc-device-builder/env.sh
|
|
338
|
+
idf.py --version
|
|
339
|
+
printf '%s\n' "$TIRTC_THING_CONNECT_ROOT"
|
|
203
340
|
```
|
|
204
341
|
|
|
205
|
-
|
|
342
|
+
`env.sh` 只设置 ESP-IDF、工具链和 Device Kit 路径,不包含设备凭证。
|
|
343
|
+
|
|
344
|
+
### 自定义目录或复用已有环境
|
|
345
|
+
|
|
346
|
+
把所有托管文件放到指定目录:
|
|
206
347
|
|
|
207
348
|
```bash
|
|
208
|
-
|
|
349
|
+
npx --yes tirtc-device-builder@latest setup esp32 --install \
|
|
350
|
+
--root /absolute/path/tirtc-dev
|
|
209
351
|
```
|
|
210
352
|
|
|
211
|
-
|
|
353
|
+
自定义根目录后,环境入口也随之变为 `/absolute/path/tirtc-dev/env.sh`。
|
|
212
354
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
先检查当前终端,不要因为环境未激活而重复安装:
|
|
355
|
+
复用已有 ESP-IDF 5.5.x:
|
|
216
356
|
|
|
217
357
|
```bash
|
|
218
|
-
|
|
219
|
-
idf
|
|
220
|
-
command -v xtensa-esp32s3-elf-gcc
|
|
358
|
+
npx --yes tirtc-device-builder@latest setup esp32 --install \
|
|
359
|
+
--idf-dir /absolute/path/esp-idf
|
|
221
360
|
```
|
|
222
361
|
|
|
223
|
-
|
|
362
|
+
复用已经解包的 Device Kit,或维护者本地的完整 ThingConnect 工作区:
|
|
224
363
|
|
|
225
|
-
|
|
364
|
+
```bash
|
|
365
|
+
npx --yes tirtc-device-builder@latest setup esp32 --install \
|
|
366
|
+
--thing-connect-root /absolute/path/to/device-kit-or-thing-connect
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
从本地 Device Kit 压缩包安装,适合内网或离线转交:
|
|
226
370
|
|
|
227
371
|
```bash
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
command -v xtensa-esp32s3-elf-gcc
|
|
372
|
+
npx --yes tirtc-device-builder@latest setup esp32 --install \
|
|
373
|
+
--kit-archive /absolute/path/tirtc-esp32s3-kit-1.0.0.tar.gz
|
|
231
374
|
```
|
|
232
375
|
|
|
233
|
-
|
|
376
|
+
安装器仍会核对固定的 SHA-256、目录结构、清单和每个资源文件,不接受未经验证的同名压缩包。
|
|
377
|
+
|
|
378
|
+
### 更新已安装的 Skill
|
|
234
379
|
|
|
235
|
-
|
|
380
|
+
默认安装不会覆盖已有 Skill,以免丢失本地修改。确认这些修改不需要保留后,可用最新 npm 包替换:
|
|
236
381
|
|
|
237
382
|
```bash
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util \
|
|
241
|
-
libusb-1.0-0
|
|
383
|
+
npx --yes tirtc-device-builder@latest setup esp32 --install --force-skill
|
|
384
|
+
```
|
|
242
385
|
|
|
243
|
-
|
|
244
|
-
git clone -b v5.5.4 --recursive \
|
|
245
|
-
https://github.com/espressif/esp-idf.git \
|
|
246
|
-
"$TIRTC_WORKSPACE/toolchains/esp-idf-v5.5.4"
|
|
386
|
+
该命令只替换 Skill;同版本且已通过校验的 Device Kit 和 ESP-IDF 会继续复用。自定义脚本或规则请提前备份。
|
|
247
387
|
|
|
248
|
-
|
|
249
|
-
source "$TIRTC_WORKSPACE/toolchains/esp-idf-v5.5.4/export.sh"
|
|
388
|
+
## 常用检查和开发命令
|
|
250
389
|
|
|
251
|
-
|
|
252
|
-
|
|
390
|
+
### 查看当前状态
|
|
391
|
+
|
|
392
|
+
```bash
|
|
393
|
+
npx --yes tirtc-device-builder@latest setup esp32
|
|
253
394
|
```
|
|
254
395
|
|
|
255
|
-
|
|
396
|
+
`setup esp32` 的检查逻辑不会安装开发组件、修改 shell 配置、生成工程或烧录。第一次运行 `npx` 时,npm 可能会把 CLI 下载到自己的缓存。
|
|
256
397
|
|
|
257
|
-
|
|
398
|
+
环境完整时,它会运行 Doctor 并输出 `SETUP: READY`。环境不完整时,它输出 `OVERALL: NEEDS_SETUP` 和下一条建议命令。
|
|
258
399
|
|
|
259
|
-
|
|
400
|
+
查看 CLI 和当前平台:
|
|
260
401
|
|
|
261
402
|
```bash
|
|
262
|
-
npx tirtc-device-builder@
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
--thing-connect-root "$TIRTC_THING_CONNECT_ROOT" \
|
|
266
|
-
--require-workspace
|
|
403
|
+
npx --yes tirtc-device-builder@latest --help
|
|
404
|
+
npx --yes tirtc-device-builder@latest list
|
|
405
|
+
npx --yes tirtc-device-builder@latest setup esp32 --help
|
|
267
406
|
```
|
|
268
407
|
|
|
269
|
-
|
|
408
|
+
### 生成工程前运行 Doctor
|
|
270
409
|
|
|
271
410
|
```bash
|
|
272
|
-
|
|
411
|
+
source ~/.tirtc-device-builder/env.sh
|
|
412
|
+
|
|
413
|
+
npx --yes tirtc-device-builder@latest doctor esp32 \
|
|
273
414
|
--expected-idf 5.5 \
|
|
274
415
|
--target esp32s3 \
|
|
275
416
|
--thing-connect-root "$TIRTC_THING_CONNECT_ROOT" \
|
|
276
417
|
--require-workspace
|
|
277
418
|
```
|
|
278
419
|
|
|
279
|
-
|
|
420
|
+
生成前应看到:
|
|
280
421
|
|
|
281
|
-
| 检查项 |
|
|
422
|
+
| 检查项 | 合格结果 |
|
|
282
423
|
|---|---|
|
|
283
424
|
| Python、Git | `PASS` |
|
|
284
425
|
| `idf.py` | `PASS`,版本为 5.5.x |
|
|
285
426
|
| target compiler | `PASS`,找到 ESP32-S3 编译器 |
|
|
286
|
-
|
|
|
427
|
+
| ESP32 Device Kit | `PASS` |
|
|
287
428
|
| TiRTC SDK | `PASS` |
|
|
288
|
-
| serial discovery |
|
|
429
|
+
| serial discovery | 未接板时允许 `WARN` |
|
|
289
430
|
| OVERALL | `PASS` |
|
|
290
431
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
常见检查失败:
|
|
432
|
+
已经安装 Skill 时,也能直接调用同一份脚本:
|
|
294
433
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
-
|
|
298
|
-
|
|
299
|
-
-
|
|
300
|
-
|
|
301
|
-
不要在一个空目录上提前使用 `--project`。如果看到:
|
|
302
|
-
|
|
303
|
-
```text
|
|
304
|
-
FAIL TiRTC build contract [required]: no sdkconfig or sdkconfig.defaults in ...
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
表示传入目录还不是已生成的 ESP-IDF 工程,或者 `--project` 路径给错了。先让 Skill/生成器创建工程;生成后目录中应有 `sdkconfig.defaults`,再运行项目级 Doctor。
|
|
308
|
-
|
|
309
|
-
### 第 7 步:在新 Codex 会话中调用 Skill
|
|
310
|
-
|
|
311
|
-
只给出板卡型号也可以启动分析,但提供完整资料更容易一次进入开发。建议复制下面的提示词,逐项替换尖括号内容和绝对路径:
|
|
312
|
-
|
|
313
|
-
```text
|
|
314
|
-
请使用 $tirtc-esp32-builder 完成这块板的 TiRTC 移植。
|
|
315
|
-
|
|
316
|
-
板卡:
|
|
317
|
-
- 厂商:<厂商>
|
|
318
|
-
- 完整型号:<型号>
|
|
319
|
-
- 模组:<例如 ESP32-S3-WROOM-1-N16R8>
|
|
320
|
-
- PCB 丝印/硬件版本:<版本>
|
|
321
|
-
|
|
322
|
-
输入资料:
|
|
323
|
-
- 原理图或网表:/absolute/path/board-materials/<file>
|
|
324
|
-
- BOM:/absolute/path/board-materials/<file>
|
|
325
|
-
- BSP/厂商示例:/absolute/path/vendor-bsp
|
|
326
|
-
- 摄像头/Codec/功放数据手册:/absolute/path/board-materials/<files>
|
|
327
|
-
- ThingConnect:/absolute/path/tirtc-server-example/thing-connect
|
|
328
|
-
|
|
329
|
-
目标:
|
|
330
|
-
- H5 实时视频和音频
|
|
331
|
-
- H5 下行语音对讲
|
|
332
|
-
- AI 双向语音对讲
|
|
333
|
-
|
|
334
|
-
输出:
|
|
335
|
-
- 新工程目录:/absolute/path/my-esp32-device
|
|
336
|
-
- Hardware IR:放在新工程同级或工程内的明确路径
|
|
337
|
-
- 报告:/absolute/path/my-esp32-device/TIRTC_PORTING_REPORT.md
|
|
338
|
-
|
|
339
|
-
执行要求:
|
|
340
|
-
1. 先运行环境 Doctor,并核对 ESP-IDF 5.5.x、esp32s3 工具链和 TiRTC SDK。
|
|
341
|
-
2. 完整分析我提供的每份资料,记录来源、版本、冲突和未知项。
|
|
342
|
-
3. 生成、校验并严格评估 Hardware IR;不要从相似板型猜测管脚或器件。
|
|
343
|
-
4. 每项能力达到 READY_TO_PORT 后,生成独立工程并把板级采集、编码、播放、按键放在 starter_media/板级 adapter。
|
|
344
|
-
5. 运行相关测试和 idf.py build,保留实际命令、结果、固件路径和 SHA-256。
|
|
345
|
-
6. 本轮不烧录、不写设备凭证;需要下载、安装或修改系统环境时先说明具体动作。
|
|
346
|
-
7. 最后生成 TIRTC_PORTING_REPORT.md,所有验收层级使用 PASS、FAIL 或 SKIP,不能用编译成功代替 H5/AI 实机通过。
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
如果只有型号和网页资料,可先用:
|
|
350
|
-
|
|
351
|
-
```text
|
|
352
|
-
$tirtc-esp32-builder
|
|
353
|
-
|
|
354
|
-
分析 <厂商> <完整型号> <PCB 版本>,目标是 H5 实时音视频、H5 对讲和 AI 双向对讲。
|
|
355
|
-
先输出板卡资料清单、Hardware IR、能力结论和最小缺失项;本轮不生成工程、不烧录。
|
|
434
|
+
```bash
|
|
435
|
+
python3 ~/.codex/skills/tirtc-esp32-builder/scripts/doctor.py \
|
|
436
|
+
--expected-idf 5.5 \
|
|
437
|
+
--target esp32s3 \
|
|
438
|
+
--thing-connect-root "$TIRTC_THING_CONNECT_ROOT" \
|
|
439
|
+
--require-workspace
|
|
356
440
|
```
|
|
357
441
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
- 已支持板卡:校验已有 Hardware IR 和 adapter 后重新生成、编译和验收;
|
|
361
|
-
- 新板卡:逐份提取原理图/BSP/数据手册事实,建立 Hardware IR,再决定是否实现;
|
|
362
|
-
- 已有 ESP-IDF 工程:先检查目标、配置、组件、驱动和最小外设示例,再隔离可复用板级代码。
|
|
363
|
-
|
|
364
|
-
### 第 8 步:检查 Hardware IR 和能力门禁
|
|
442
|
+
### 检查 Hardware IR
|
|
365
443
|
|
|
366
|
-
|
|
444
|
+
下面的工具通常由 Codex 调用,开发者也可以手工复核:
|
|
367
445
|
|
|
368
446
|
```bash
|
|
369
447
|
python3 ~/.codex/skills/tirtc-esp32-builder/scripts/hardware_ir.py init \
|
|
@@ -376,196 +454,362 @@ python3 ~/.codex/skills/tirtc-esp32-builder/scripts/hardware_ir.py assess --stri
|
|
|
376
454
|
/absolute/path/hardware-ir.json
|
|
377
455
|
```
|
|
378
456
|
|
|
379
|
-
|
|
457
|
+
能力门禁有四种状态:
|
|
380
458
|
|
|
381
|
-
| 状态 | 含义 |
|
|
459
|
+
| 状态 | 含义 | 怎么处理 |
|
|
382
460
|
|---|---|---|
|
|
383
|
-
| `NEEDS_CONFIRMATION` |
|
|
384
|
-
| `BLOCKED` |
|
|
385
|
-
| `READY_TO_PORT` |
|
|
386
|
-
| `HIL_VERIFIED` |
|
|
461
|
+
| `NEEDS_CONFIRMATION` | 关键事实未知、冲突或只有单一来源 | 补原理图、BSP、数据手册或实测证据 |
|
|
462
|
+
| `BLOCKED` | 现有硬件或 SDK 已确认不满足 | 更换硬件,补编码/播放路径,或取得匹配 SDK |
|
|
463
|
+
| `READY_TO_PORT` | 资料足以开始生成和板级实现 | 进入工程生成与编译 |
|
|
464
|
+
| `HIL_VERIFIED` | 已完成端到端实机验证 | 固定版本并保存证据 |
|
|
387
465
|
|
|
388
|
-
`assess --strict`
|
|
466
|
+
`assess --strict` 在条件不足时返回非零,这是门禁在阻止过早生成,不代表脚本损坏。
|
|
467
|
+
|
|
468
|
+
Hardware IR v2 只有在运行证据绑定到同一固件 SHA-256 时才会给出 `HIL_VERIFIED`:
|
|
469
|
+
|
|
470
|
+
```bash
|
|
471
|
+
python3 ~/.codex/skills/tirtc-esp32-builder/scripts/hardware_ir.py assess \
|
|
472
|
+
/absolute/path/hardware-ir.json \
|
|
473
|
+
--artifact-sha256 <64-character-sha256> --strict
|
|
474
|
+
```
|
|
389
475
|
|
|
390
|
-
###
|
|
476
|
+
### 生成和编译
|
|
391
477
|
|
|
392
|
-
|
|
478
|
+
建议让 Skill 完成生成、适配和编译。需要人工复现时,先激活环境,并确认输出目录尚不存在:
|
|
393
479
|
|
|
394
480
|
```bash
|
|
481
|
+
source ~/.tirtc-device-builder/env.sh
|
|
482
|
+
|
|
395
483
|
python3 "$TIRTC_THING_CONNECT_ROOT/device-sim/scripts/create_esp32_project.py" \
|
|
396
|
-
|
|
484
|
+
/absolute/path/my-esp32-device \
|
|
397
485
|
--name my_esp32_device
|
|
398
486
|
```
|
|
399
487
|
|
|
400
|
-
`--name`
|
|
488
|
+
`--name` 只能包含小写字母、数字和下划线。生成器不会覆盖已有目录。
|
|
401
489
|
|
|
402
|
-
|
|
490
|
+
工程生成后再做项目级检查:
|
|
403
491
|
|
|
404
492
|
```bash
|
|
405
|
-
cd "$TIRTC_PROJECT_DIR"
|
|
406
|
-
source "$TIRTC_WORKSPACE/toolchains/esp-idf-v5.5.4/export.sh"
|
|
407
|
-
|
|
408
493
|
python3 ~/.codex/skills/tirtc-esp32-builder/scripts/doctor.py \
|
|
409
494
|
--expected-idf 5.5 \
|
|
410
495
|
--target esp32s3 \
|
|
411
|
-
--project
|
|
496
|
+
--project /absolute/path/my-esp32-device
|
|
412
497
|
```
|
|
413
498
|
|
|
414
|
-
|
|
499
|
+
`TiRTC build contract` 为 `PASS` 后编译:
|
|
415
500
|
|
|
416
501
|
```bash
|
|
502
|
+
cd /absolute/path/my-esp32-device
|
|
417
503
|
idf.py set-target esp32s3
|
|
418
504
|
idf.py build
|
|
419
505
|
```
|
|
420
506
|
|
|
421
|
-
|
|
507
|
+
生成器会把 TiRTC SDK 复制到工程的 `third_party/tirtc/`。此后工程不再依赖 `tirtc-server-example`,但换机编译仍需准备兼容的 ESP-IDF 5.5.x 工具链。
|
|
422
508
|
|
|
423
|
-
|
|
424
|
-
- 摄像头采集并提交 H.264 Annex-B access unit;
|
|
425
|
-
- 收到关键帧请求时让编码器产生 IDR;
|
|
426
|
-
- 把下行 A-law 音频放入有界队列,解码后写入 Codec/I2S/功放;
|
|
427
|
-
- 把实体按键映射到 AI 开始/停止;
|
|
428
|
-
- 停止会话时有界停止采集/播放任务并清空旧 generation 数据。
|
|
429
|
-
|
|
430
|
-
检查仍未完成的产品适配点:
|
|
509
|
+
检查尚未完成的产品适配点:
|
|
431
510
|
|
|
432
511
|
```bash
|
|
433
512
|
rg -n 'TODO\(product-' main components
|
|
434
513
|
```
|
|
435
514
|
|
|
436
|
-
|
|
515
|
+
常见适配内容包括麦克风采集、G.711 A-law 编码、所选视频 profile 输出与刷新请求、下行音频播放、实体按键和会话停止后的资源清理。
|
|
516
|
+
|
|
517
|
+
## 烧录和验收
|
|
437
518
|
|
|
438
|
-
###
|
|
519
|
+
### 烧录前确认串口
|
|
439
520
|
|
|
440
|
-
|
|
521
|
+
Linux 常见串口是 `/dev/ttyACM0` 或 `/dev/ttyUSB0`:
|
|
441
522
|
|
|
442
523
|
```bash
|
|
443
524
|
ls -l /dev/ttyACM* /dev/ttyUSB*
|
|
444
525
|
```
|
|
445
526
|
|
|
446
|
-
|
|
527
|
+
把实际端口交给 Doctor:
|
|
447
528
|
|
|
448
529
|
```bash
|
|
449
530
|
python3 ~/.codex/skills/tirtc-esp32-builder/scripts/doctor.py \
|
|
450
531
|
--expected-idf 5.5 \
|
|
451
532
|
--target esp32s3 \
|
|
452
|
-
--project
|
|
533
|
+
--project /absolute/path/my-esp32-device \
|
|
453
534
|
--serial-port /dev/ttyACM0
|
|
454
535
|
```
|
|
455
536
|
|
|
456
|
-
`serial port`
|
|
457
|
-
|
|
458
|
-
让 Skill 烧录时发起第二次、独立且明确的请求:
|
|
537
|
+
`serial port` 为 `PASS` 后,再单独向 Skill 授权:
|
|
459
538
|
|
|
460
539
|
```text
|
|
461
540
|
$tirtc-esp32-builder
|
|
462
541
|
|
|
463
|
-
我确认目标芯片是 ESP32-S3
|
|
464
|
-
|
|
542
|
+
我确认目标芯片是 ESP32-S3,工程是 /absolute/path/my-esp32-device,
|
|
543
|
+
串口是 /dev/ttyACM0。授权本轮烧录该设备并打开串口监视。
|
|
465
544
|
不要擦除其他串口设备,不要在日志中输出 Wi-Fi 密码或设备密钥。
|
|
466
545
|
烧录后执行 L2 Boot 检查并更新 TIRTC_PORTING_REPORT.md。
|
|
467
546
|
```
|
|
468
547
|
|
|
469
|
-
|
|
548
|
+
也可以人工烧录:
|
|
470
549
|
|
|
471
550
|
```bash
|
|
472
|
-
cd
|
|
551
|
+
cd /absolute/path/my-esp32-device
|
|
473
552
|
idf.py -p /dev/ttyACM0 flash monitor
|
|
474
553
|
```
|
|
475
554
|
|
|
476
|
-
|
|
555
|
+
使用 `Ctrl+]` 退出 ESP-IDF Monitor。多个串口同时存在时,需要通过 USB 拔插、设备标识或芯片探测确认目标,不能默认烧录第一个端口。
|
|
477
556
|
|
|
478
|
-
|
|
557
|
+
### Wi-Fi 凭证和设备绑定
|
|
479
558
|
|
|
480
|
-
|
|
559
|
+
SoftAP 是可选方案,不是接入前提。Hardware IR 要根据 BSP 的实际能力和产品要求,选择 SoftAP、BLE、SmartConfig、安全工厂/NVS 注入、不纳入版本控制的开发配置,或有文档的自定义方案。SSID 和密码不应写死在源码中。
|
|
481
560
|
|
|
482
|
-
|
|
561
|
+
无论选择哪种方法,都要有当前 PCB/BSP 的支持证据,凭证不能进入 Git、源码或报告,并且要保留清除或重配入口。没有 SoftAP、但支持工厂 NVS 注入的设备同样可以接入。只要工程提交了明文密码,Hardware IR v2 门禁就会判为 `BLOCKED`。
|
|
483
562
|
|
|
484
|
-
|
|
485
|
-
2. 输入默认密码 `tirtc1234`。
|
|
486
|
-
3. 打开 `http://192.168.4.1`,填写设备要连接的 Wi-Fi。
|
|
487
|
-
4. 设备重启并联网后,在串口查看绑定验证码和体验平台地址。
|
|
488
|
-
5. 登录体验平台,在设备绑定入口输入验证码。
|
|
489
|
-
6. 回到串口输入 `status`,确认 platform、MQTT、TiRTC 均已就绪,runtime 处于 `waiting`。
|
|
563
|
+
Wi-Fi 配网和 ThingConnect 设备绑定是两套独立流程。绑定可以选择验证码、工厂预绑定、开发凭证,或平台合同允许的 custom 方案。验收时要分开检查:
|
|
490
564
|
|
|
491
|
-
|
|
565
|
+
1. 没有 Wi-Fi 凭证时,设备进入选定的配网或注入流程。
|
|
566
|
+
2. 已联网但尚未绑定时,设备进入选定的绑定流程;只有验证码方案需要显示验证码。
|
|
567
|
+
3. NVS 已保存绑定时,日志应明确说明复用已有绑定并跳过首次绑定,不能据此判断“绑定流程缺失”。
|
|
568
|
+
4. 分别验证只清设备绑定和只清 Wi-Fi 凭证的入口。
|
|
569
|
+
5. `status` 确认 platform、MQTT、TiRTC 和 runtime 状态。
|
|
492
570
|
|
|
493
|
-
|
|
494
|
-
wifi-set <ssid> <password>
|
|
495
|
-
wifi-clear
|
|
496
|
-
status
|
|
497
|
-
restart
|
|
498
|
-
```
|
|
571
|
+
具体命令和 UI 由生成工程及所选方案决定,不能直接照搬另一块板。生产凭证、设备 secret 和 token 不得写入源码、脚本、Hardware IR、报告或 Git。
|
|
499
572
|
|
|
500
|
-
|
|
573
|
+
### 验证 H5 实时查看和对讲
|
|
501
574
|
|
|
502
|
-
|
|
575
|
+
1. 串口 `status` 显示 runtime 为 `waiting`。
|
|
576
|
+
2. 在体验平台打开该设备的实时查看入口。
|
|
577
|
+
3. 确认所选 MJPEG/H.264/H.265 视频持续显示,音频和视频发送计数持续增长。
|
|
578
|
+
4. 发起 H5 对讲,确认 stream 14 下行计数增长,实体扬声器可以听到声音。
|
|
579
|
+
5. 触发浏览器重连或刷新请求,确认 MJPEG 提交下一张完整 JPEG,或 H.264/H.265 产生合同要求的刷新/关键帧,画面能够恢复。
|
|
503
580
|
|
|
504
|
-
|
|
581
|
+
视频、声音和重连要分别保留证据。浏览器偶尔出现一帧,不能算作持续实时查看通过。
|
|
505
582
|
|
|
506
|
-
|
|
507
|
-
|---|---|
|
|
508
|
-
| L-1 Environment | Doctor 的必需项和项目构建契约通过 |
|
|
509
|
-
| L0 Generate | 新工程和 Hardware IR 存在,未覆盖旧目录 |
|
|
510
|
-
| L1 Build | `idf.py build` 成功并记录固件及 SHA-256 |
|
|
511
|
-
| L2 Boot | 指定串口烧录成功,无 panic/反复重启 |
|
|
512
|
-
| L3 Online | 配网、验证码绑定、MQTT、TiRTC 就绪 |
|
|
513
|
-
| L4 Media | 摄像头、麦克风、扬声器本地路径和计数正常 |
|
|
514
|
-
| L5 H5 | 浏览器持续收到声明的视频/音频,对讲到达设备扬声器 |
|
|
515
|
-
| L6 AI | token、WHIP、`start_session`、双向音频、停止和 H5 恢复正常 |
|
|
516
|
-
| L7 Stability | 按需求完成反复会话、弱网、资源和长稳测试 |
|
|
583
|
+
### 验证 AI 对讲
|
|
517
584
|
|
|
518
|
-
H5
|
|
585
|
+
1. 先确认 H5 或其他会话没有占用媒体资源。
|
|
586
|
+
2. 串口输入 `ai-start`,观察状态从 `ai-connecting` 进入 `ai-active`。
|
|
587
|
+
3. 确认 `start_session` 成功后,设备才开始发送麦克风音频。
|
|
588
|
+
4. 确认上行语音被 AI 接收,下行 AI 音频能从实体扬声器播放。
|
|
589
|
+
5. 输入 `ai-stop`,确认发送 `end_session`,媒体任务停止,状态回到 `waiting`。
|
|
590
|
+
6. 再次打开 H5,确认实时音视频可以重新连接。
|
|
519
591
|
|
|
520
|
-
|
|
521
|
-
2. 在体验平台打开该设备的实时查看入口。
|
|
522
|
-
3. 确认 H.264 视频持续显示,音频/视频发送计数持续增长。
|
|
523
|
-
4. 发起 H5 对讲,确认 stream 14 下行计数增长且实体扬声器可听。
|
|
524
|
-
5. 触发浏览器重连或关键帧请求,确认板端编码器产生新的 IDR,画面恢复。
|
|
592
|
+
如果产品使用实体按键启动 AI,会话状态和验收条件相同,只是触发方式从串口命令换成板级按键。
|
|
525
593
|
|
|
526
|
-
|
|
594
|
+
### 分层验收
|
|
527
595
|
|
|
528
|
-
|
|
529
|
-
2. 串口输入 `ai-start`,观察状态从 `ai-connecting` 进入 `ai-active`。
|
|
530
|
-
3. 确认只有 `start_session` 成功后才开始发送麦克风音频。
|
|
531
|
-
4. 确认上行麦克风被 AI 接收,下行 AI 音频在扬声器播放。
|
|
532
|
-
5. 输入 `ai-stop`,确认发送 `end_session`、媒体任务停止,状态回到 `waiting`。
|
|
533
|
-
6. 再次打开 H5,确认 H5 可以重新连接并恢复音视频。
|
|
596
|
+
每一层都要有独立证据。缺少硬件、账号、浏览器、服务或网络时,写 `SKIP`,并注明后续补测条件。
|
|
534
597
|
|
|
535
|
-
|
|
598
|
+
| 层级 | 通过条件 |
|
|
599
|
+
|---|---|
|
|
600
|
+
| L-1 Environment | Doctor 必需项和项目构建契约通过 |
|
|
601
|
+
| L0 Generate | 新工程和 Hardware IR 存在,没有覆盖旧目录 |
|
|
602
|
+
| L1 Build | `idf.py build` 成功,固件和 SHA-256 已记录 |
|
|
603
|
+
| L2 Boot | 指定串口烧录成功,无 panic 或反复重启 |
|
|
604
|
+
| L3 Online | 所选 Wi-Fi 凭证和设备绑定流程、MQTT 与 TiRTC 就绪 |
|
|
605
|
+
| L4 Media | 摄像头、麦克风、扬声器的本地路径和计数正常 |
|
|
606
|
+
| L5 H5 | 浏览器持续收到声明的音视频,下行对讲到达实体扬声器 |
|
|
607
|
+
| L6 AI | token、WHIP、`start_session`、双向音频、停止和 H5 恢复正常 |
|
|
608
|
+
| L7 Stability | 按需求完成反复会话、弱网、资源和长稳测试 |
|
|
536
609
|
|
|
537
|
-
|
|
610
|
+
一份完整交付通常包含:
|
|
538
611
|
|
|
539
|
-
-
|
|
540
|
-
- `hardware-ir.json`
|
|
541
|
-
-
|
|
542
|
-
-
|
|
612
|
+
- 生成工程的绝对路径;
|
|
613
|
+
- `hardware-ir.json` 和关键事实来源;
|
|
614
|
+
- 能力评估与剩余阻塞项;
|
|
615
|
+
- 固件文件、构建命令、版本和 SHA-256;
|
|
543
616
|
- 明确到芯片和串口的烧录记录;
|
|
544
617
|
- 脱敏后的构建、启动和验收日志;
|
|
545
618
|
- `TIRTC_PORTING_REPORT.md`;
|
|
546
|
-
- L-1 到 L7 的 `PASS`、`FAIL` 或 `SKIP
|
|
619
|
+
- L-1 到 L7 的 `PASS`、`FAIL` 或 `SKIP`。
|
|
620
|
+
|
|
621
|
+
任务只做到生成和编译时,报告应明确停在 L1。
|
|
622
|
+
|
|
623
|
+
## 常见问题
|
|
624
|
+
|
|
625
|
+
### 找不到 `node`、`npm` 或 `npx`
|
|
626
|
+
|
|
627
|
+
安装 Node.js 18 或更高版本,重新打开终端,再检查:
|
|
628
|
+
|
|
629
|
+
```bash
|
|
630
|
+
node --version
|
|
631
|
+
npm --version
|
|
632
|
+
npx --version
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
### npm 使用了镜像源,提示 404 或找不到包
|
|
636
|
+
|
|
637
|
+
查看当前 Registry:
|
|
638
|
+
|
|
639
|
+
```bash
|
|
640
|
+
npm config get registry
|
|
641
|
+
```
|
|
642
|
+
|
|
643
|
+
如果不是 `https://registry.npmjs.org/`,切回官方源后重试:
|
|
644
|
+
|
|
645
|
+
```bash
|
|
646
|
+
npm config set registry https://registry.npmjs.org/
|
|
647
|
+
npm view tirtc-device-builder version
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
### `npm login` 提示无法打开浏览器
|
|
651
|
+
|
|
652
|
+
普通使用者不需要登录 npm。直接执行:
|
|
547
653
|
|
|
548
|
-
|
|
654
|
+
```bash
|
|
655
|
+
npx --yes tirtc-device-builder@latest setup esp32 --install
|
|
656
|
+
```
|
|
657
|
+
|
|
658
|
+
`npm login` 只供维护者发布包,与安装公开包无关。
|
|
659
|
+
|
|
660
|
+
### 输出 `OVERALL: NEEDS_SETUP`
|
|
661
|
+
|
|
662
|
+
这表示只读检查发现环境尚未准备完整。按输出提示执行安装:
|
|
663
|
+
|
|
664
|
+
```bash
|
|
665
|
+
npx --yes tirtc-device-builder@latest setup esp32 --install
|
|
666
|
+
```
|
|
549
667
|
|
|
550
|
-
###
|
|
668
|
+
### 提示缺少 `python3`、`git`、`bash` 或 `tar`
|
|
551
669
|
|
|
552
|
-
|
|
670
|
+
安装器不会运行 `sudo`。请用当前系统的包管理器补齐这些命令,再执行 `setup esp32 --install`。安装可以续跑,已经完成的部分会被复用。
|
|
553
671
|
|
|
554
|
-
|
|
555
|
-
- [ ] 原理图/BOM/BSP/数据手册路径均为绝对路径且可读。
|
|
556
|
-
- [ ] Node.js 版本不低于 18,Skill 已安装并重启 Codex。
|
|
557
|
-
- [ ] ThingConnect 生成器、TiRTC 头文件、静态库和构建契约存在。
|
|
558
|
-
- [ ] 当前终端已激活 ESP-IDF 5.5.x 和 ESP32-S3 工具链。
|
|
559
|
-
- [ ] 生成前 Doctor 的 `OVERALL` 为 `PASS`。
|
|
560
|
-
- [ ] 所有请求能力均为 `READY_TO_PORT` 或 `HIL_VERIFIED`。
|
|
561
|
-
- [ ] 输出目录不存在,旧工程未被覆盖。
|
|
562
|
-
- [ ] 项目级 Doctor 的 `TiRTC build contract` 为 `PASS`。
|
|
563
|
-
- [ ] `idf.py build` 成功,但尚未把它当作实机功能通过。
|
|
564
|
-
- [ ] 烧录前已确认唯一串口并明确授权。
|
|
565
|
-
- [ ] 配网、绑定、H5、AI 分层验收均保留脱敏证据。
|
|
566
|
-
- [ ] 最终报告中的每个 `SKIP` 都有原因和最小下一步。
|
|
672
|
+
### `idf.py not found`
|
|
567
673
|
|
|
568
|
-
|
|
674
|
+
当前终端没有激活 ESP-IDF。使用一键环境时执行:
|
|
675
|
+
|
|
676
|
+
```bash
|
|
677
|
+
source ~/.tirtc-device-builder/env.sh
|
|
678
|
+
idf.py --version
|
|
679
|
+
```
|
|
680
|
+
|
|
681
|
+
使用已有 ESP-IDF 时执行它自己的 `export.sh`:
|
|
682
|
+
|
|
683
|
+
```bash
|
|
684
|
+
source /absolute/path/esp-idf/export.sh
|
|
685
|
+
```
|
|
686
|
+
|
|
687
|
+
### ESP-IDF 版本不是 5.5.x
|
|
688
|
+
|
|
689
|
+
不要用错误版本继续编译预编译 SDK。让安装器使用新的托管目录,或明确传入正确版本:
|
|
690
|
+
|
|
691
|
+
```bash
|
|
692
|
+
npx --yes tirtc-device-builder@latest setup esp32 --install \
|
|
693
|
+
--idf-dir /absolute/path/esp-idf-v5.5.4
|
|
694
|
+
```
|
|
695
|
+
|
|
696
|
+
如果指定目录已存在但内容不完整或版本错误,安装器会拒绝覆盖。换一个空的新路径,或先人工备份原目录。
|
|
697
|
+
|
|
698
|
+
### 安装完成后 Codex 找不到 Skill
|
|
699
|
+
|
|
700
|
+
关闭当前 Codex 会话并重新打开。再检查默认文件是否存在:
|
|
701
|
+
|
|
702
|
+
```bash
|
|
703
|
+
ls -l ~/.codex/skills/tirtc-esp32-builder/SKILL.md
|
|
704
|
+
```
|
|
705
|
+
|
|
706
|
+
设置过 `CODEX_HOME` 或 `--skills-dir` 时,要检查对应目录。不要同时把 Skill 安装到多个位置。
|
|
707
|
+
|
|
708
|
+
### 已有 Skill,安装器拒绝覆盖
|
|
709
|
+
|
|
710
|
+
安装器检测到本地已有 Skill,因此没有直接覆盖。确认可以替换后执行:
|
|
711
|
+
|
|
712
|
+
```bash
|
|
713
|
+
npx --yes tirtc-device-builder@latest setup esp32 --install --force-skill
|
|
714
|
+
```
|
|
715
|
+
|
|
716
|
+
如果只使用 `install esp32` 子命令,对应选项是 `--force`。
|
|
717
|
+
|
|
718
|
+
### Device Kit 下载失败
|
|
719
|
+
|
|
720
|
+
确认能访问 npm 和 GitHub Release。受限网络中,可以在另一台机器下载公开 Release 附件,再传到开发机:
|
|
721
|
+
|
|
722
|
+
```bash
|
|
723
|
+
npx --yes tirtc-device-builder@latest setup esp32 --install \
|
|
724
|
+
--kit-archive /absolute/path/tirtc-esp32s3-kit-1.0.0.tar.gz
|
|
725
|
+
```
|
|
726
|
+
|
|
727
|
+
安装器会校验 SHA-256 和内部文件清单。如果校验不一致,请重新获取官方 Release 附件,不要跳过校验。
|
|
728
|
+
|
|
729
|
+
### 提示 `refusing to overwrite incomplete directory`
|
|
730
|
+
|
|
731
|
+
目标路径已经存在,但不是完整的 Device Kit 或 ESP-IDF。安装器不会删除或覆盖该目录。请先检查并备份,再改用新的 `--root` 或 `--idf-dir` 路径。
|
|
732
|
+
|
|
733
|
+
### Doctor 报 `no sdkconfig or sdkconfig.defaults`
|
|
734
|
+
|
|
735
|
+
典型输出是:
|
|
736
|
+
|
|
737
|
+
```text
|
|
738
|
+
FAIL TiRTC build contract [required]: no sdkconfig or sdkconfig.defaults in ...
|
|
739
|
+
```
|
|
740
|
+
|
|
741
|
+
`--project` 指向的目录还不是已生成的 ESP-IDF 工程,或者路径写错了。生成前不要传 `--project`;生成后确认工程中存在 `sdkconfig.defaults`,再运行项目级 Doctor。
|
|
742
|
+
|
|
743
|
+
### `WARN serial discovery: no serial device detected`
|
|
744
|
+
|
|
745
|
+
没有连接开发板时,这是正常警告,不影响生成和编译。烧录前必须让串口检查变成 `PASS`。
|
|
746
|
+
|
|
747
|
+
设备已连接但没有权限时,按操作系统规范把当前用户加入串口用户组并重新登录。Ubuntu 常见用户组是 `dialout`。不要长期把串口权限放宽给所有用户。
|
|
748
|
+
|
|
749
|
+
WSL 默认不一定能看到 USB 设备。按 [Microsoft WSL USB 连接说明](https://learn.microsoft.com/windows/wsl/connect-usb) 将设备附加到当前 WSL 实例,再运行 Doctor。
|
|
750
|
+
|
|
751
|
+
### Hardware IR 一直是 `NEEDS_CONFIRMATION`
|
|
752
|
+
|
|
753
|
+
先查看各个未知项要求什么来源。常见缺口包括准确的 PCB 版本、摄像头数据格式、所选视频 profile 的完整输出路径、Codec 时钟、功放使能脚、配网方法和可工作的厂商示例。不要从相似开发板复制管脚来填补这些信息。
|
|
754
|
+
|
|
755
|
+
### 工程能编译,浏览器没有画面
|
|
756
|
+
|
|
757
|
+
先确认摄像头输出是否真正进入选定的视频路径。MJPEG 要逐次提交完整 JPEG;H.264/H.265 要符合合同规定的 Annex-B、参数集和刷新帧行为。同时检查持续发送计数、丢帧和队列水位。Sensor 能输出 JPEG、RGB 或裸 YUV,不等于 H5 视频链路已经打通。
|
|
758
|
+
|
|
759
|
+
### 工程能编译,但 H5 或 AI 没有声音
|
|
760
|
+
|
|
761
|
+
分别检查上行和下行,不要把它们当成同一条链路:
|
|
762
|
+
|
|
763
|
+
- 上行:麦克风、采样率、声道、G.711 A-law 编码、发送时机;
|
|
764
|
+
- 下行:stream 14、队列边界、A-law 解码、I2S/Codec、功放使能、扬声器;
|
|
765
|
+
- AI:`start_session` 成功后才发送音频,停止时清理旧 generation 数据;
|
|
766
|
+
- 全双工:没有 AEC 和硬件证据时先验证半双工。
|
|
767
|
+
|
|
768
|
+
### 原生 Windows 无法自动安装 ESP-IDF
|
|
769
|
+
|
|
770
|
+
自动安装当前支持 Linux、WSL 和 macOS。原生 Windows 请使用 Espressif 官方安装器准备 ESP-IDF 5.5.x 和 ESP32-S3 工具链,再运行:
|
|
771
|
+
|
|
772
|
+
```powershell
|
|
773
|
+
npx --yes tirtc-device-builder@latest setup esp32
|
|
774
|
+
```
|
|
775
|
+
|
|
776
|
+
也可以在 WSL 中完成整个流程,但烧录前要先把 USB 设备连接到 WSL。
|
|
777
|
+
|
|
778
|
+
## 使用边界
|
|
779
|
+
|
|
780
|
+
### 必须克隆 `tirtc-server-example` 吗?
|
|
781
|
+
|
|
782
|
+
不需要。普通开发所需的生成器、模板、协议文档、TiRTC 头文件和 `libTiRTC.a` 都在版本化的 ESP32 Device Kit 中。一键安装会下载公开 Release,并把路径写进 `env.sh`。
|
|
783
|
+
|
|
784
|
+
`--thing-connect-root` 主要用于维护模板、协议或 Device Kit 的开发者复用完整源码工作区。
|
|
785
|
+
|
|
786
|
+
### 为什么推荐 `npx`,不是安装一个 npm 包就结束?
|
|
787
|
+
|
|
788
|
+
`npx` 适合运行低频的安装和诊断命令,也可以明确选择 `@latest`。全局 `npm install` 同样可用,但只负责安装 CLI。
|
|
789
|
+
|
|
790
|
+
Skill、Device Kit 和 ESP-IDF 会写到 npm 包目录之外,也可能占用较多磁盘和下载时间,因此统一由显式命令 `setup esp32 --install` 安装。开发者可以提前看到安装计划和目标目录;以后卸载或升级 CLI,也不会误删开发环境。
|
|
791
|
+
|
|
792
|
+
### 只给开发板型号能不能自动完成全部代码?
|
|
793
|
+
|
|
794
|
+
可以先分析,但不能保证直接完成硬件移植。型号足以定位候选资料;GPIO、器件版本、所选视频 profile、音频时钟和配网能力仍需可信来源。资料不足时,Skill 会给出最小补充清单,不会拿相似板型的数据填空。
|
|
795
|
+
|
|
796
|
+
### 能接入已有 ESP-IDF 工程吗?
|
|
797
|
+
|
|
798
|
+
可以。把现有工程路径、目标芯片、ESP-IDF 版本、BSP 和已验证的外设示例交给 Skill。它会先检查组件、配置、SDK 构建合同和媒体接入边界,再决定复用哪些板级代码。
|
|
799
|
+
|
|
800
|
+
### 生成的工程可以移走吗?
|
|
801
|
+
|
|
802
|
+
可以。TiRTC SDK 会复制到工程的 `third_party/tirtc/`。移动后仍需在新机器上激活兼容的 ESP-IDF 5.5.x,并重新运行项目级 Doctor 和构建。
|
|
803
|
+
|
|
804
|
+
### 能支持 ESP32 之外的芯片吗?
|
|
805
|
+
|
|
806
|
+
仓库允许每个平台使用独立 Skill,但当前公开版本只实现 ESP32-S3。泰芯或其他平台需要新增 `skills/<platform-skill>/`,并分别维护 SDK、工具链、板级 adapter 和验收约束。
|
|
807
|
+
|
|
808
|
+
## 给仓库维护者
|
|
809
|
+
|
|
810
|
+
以下命令只供仓库维护者使用。
|
|
811
|
+
|
|
812
|
+
### 本地验证
|
|
569
813
|
|
|
570
814
|
```bash
|
|
571
815
|
npm ci --ignore-scripts
|
|
@@ -573,10 +817,9 @@ npm test
|
|
|
573
817
|
npm pack --dry-run
|
|
574
818
|
```
|
|
575
819
|
|
|
576
|
-
`npm pack --dry-run`
|
|
577
|
-
SDK 二进制、凭证、板卡私有资料、构建产物或用户媒体。
|
|
820
|
+
`npm pack --dry-run` 用于核对公开 tarball。包内不应出现 Device Kit 二进制、设备凭证、板卡私有资料、构建产物或用户媒体。
|
|
578
821
|
|
|
579
|
-
|
|
822
|
+
本机安装了 Codex 系统校验器时,还可以运行:
|
|
580
823
|
|
|
581
824
|
```bash
|
|
582
825
|
python3 ~/.codex/skills/.system/skill-creator/scripts/quick_validate.py \
|
|
@@ -585,20 +828,72 @@ python3 ~/.codex/skills/.system/skill-creator/scripts/quick_validate.py \
|
|
|
585
828
|
python3 ~/.codex/skills/.system/plugin-creator/scripts/validate_plugin.py .
|
|
586
829
|
```
|
|
587
830
|
|
|
588
|
-
|
|
831
|
+
### 打包 ESP32 Device Kit
|
|
832
|
+
|
|
833
|
+
```bash
|
|
834
|
+
npm run pack:esp32-kit -- \
|
|
835
|
+
--source /absolute/path/tirtc-server-example/thing-connect \
|
|
836
|
+
--kit-version 1.0.0
|
|
837
|
+
```
|
|
838
|
+
|
|
839
|
+
输出位于 `dist/`:
|
|
840
|
+
|
|
841
|
+
```text
|
|
842
|
+
tirtc-esp32s3-kit-1.0.0.tar.gz
|
|
843
|
+
tirtc-esp32s3-kit-1.0.0.tar.gz.sha256
|
|
844
|
+
```
|
|
845
|
+
|
|
846
|
+
校验后使用独立的 `kit-esp32s3-v<version>` 标签发布 GitHub Release:
|
|
847
|
+
|
|
848
|
+
```bash
|
|
849
|
+
gh --version
|
|
850
|
+
gh release --help
|
|
851
|
+
|
|
852
|
+
cd dist
|
|
853
|
+
sha256sum -c tirtc-esp32s3-kit-1.0.0.tar.gz.sha256
|
|
854
|
+
cd ..
|
|
855
|
+
|
|
856
|
+
git tag -a kit-esp32s3-v1.0.0 -m "TiRTC ESP32-S3 Device Kit 1.0.0"
|
|
857
|
+
git push origin kit-esp32s3-v1.0.0
|
|
858
|
+
|
|
859
|
+
gh release create kit-esp32s3-v1.0.0 \
|
|
860
|
+
dist/tirtc-esp32s3-kit-1.0.0.tar.gz \
|
|
861
|
+
dist/tirtc-esp32s3-kit-1.0.0.tar.gz.sha256 \
|
|
862
|
+
--repo tangeai/tirtc-device-builder \
|
|
863
|
+
--verify-tag \
|
|
864
|
+
--latest=false \
|
|
865
|
+
--title "TiRTC ESP32-S3 Device Kit 1.0.0" \
|
|
866
|
+
--notes "ESP-IDF 5.5.x;TiRTC SDK 2.3.0;包含 H5/AI 工程生成资源。"
|
|
867
|
+
```
|
|
868
|
+
|
|
869
|
+
`gh release --help` 如果提示 `No such command 'release'`,当前系统安装的不是 GitHub 官方 CLI。先按 [GitHub CLI 官方安装说明](https://github.com/cli/cli/blob/trunk/docs/install_linux.md) 安装或替换,再登录并发布 Release。
|
|
870
|
+
|
|
871
|
+
### 发布 npm
|
|
872
|
+
|
|
873
|
+
`package.json` 版本与 Git 标签必须一致。推送 `v<package-version>` 标签后,`.github/workflows/publish.yml` 通过 npm Trusted Publishing 发布:
|
|
874
|
+
|
|
875
|
+
```bash
|
|
876
|
+
npm test
|
|
877
|
+
git tag -a v0.4.0 -m "v0.4.0"
|
|
878
|
+
git push origin v0.4.0
|
|
879
|
+
```
|
|
880
|
+
|
|
881
|
+
不要重复发布已经存在的 npm 版本。版本变化同步更新 `package.json`、`.codex-plugin/plugin.json` 和发布说明。
|
|
882
|
+
|
|
883
|
+
### 增加新平台
|
|
589
884
|
|
|
590
|
-
|
|
885
|
+
每个平台放在独立的 `skills/<platform-skill>/` 目录,并写清楚:
|
|
591
886
|
|
|
592
|
-
-
|
|
593
|
-
-
|
|
594
|
-
-
|
|
595
|
-
-
|
|
596
|
-
-
|
|
887
|
+
- 芯片、SDK、工具链和不适用范围;
|
|
888
|
+
- Hardware IR 需要的事实和来源;
|
|
889
|
+
- 板级媒体 adapter 与公共会话逻辑的边界;
|
|
890
|
+
- 编译、启动、上线、媒体、业务和稳定性验收;
|
|
891
|
+
- 下载、工具链安装、串口烧录和凭证写入的授权边界。
|
|
597
892
|
|
|
598
|
-
|
|
893
|
+
等两个以上平台出现相同且稳定的约束后,再提取共享逻辑,避免公共层只做参数转发。
|
|
599
894
|
|
|
600
895
|
## 安全与许可证
|
|
601
896
|
|
|
602
|
-
不要在 Issue、日志或报告中提交设备密钥、Wi-Fi 密码、MQTT/WHIP token
|
|
897
|
+
不要在 Issue、日志或报告中提交设备密钥、Wi-Fi 密码、MQTT/WHIP token、证书、生产配置或用户音视频。安全问题按 [SECURITY.md](SECURITY.md) 私下报告。
|
|
603
898
|
|
|
604
|
-
本仓库源码使用 MIT License
|
|
899
|
+
本仓库源码使用 [MIT License](LICENSE)。ThingConnect、TiRTC SDK、ESP-IDF、厂商 BSP、芯片资料和其他第三方内容使用各自的许可证,本仓库许可证不会替代它们。版本差异见 [CHANGELOG.md](CHANGELOG.md)。
|