tirtc-device-builder 0.2.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 +36 -0
- package/CHANGELOG.md +19 -0
- package/LICENSE +21 -0
- package/NOTICE +7 -0
- package/README.md +604 -0
- package/SECURITY.md +15 -0
- package/bin/tirtc-device-builder.js +214 -0
- package/package.json +56 -0
- package/skills/tirtc-esp32-builder/SKILL.md +34 -0
- package/skills/tirtc-esp32-builder/USAGE.md +94 -0
- package/skills/tirtc-esp32-builder/agents/openai.yaml +4 -0
- package/skills/tirtc-esp32-builder/assets/hardware-ir.example.json +78 -0
- package/skills/tirtc-esp32-builder/assets/report-template.md +55 -0
- package/skills/tirtc-esp32-builder/references/capability-rules.md +32 -0
- package/skills/tirtc-esp32-builder/references/environment.md +54 -0
- package/skills/tirtc-esp32-builder/references/hardware-ir.md +49 -0
- package/skills/tirtc-esp32-builder/references/reporting.md +23 -0
- package/skills/tirtc-esp32-builder/references/workflow.md +70 -0
- package/skills/tirtc-esp32-builder/scripts/doctor.py +441 -0
- package/skills/tirtc-esp32-builder/scripts/hardware_ir.py +425 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tirtc-device-builder",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Codex workflows for building and validating TiRTC device firmware across supported chip platforms.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "TangeAI",
|
|
7
|
+
"url": "https://github.com/tangeai"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/tangeai/tirtc-device-builder",
|
|
10
|
+
"repository": "https://github.com/tangeai/tirtc-device-builder",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"tirtc",
|
|
14
|
+
"esp32",
|
|
15
|
+
"esp-idf",
|
|
16
|
+
"embedded",
|
|
17
|
+
"ai-intercom"
|
|
18
|
+
],
|
|
19
|
+
"skills": "./skills/",
|
|
20
|
+
"interface": {
|
|
21
|
+
"displayName": "TiRTC Device Builder",
|
|
22
|
+
"shortDescription": "Build and validate TiRTC device firmware.",
|
|
23
|
+
"longDescription": "Turn board models, schematics, BSPs, and peripheral examples into evidence-backed TiRTC device projects with environment checks, build, flash, and verification reports.",
|
|
24
|
+
"developerName": "TangeAI",
|
|
25
|
+
"category": "Productivity",
|
|
26
|
+
"capabilities": [
|
|
27
|
+
"Interactive",
|
|
28
|
+
"Write"
|
|
29
|
+
],
|
|
30
|
+
"defaultPrompt": [
|
|
31
|
+
"Analyze my ESP32 board and generate a TiRTC project.",
|
|
32
|
+
"Check ESP-IDF and build my TiRTC ESP32 firmware.",
|
|
33
|
+
"Assess whether this board can support H5 live view and AI intercom."
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
}
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
This project follows Semantic Versioning.
|
|
4
|
+
|
|
5
|
+
## 0.2.0
|
|
6
|
+
|
|
7
|
+
- Publish the repository as the `tirtc-device-builder` npm package.
|
|
8
|
+
- Add an explicit `npx tirtc-device-builder install esp32` flow without lifecycle installation scripts.
|
|
9
|
+
- Preserve existing Skill installations unless the caller supplies `--force`.
|
|
10
|
+
- Run the packaged ESP32 environment doctor through the npm CLI.
|
|
11
|
+
- Validate npm/plugin version alignment and the public tarball in CI.
|
|
12
|
+
- Support npm trusted publishing from version tags after the initial manual release.
|
|
13
|
+
|
|
14
|
+
## 0.1.0
|
|
15
|
+
|
|
16
|
+
- Package the ESP32 workflow as `tirtc-esp32-builder`.
|
|
17
|
+
- Diagnose ESP-IDF 5.5.x, target tools, ThingConnect workspace, TiRTC SDK contract, project configuration, and serial access.
|
|
18
|
+
- Validate Hardware IR evidence and assess H5 live-view, talkback, and AI-intercom readiness.
|
|
19
|
+
- Provide a skills-only Plugin manifest, public installation guide, package validation, and CI.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 探鸽智能
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/NOTICE
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
TiRTC Device Builder
|
|
2
|
+
Copyright 2026 探鸽智能 (TangeAI)
|
|
3
|
+
|
|
4
|
+
This distribution contains Codex workflow instructions and helper scripts only.
|
|
5
|
+
It does not include the TiRTC SDK, ESP-IDF, ThingConnect source tree, vendor
|
|
6
|
+
BSPs, board documentation, credentials, or media captured from users or
|
|
7
|
+
devices. Those dependencies remain subject to their own licenses and terms.
|
package/README.md
ADDED
|
@@ -0,0 +1,604 @@
|
|
|
1
|
+
# TiRTC Device Builder
|
|
2
|
+
|
|
3
|
+
TiRTC Device Builder 是一个面向设备开发者的 Codex Plugin 仓库。它把不同芯片平台的开发流程拆成独立 Skill,根据开发板型号、原理图、BSP、引脚表和外设示例生成、移植、编译和验证 TiRTC 设备工程。
|
|
4
|
+
|
|
5
|
+
仓库当前包含:
|
|
6
|
+
|
|
7
|
+
| Skill | 平台 | 能力 |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| `tirtc-esp32-builder` | ESP32-S3 / ESP-IDF 5.5.x | 环境诊断、Hardware IR、H5 实时查看/对讲、AI 对讲工程生成、编译、烧录和分层验收 |
|
|
10
|
+
|
|
11
|
+
后续平台以新的同级 Skill 加入,例如 `skills/tirtc-taixin-builder/`。每个平台独立维护 SDK、构建工具、板级适配和验收约束。
|
|
12
|
+
|
|
13
|
+
## 能力边界
|
|
14
|
+
|
|
15
|
+
ESP32 Skill 使用公开的 [ThingConnect 示例仓库](https://github.com/tangeai/tirtc-server-example) 作为协议、模板、生成器和 TiRTC ESP32 SDK 的事实源。这个仓库不复制服务端源码、预编译 TiRTC SDK、设备凭证或媒体样本。
|
|
16
|
+
|
|
17
|
+
模板工程提供配网、绑定、MQTT、TiRTC、H5 和 AI 会话骨架。具体开发板仍需接入摄像头、H.264 编码器、麦克风、扬声器、Codec、I2S 和按键。工程编译成功不等于 Web 已经出图或 AI 对讲已通过实机验收。
|
|
18
|
+
|
|
19
|
+
## 新人从零开始:一次跑通 ESP32-S3 H5/AI
|
|
20
|
+
|
|
21
|
+
推荐先跑通“安装 → 环境 → 板卡分析 → 生成 → 编译”,确认报告无误后再单独授权烧录和实机验收。整个过程使用同一份板卡事实,避免在代码生成阶段猜测引脚、器件或媒体能力。
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
板卡型号/原理图/BSP
|
|
25
|
+
↓
|
|
26
|
+
Hardware IR(硬件事实与来源)
|
|
27
|
+
↓
|
|
28
|
+
能力门禁(READY_TO_PORT 才进入实现)
|
|
29
|
+
↓
|
|
30
|
+
独立 ESP-IDF 工程 + 板级媒体适配
|
|
31
|
+
↓
|
|
32
|
+
编译 → 授权烧录 → 配网绑定 → H5/AI 验收
|
|
33
|
+
↓
|
|
34
|
+
TIRTC_PORTING_REPORT.md
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 第 0 步:确认当前支持范围
|
|
38
|
+
|
|
39
|
+
当前可直接生成的基线是:
|
|
40
|
+
|
|
41
|
+
| 项目 | 当前基线 |
|
|
42
|
+
|---|---|
|
|
43
|
+
| 芯片 | ESP32-S3 |
|
|
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
|
+
| 烧录 | 必须明确给出串口并授权 |
|
|
50
|
+
|
|
51
|
+
“板上有摄像头”不等于可以输出 H5 视频。H5 视频还需要可用的 H.264 Annex-B 编码输出、SPS/PPS、IDR 和关键帧请求控制;对讲还需要完整的麦克风采集、G.711 A-law 8 kHz 编码、下行解码、I2S/Codec/功放和扬声器路径。
|
|
52
|
+
|
|
53
|
+
当前生成器只支持 ESP32-S3,TiRTC SDK 也必须匹配 `espressif-esp32s3` 平台。Flash/PSRAM 不是 16 MB/8 MB 时,需要先调整 `sdkconfig.defaults`、分区表和板级资源预算并重新评估;Skill 不会把相似型号静默当作当前板卡。
|
|
54
|
+
|
|
55
|
+
### 第 1 步:固定工作路径
|
|
56
|
+
|
|
57
|
+
下面的命令以 Linux、Ubuntu 或 WSL 的 Bash 为例。先把所有路径改成自己的绝对路径;路径可以不同,但后续必须始终使用同一组值。
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
export TIRTC_WORKSPACE=/home/your-user/workspace
|
|
61
|
+
export TIRTC_THING_CONNECT_ROOT="$TIRTC_WORKSPACE/tirtc-server-example/thing-connect"
|
|
62
|
+
export TIRTC_BOARD_DOCS="$TIRTC_WORKSPACE/board-materials"
|
|
63
|
+
export TIRTC_PROJECT_DIR="$TIRTC_WORKSPACE/my-esp32-device"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
逐项确认:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
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
|
+
```
|
|
74
|
+
|
|
75
|
+
注意:
|
|
76
|
+
|
|
77
|
+
- `TIRTC_PROJECT_DIR` 是待生成的新目录,生成前不能已经存在;生成器不会覆盖旧工程。
|
|
78
|
+
- 板卡资料和输出工程使用不同目录。
|
|
79
|
+
- 不要把 Wi-Fi 密码、设备密钥、MQTT/WHIP token 或真实用户音视频放入板卡资料目录和 Git 仓库。
|
|
80
|
+
- 新开终端后需要重新设置这些变量,除非开发者自行把它们加入 shell 配置。
|
|
81
|
+
|
|
82
|
+
### 第 2 步:准备板卡资料包
|
|
83
|
+
|
|
84
|
+
创建资料目录,把原始资料按来源保存,不要先手工改写原理图或 BSP:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
mkdir -p "$TIRTC_BOARD_DOCS"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
最有利于一次完成的资料如下:
|
|
91
|
+
|
|
92
|
+
| 优先级 | 资料 | 需要明确的内容 |
|
|
93
|
+
|---|---|---|
|
|
94
|
+
| 必需 | 板卡身份 | 厂商、完整型号、模组型号、PCB 丝印和硬件版本 |
|
|
95
|
+
| 必需 | 原理图或网表 | 摄像头、麦克风、Codec、功放、I2S、I2C、SPI、时钟、复位、电源使能和 GPIO |
|
|
96
|
+
| 必需 | BSP 或厂商示例 | 可复现的 Git commit/tag、ESP-IDF 版本、能工作的外设初始化与管脚定义 |
|
|
97
|
+
| 视频必需 | 摄像头/编码资料 | Sensor 型号、输入接口、H.264 编码位置、Annex-B 输出、SPS/PPS、IDR 控制 |
|
|
98
|
+
| 对讲必需 | 音频资料 | 麦克风类型、Codec/ADC/DAC、采样率、位宽、声道、MCLK/BCLK/LRCK、功放使能 |
|
|
99
|
+
| 推荐 | 器件数据手册 | Sensor、Codec、功放、时钟和电源芯片的准确型号与版本 |
|
|
100
|
+
| 推荐 | 最小实测工程 | 已在该 PCB 版本运行的摄像头、录音、播放或编码示例及其构建命令 |
|
|
101
|
+
|
|
102
|
+
资料不完整也可以先调用 Skill。它会把未知事实写成 `null`,并列出进入下一步所需的最小补充项。不同 PCB 版本按不同板卡处理;不能只给“ESP32-S3”而省略载板型号和版本。
|
|
103
|
+
|
|
104
|
+
### 第 3 步:安装 Node.js 和 Skill
|
|
105
|
+
|
|
106
|
+
使用 npm 安装 Skill 只需要 Node.js 18 或更高版本。普通使用者不需要执行 `npm login`;登录只用于维护者发布 npm 包。
|
|
107
|
+
|
|
108
|
+
先检查版本和 npm 官方源:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
node --version
|
|
112
|
+
npm --version
|
|
113
|
+
npm config get registry
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
预期:
|
|
117
|
+
|
|
118
|
+
- Node.js 输出 `v18.x` 或更高版本;
|
|
119
|
+
- npm registry 输出 `https://registry.npmjs.org/`。
|
|
120
|
+
|
|
121
|
+
如果 `node` 或 `npm` 不存在,先从 [Node.js 官方下载页](https://nodejs.org/en/download) 安装受支持版本,重新打开终端,再重复版本检查。
|
|
122
|
+
|
|
123
|
+
如果 registry 不是官方源,可为当前用户切换:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
npm config set registry https://registry.npmjs.org/
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
确认 npm 包可访问并安装当前稳定版本:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
npm view tirtc-device-builder version
|
|
133
|
+
npx tirtc-device-builder@0.2.0 list
|
|
134
|
+
npx tirtc-device-builder@0.2.0 install esp32
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
成功时最后会看到类似输出:
|
|
138
|
+
|
|
139
|
+
```text
|
|
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
|
+
```
|
|
143
|
+
|
|
144
|
+
默认安装位置是 `${CODEX_HOME:-~/.codex}/skills/tirtc-esp32-builder`。安装完成后关闭当前 Codex 会话并启动一个新会话,让 Codex 重新发现 Skill。
|
|
145
|
+
|
|
146
|
+
如果目标目录已经存在,安装器会保护已有内容并退出。先确认目录中的本地修改是否需要保留;只有确定要替换时才执行:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
npx tirtc-device-builder@0.2.0 install esp32 --force
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
自定义 Skill 根目录时使用绝对路径:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
npx tirtc-device-builder@0.2.0 install esp32 \
|
|
156
|
+
--skills-dir /absolute/path/to/skills
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
如果 npm 包尚未发布或当前网络无法访问 npm,可从 GitHub 安装固定版本。在 Codex 对话中输入:
|
|
160
|
+
|
|
161
|
+
```text
|
|
162
|
+
$skill-installer
|
|
163
|
+
|
|
164
|
+
安装:
|
|
165
|
+
https://github.com/tangeai/tirtc-device-builder/tree/v0.2.0/skills/tirtc-esp32-builder
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Linux/macOS 也可以执行:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
python3 ~/.codex/skills/.system/skill-installer/scripts/install-skill-from-github.py \
|
|
172
|
+
--repo tangeai/tirtc-device-builder \
|
|
173
|
+
--ref v0.2.0 \
|
|
174
|
+
--path skills/tirtc-esp32-builder
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
仓库根目录还包含 `.codex-plugin/plugin.json`,可作为 skills-only Plugin 使用。直接从 npm 或 GitHub 安装不依赖 Plugin Directory 审核。
|
|
178
|
+
|
|
179
|
+
### 第 4 步:准备 ThingConnect 工作区
|
|
180
|
+
|
|
181
|
+
当前 Skill 不复制 ThingConnect 服务端源码和 TiRTC 预编译库。生成新工程时,以下内容来自公开的 ThingConnect 仓库:
|
|
182
|
+
|
|
183
|
+
- ESP32-S3 H5/AI 工程生成器;
|
|
184
|
+
- 起步模板和平台公共组件;
|
|
185
|
+
- TiRTC ESP32-S3 SDK 头文件、静态库和构建契约;
|
|
186
|
+
- H5、AI、设备接入和会话协议文档。
|
|
187
|
+
|
|
188
|
+
只需准备一次,后续多个工程可以共用同一工作区:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
mkdir -p "$TIRTC_WORKSPACE"
|
|
192
|
+
git clone https://github.com/tangeai/tirtc-server-example.git \
|
|
193
|
+
"$TIRTC_WORKSPACE/tirtc-server-example"
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
验证关键文件:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
ls -l "$TIRTC_THING_CONNECT_ROOT/device-sim/scripts/create_esp32_project.py"
|
|
200
|
+
ls -l "$TIRTC_THING_CONNECT_ROOT/device-sim/sdk/espressif-esp32s3/2.3.0/include/tirtc/tiRTC.h"
|
|
201
|
+
ls -l "$TIRTC_THING_CONNECT_ROOT/device-sim/sdk/espressif-esp32s3/2.3.0/lib/libTiRTC.a"
|
|
202
|
+
ls -l "$TIRTC_THING_CONNECT_ROOT/device-sim/sdk/espressif-esp32s3/2.3.0/manifest/build-contract.env"
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
四条命令都应显示真实文件。记录当前源码版本,便于报告和复现:
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
git -C "$TIRTC_WORKSPACE/tirtc-server-example" rev-parse HEAD
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
生成器会把必要模块和 TiRTC SDK 复制到新工程的 `third_party/tirtc/`,所以已生成的工程可以移动并独立编译。安装 Skill、列出平台、分析本地板卡资料,以及诊断一个已经自带 SDK 的生成工程,不要求每次重新拉取 ThingConnect。
|
|
212
|
+
|
|
213
|
+
### 第 5 步:检查或安装 ESP-IDF 5.5.x
|
|
214
|
+
|
|
215
|
+
先检查当前终端,不要因为环境未激活而重复安装:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
command -v idf.py
|
|
219
|
+
idf.py --version
|
|
220
|
+
command -v xtensa-esp32s3-elf-gcc
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
如果 `idf.py --version` 输出 `ESP-IDF v5.5.x`,并且能找到 `xtensa-esp32s3-elf-gcc`,直接进入第 6 步。
|
|
224
|
+
|
|
225
|
+
如果 ESP-IDF 已安装但当前终端找不到 `idf.py`,执行该安装目录自带的 `export.sh`。例如:
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
source /absolute/path/to/esp-idf/export.sh
|
|
229
|
+
idf.py --version
|
|
230
|
+
command -v xtensa-esp32s3-elf-gcc
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
每个新终端都需要重新执行 `source .../export.sh`。Skill 的环境检查不会自动修改 `.bashrc`、`.zshrc` 等持久 shell 配置。
|
|
234
|
+
|
|
235
|
+
在 Ubuntu/Debian/WSL 中首次安装时,以下命令安装当前基线 `v5.5.4`。下载、系统包安装和磁盘写入应由开发者在确认目录后执行:
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
sudo apt-get update
|
|
239
|
+
sudo apt-get install -y git wget flex bison gperf python3 python3-pip \
|
|
240
|
+
python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util \
|
|
241
|
+
libusb-1.0-0
|
|
242
|
+
|
|
243
|
+
mkdir -p "$TIRTC_WORKSPACE/toolchains"
|
|
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"
|
|
247
|
+
|
|
248
|
+
"$TIRTC_WORKSPACE/toolchains/esp-idf-v5.5.4/install.sh" esp32s3
|
|
249
|
+
source "$TIRTC_WORKSPACE/toolchains/esp-idf-v5.5.4/export.sh"
|
|
250
|
+
|
|
251
|
+
idf.py --version
|
|
252
|
+
command -v xtensa-esp32s3-elf-gcc
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
最后两条命令必须分别显示 ESP-IDF 5.5.x 和 ESP32-S3 编译器路径。macOS、原生 Windows 或依赖版本有变化时,以 [Espressif ESP-IDF 5.5.4 Get Started](https://docs.espressif.com/projects/esp-idf/en/v5.5.4/esp32s3/get-started/index.html) 为准。
|
|
256
|
+
|
|
257
|
+
### 第 6 步:生成工程前运行 Doctor
|
|
258
|
+
|
|
259
|
+
不安装 Skill 也可以通过 npm CLI 调用同一个检查脚本:
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
npx tirtc-device-builder@0.2.0 doctor esp32 \
|
|
263
|
+
--expected-idf 5.5 \
|
|
264
|
+
--target esp32s3 \
|
|
265
|
+
--thing-connect-root "$TIRTC_THING_CONNECT_ROOT" \
|
|
266
|
+
--require-workspace
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
已经安装 Skill 时也可以直接执行:
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
python3 ~/.codex/skills/tirtc-esp32-builder/scripts/doctor.py \
|
|
273
|
+
--expected-idf 5.5 \
|
|
274
|
+
--target esp32s3 \
|
|
275
|
+
--thing-connect-root "$TIRTC_THING_CONNECT_ROOT" \
|
|
276
|
+
--require-workspace
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
生成前的合格结果应满足:
|
|
280
|
+
|
|
281
|
+
| 检查项 | 期望 |
|
|
282
|
+
|---|---|
|
|
283
|
+
| Python、Git | `PASS` |
|
|
284
|
+
| `idf.py` | `PASS`,版本为 5.5.x |
|
|
285
|
+
| target compiler | `PASS`,找到 ESP32-S3 编译器 |
|
|
286
|
+
| ThingConnect workspace | `PASS` |
|
|
287
|
+
| TiRTC SDK | `PASS` |
|
|
288
|
+
| serial discovery | 还未接板时允许 `WARN` |
|
|
289
|
+
| OVERALL | `PASS` |
|
|
290
|
+
|
|
291
|
+
`doctor.py` 是只读检查:不安装软件、不修改 shell 配置、不生成工程,也不烧录设备。
|
|
292
|
+
|
|
293
|
+
常见检查失败:
|
|
294
|
+
|
|
295
|
+
- `idf.py not found`:当前终端没有激活 ESP-IDF,先执行 `source <idf-dir>/export.sh`。
|
|
296
|
+
- `target compiler ... not found`:ESP-IDF 环境未激活,或安装时没有包含 `esp32s3`。
|
|
297
|
+
- `ThingConnect workspace ... not found`:传入的路径必须是仓库根目录或其 `thing-connect/` 子目录,并且其中存在生成器。
|
|
298
|
+
- `TiRTC SDK ... missing`:检查仓库是否拉取完整,以及 SDK 的头文件、静态库和 `manifest/build-contract.env` 是否存在。
|
|
299
|
+
- `serial discovery: no serial device detected`:生成和编译阶段可以继续;烧录前必须解决。
|
|
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、能力结论和最小缺失项;本轮不生成工程、不烧录。
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
Skill 会选择以下三条分支之一:
|
|
359
|
+
|
|
360
|
+
- 已支持板卡:校验已有 Hardware IR 和 adapter 后重新生成、编译和验收;
|
|
361
|
+
- 新板卡:逐份提取原理图/BSP/数据手册事实,建立 Hardware IR,再决定是否实现;
|
|
362
|
+
- 已有 ESP-IDF 工程:先检查目标、配置、组件、驱动和最小外设示例,再隔离可复用板级代码。
|
|
363
|
+
|
|
364
|
+
### 第 8 步:检查 Hardware IR 和能力门禁
|
|
365
|
+
|
|
366
|
+
默认 Hardware IR 工具位于:
|
|
367
|
+
|
|
368
|
+
```bash
|
|
369
|
+
python3 ~/.codex/skills/tirtc-esp32-builder/scripts/hardware_ir.py init \
|
|
370
|
+
/absolute/path/hardware-ir.json
|
|
371
|
+
|
|
372
|
+
python3 ~/.codex/skills/tirtc-esp32-builder/scripts/hardware_ir.py validate \
|
|
373
|
+
/absolute/path/hardware-ir.json
|
|
374
|
+
|
|
375
|
+
python3 ~/.codex/skills/tirtc-esp32-builder/scripts/hardware_ir.py assess --strict \
|
|
376
|
+
/absolute/path/hardware-ir.json
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
通常由 Codex 执行这些命令,开发者只需检查结果:
|
|
380
|
+
|
|
381
|
+
| 状态 | 含义 | 下一步 |
|
|
382
|
+
|---|---|---|
|
|
383
|
+
| `NEEDS_CONFIRMATION` | 关键事实未知或只有单一来源 | 补原理图、BSP、数据手册或实测证据 |
|
|
384
|
+
| `BLOCKED` | 已确认当前硬件/SDK 不满足 | 换硬件、补编码/播放路径或取得匹配 SDK |
|
|
385
|
+
| `READY_TO_PORT` | 资料已足够,可以生成并实现板级适配 | 进入生成和编译 |
|
|
386
|
+
| `HIL_VERIFIED` | 该功能已完成端到端实机验证 | 保存证据和版本 |
|
|
387
|
+
|
|
388
|
+
`assess --strict` 返回非零不一定表示脚本坏了;当任一请求能力尚未达到 `READY_TO_PORT` 时,它会用退出码阻止过早生成。先处理输出中的具体原因。
|
|
389
|
+
|
|
390
|
+
### 第 9 步:生成、实现和编译
|
|
391
|
+
|
|
392
|
+
推荐让 Skill 自动执行。需要人工复现生成步骤时,确保 `TIRTC_PROJECT_DIR` 不存在,再运行:
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
python3 "$TIRTC_THING_CONNECT_ROOT/device-sim/scripts/create_esp32_project.py" \
|
|
396
|
+
"$TIRTC_PROJECT_DIR" \
|
|
397
|
+
--name my_esp32_device
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
`--name` 只能包含小写字母、数字和下划线。生成器拒绝覆盖已存在目录;需要重做时应先选择新的输出目录或人工备份旧工程。
|
|
401
|
+
|
|
402
|
+
进入工程,激活 ESP-IDF,再检查 SDK 构建契约。下面的 `source` 路径只适用于按第 5 步安装到示例目录的情况;已有安装应替换为其真实 `export.sh` 路径:
|
|
403
|
+
|
|
404
|
+
```bash
|
|
405
|
+
cd "$TIRTC_PROJECT_DIR"
|
|
406
|
+
source "$TIRTC_WORKSPACE/toolchains/esp-idf-v5.5.4/export.sh"
|
|
407
|
+
|
|
408
|
+
python3 ~/.codex/skills/tirtc-esp32-builder/scripts/doctor.py \
|
|
409
|
+
--expected-idf 5.5 \
|
|
410
|
+
--target esp32s3 \
|
|
411
|
+
--project "$TIRTC_PROJECT_DIR"
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
项目级 Doctor 的 `TiRTC build contract` 必须为 `PASS`。随后构建:
|
|
415
|
+
|
|
416
|
+
```bash
|
|
417
|
+
idf.py set-target esp32s3
|
|
418
|
+
idf.py build
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
构建成功只证明 L1 Build 通过。真正的板卡移植还要完成 `components/starter_media/` 中的产品适配点:
|
|
422
|
+
|
|
423
|
+
- 麦克风采集并提交 G.711 A-law、8 kHz、单声道帧;
|
|
424
|
+
- 摄像头采集并提交 H.264 Annex-B access unit;
|
|
425
|
+
- 收到关键帧请求时让编码器产生 IDR;
|
|
426
|
+
- 把下行 A-law 音频放入有界队列,解码后写入 Codec/I2S/功放;
|
|
427
|
+
- 把实体按键映射到 AI 开始/停止;
|
|
428
|
+
- 停止会话时有界停止采集/播放任务并清空旧 generation 数据。
|
|
429
|
+
|
|
430
|
+
检查仍未完成的产品适配点:
|
|
431
|
+
|
|
432
|
+
```bash
|
|
433
|
+
rg -n 'TODO\(product-' main components
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
编译产物位于 `build/`。报告至少记录 ESP-IDF、TiRTC SDK、BSP/adapter 版本,实际构建命令、返回码、固件文件和 SHA-256。
|
|
437
|
+
|
|
438
|
+
### 第 10 步:明确授权后烧录
|
|
439
|
+
|
|
440
|
+
先连接开发板并确定唯一串口。Linux 常见端口为 `/dev/ttyACM0` 或 `/dev/ttyUSB0`:
|
|
441
|
+
|
|
442
|
+
```bash
|
|
443
|
+
ls -l /dev/ttyACM* /dev/ttyUSB*
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
用实际端口运行 Doctor:
|
|
447
|
+
|
|
448
|
+
```bash
|
|
449
|
+
python3 ~/.codex/skills/tirtc-esp32-builder/scripts/doctor.py \
|
|
450
|
+
--expected-idf 5.5 \
|
|
451
|
+
--target esp32s3 \
|
|
452
|
+
--project "$TIRTC_PROJECT_DIR" \
|
|
453
|
+
--serial-port /dev/ttyACM0
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
`serial port` 必须为 `PASS`。如果设备存在但无权限,按系统规范配置串口用户组并重新登录;不要用长期放宽所有设备权限的方式绕过。
|
|
457
|
+
|
|
458
|
+
让 Skill 烧录时发起第二次、独立且明确的请求:
|
|
459
|
+
|
|
460
|
+
```text
|
|
461
|
+
$tirtc-esp32-builder
|
|
462
|
+
|
|
463
|
+
我确认目标芯片是 ESP32-S3,目标工程是 /absolute/path/my-esp32-device,
|
|
464
|
+
目标串口是 /dev/ttyACM0。授权本轮烧录该设备并打开串口监视;
|
|
465
|
+
不要擦除其他串口设备,不要在日志中输出 Wi-Fi 密码或设备密钥。
|
|
466
|
+
烧录后执行 L2 Boot 检查并更新 TIRTC_PORTING_REPORT.md。
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
也可以人工执行:
|
|
470
|
+
|
|
471
|
+
```bash
|
|
472
|
+
cd "$TIRTC_PROJECT_DIR"
|
|
473
|
+
idf.py -p /dev/ttyACM0 flash monitor
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
ESP-IDF Monitor 中使用 `Ctrl+]` 退出。多个串口同时存在时,必须根据 USB 拔插、设备标识或芯片探测结果确认目标,不能选择第一个端口直接写入。
|
|
477
|
+
|
|
478
|
+
WSL 不一定自动获得 USB 串口。Doctor 看不到端口时,先按 [Microsoft 的 WSL USB 连接说明](https://learn.microsoft.com/windows/wsl/connect-usb) 把目标设备附加到当前 WSL 实例,再重新运行串口检查。
|
|
479
|
+
|
|
480
|
+
### 第 11 步:首次配网和绑定
|
|
481
|
+
|
|
482
|
+
固件首次启动且没有 Wi-Fi 配置时:
|
|
483
|
+
|
|
484
|
+
1. 在手机或电脑连接 `TiRTC-Setup-XXXX`。
|
|
485
|
+
2. 输入默认密码 `tirtc1234`。
|
|
486
|
+
3. 打开 `http://192.168.4.1`,填写设备要连接的 Wi-Fi。
|
|
487
|
+
4. 设备重启并联网后,在串口查看绑定验证码和体验平台地址。
|
|
488
|
+
5. 登录体验平台,在设备绑定入口输入验证码。
|
|
489
|
+
6. 回到串口输入 `status`,确认 platform、MQTT、TiRTC 均已就绪,runtime 处于 `waiting`。
|
|
490
|
+
|
|
491
|
+
也可以在串口输入:
|
|
492
|
+
|
|
493
|
+
```text
|
|
494
|
+
wifi-set <ssid> <password>
|
|
495
|
+
wifi-clear
|
|
496
|
+
status
|
|
497
|
+
restart
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
`tirtc-set <device_id> <device_secret> [client_id]` 只用于受控底层联调。正常流程使用验证码绑定,真实凭证不能写入源码、脚本、报告或 Git。
|
|
501
|
+
|
|
502
|
+
### 第 12 步:按层验收 H5 和 AI
|
|
503
|
+
|
|
504
|
+
验收时不要跨级宣告成功。缺少账号、浏览器、服务、外网、板卡或仪器时,对应项记录为 `SKIP`,并写明补测条件。
|
|
505
|
+
|
|
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 | 按需求完成反复会话、弱网、资源和长稳测试 |
|
|
517
|
+
|
|
518
|
+
H5 验收:
|
|
519
|
+
|
|
520
|
+
1. 串口 `status` 显示 runtime 为 `waiting`。
|
|
521
|
+
2. 在体验平台打开该设备的实时查看入口。
|
|
522
|
+
3. 确认 H.264 视频持续显示,音频/视频发送计数持续增长。
|
|
523
|
+
4. 发起 H5 对讲,确认 stream 14 下行计数增长且实体扬声器可听。
|
|
524
|
+
5. 触发浏览器重连或关键帧请求,确认板端编码器产生新的 IDR,画面恢复。
|
|
525
|
+
|
|
526
|
+
AI 验收:
|
|
527
|
+
|
|
528
|
+
1. 确认 H5/其他会话没有占用媒体资源。
|
|
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 可以重新连接并恢复音视频。
|
|
534
|
+
|
|
535
|
+
### 第 13 步:检查最终交付物
|
|
536
|
+
|
|
537
|
+
一次完整交付至少包含:
|
|
538
|
+
|
|
539
|
+
- 生成的 ESP-IDF 工程绝对路径;
|
|
540
|
+
- `hardware-ir.json` 及每条关键事实的来源;
|
|
541
|
+
- 能力评估结果和剩余阻塞项;
|
|
542
|
+
- `build/` 中的固件产物及 SHA-256;
|
|
543
|
+
- 明确到芯片和串口的烧录记录;
|
|
544
|
+
- 脱敏后的构建、启动和验收日志;
|
|
545
|
+
- `TIRTC_PORTING_REPORT.md`;
|
|
546
|
+
- L-1 到 L7 的 `PASS`、`FAIL` 或 `SKIP` 证据。
|
|
547
|
+
|
|
548
|
+
如果只完成生成和编译,报告应明确停在 L1;不能写成“Web 已出图”或“AI 对讲已完成”。
|
|
549
|
+
|
|
550
|
+
### 一次成功检查清单
|
|
551
|
+
|
|
552
|
+
开始下一阶段前逐项确认:
|
|
553
|
+
|
|
554
|
+
- [ ] 板卡厂商、完整型号、模组、PCB 版本一致。
|
|
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` 都有原因和最小下一步。
|
|
567
|
+
|
|
568
|
+
## 开发与验证
|
|
569
|
+
|
|
570
|
+
```bash
|
|
571
|
+
npm ci --ignore-scripts
|
|
572
|
+
npm test
|
|
573
|
+
npm pack --dry-run
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
`npm pack --dry-run` 展示实际进入公开 tarball 的文件;发布前必须确认其中没有
|
|
577
|
+
SDK 二进制、凭证、板卡私有资料、构建产物或用户媒体。
|
|
578
|
+
|
|
579
|
+
本地安装了 Codex 系统校验器时,还可以运行:
|
|
580
|
+
|
|
581
|
+
```bash
|
|
582
|
+
python3 ~/.codex/skills/.system/skill-creator/scripts/quick_validate.py \
|
|
583
|
+
skills/tirtc-esp32-builder
|
|
584
|
+
|
|
585
|
+
python3 ~/.codex/skills/.system/plugin-creator/scripts/validate_plugin.py .
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
## 增加新平台
|
|
589
|
+
|
|
590
|
+
每个平台使用 `skills/<platform-skill>/` 独立目录。新 Skill 需要:
|
|
591
|
+
|
|
592
|
+
- 明确芯片、SDK、工具链和不适用范围;
|
|
593
|
+
- 使用来源可追溯的硬件事实,不从相似型号静默推断;
|
|
594
|
+
- 把平台驱动隔离在板级 adapter,不复制 H5/AI 会话状态机;
|
|
595
|
+
- 区分编译、烧录启动、设备上线、媒体链路和端到端业务验收;
|
|
596
|
+
- 对下载、工具链安装、串口烧录和凭证写入保留明确授权边界。
|
|
597
|
+
|
|
598
|
+
共享逻辑只在两个以上平台出现相同不变量后抽取,避免形成只转发参数的公共层。
|
|
599
|
+
|
|
600
|
+
## 安全与许可证
|
|
601
|
+
|
|
602
|
+
不要在 Issue、日志或报告中提交设备密钥、Wi-Fi 密码、MQTT/WHIP token、证书或用户音视频。安全问题按 [SECURITY.md](SECURITY.md) 私下报告。
|
|
603
|
+
|
|
604
|
+
本仓库源码使用 MIT License,见 [LICENSE](LICENSE)。ThingConnect、TiRTC SDK、ESP-IDF、厂商 BSP、芯片资料和其他第三方内容使用各自的许可证;本仓库许可证不会替代它们。
|