feat: 完善 N7 智能座舱交互与控制链路
This commit is contained in:
@@ -0,0 +1,424 @@
|
||||
# N7 红外学习与 NFC 外设场景设计
|
||||
|
||||
## 1. 设计边界
|
||||
|
||||
本方案严格基于当前自扩展链路:
|
||||
|
||||
```text
|
||||
外设原遥控器
|
||||
→ 红外学习器学习动作信号
|
||||
→ 动作与设备/槽位信息写入 NFC 能力卡
|
||||
→ 车端 NFC 读卡器识别设备卡或场景卡
|
||||
→ 场景结合车端实时状态和 CAN 反馈进行编排
|
||||
→ 红外控制器发射已学习信号
|
||||
→ 外设执行动作
|
||||
```
|
||||
|
||||
由此产生三个设计原则:
|
||||
|
||||
1. 外设必须真正使用红外遥控,不能把蓝牙、2.4 GHz RF、Wi-Fi 或自制传感器设备混入当前链路;
|
||||
2. 车端有权威状态反馈,可以用于条件、分支和阶段完成;红外外设通常没有状态回传,因此只能标记“红外指令已发出”,不能声称物理动作已确认;
|
||||
3. 深度联动应采用“NFC 选择/触发 → 车端设备执行并等待反馈 → 满足条件后发射外设红外动作”,而不是让多个设备无条件同时开关。
|
||||
|
||||
## 2. 红外外设准入条件
|
||||
|
||||
适合进入预设和自定义场景的外设应满足:
|
||||
|
||||
- 遥控器确认为 36~40 kHz 常见红外载波,而不是 RF、蓝牙或 2.4 GHz;
|
||||
- 每个关键能力具有固定、可重复学习的红外码,无滚动码或动态配对;
|
||||
- 优先提供独立 `ON`、`OFF`、固定颜色、固定档位和固定模式指令;
|
||||
- 只有单一 `POWER TOGGLE` 或循环切换模式的设备,不进入自动预设,只允许人工单次控制;
|
||||
- 动作在 1~3 次重复发射下稳定,长按型动作必须验证重复周期和停止指令;
|
||||
- 外设使用 5V USB 或受控 12V 低压供电,功率、温升和固定方式适合车内;
|
||||
- 红外接收窗可被控制器稳定照射,设备安装后不易遮挡或移动;
|
||||
- 外设失控不会夹伤、烫伤、影响驾驶或阻断车端安全能力;
|
||||
- 动态灯光、投影和移动玩具只能在 P 挡、零车速场景运行。
|
||||
|
||||
### 2.1 学习验收
|
||||
|
||||
每个候选外设在进入能力目录前至少验证:
|
||||
|
||||
| 项目 | 要求 |
|
||||
|---|---|
|
||||
| 协议类型 | 红外学习器能稳定识别,不是 RF/BLE |
|
||||
| 单动作复现 | 连续执行 30 次,成功率达到展项要求 |
|
||||
| 幂等性 | 重复发送固定 ON/OFF/档位不会产生相反结果 |
|
||||
| 响应时间 | 记录发射次数、间隔和设备响应延迟 |
|
||||
| 断电恢复 | 明确断电后默认状态,不能依赖未知记忆状态 |
|
||||
| 码冲突 | 同一车内其他外设不会被该动作误触发 |
|
||||
| 安装 | 接收窗与发射器保持视距,颠簸后仍然可靠 |
|
||||
|
||||
## 3. 符合车端需求的外设清单
|
||||
|
||||
## 3.1 A 级:建议作为首批展示和产品外设
|
||||
|
||||
| 外设 | 车端真实需求 | 必须具备的红外遥控能力 | 可联动车端能力 | 适用场景 |
|
||||
|---|---|---|---|---|
|
||||
| 红外 RGB/流水灯带 | 原车氛围灯亮度和动态效果不足;缺少空间状态提示 | 独立开/关、固定色、亮度、呼吸、渐变、流水、速度 | 原车氛围灯、阅读灯、车窗、遮阳帘、空调、无线充电 | 光域增强、离车检查、充电提示、影院、故事 |
|
||||
| 红外星空投影灯 | 驻车休息和儿童场景缺少顶部沉浸效果 | 独立开/关、固定颜色、旋转开/关、亮度、定时 | 遮阳帘、阅读灯、座椅、空调、氛围灯 | 星际故事、晚安、充电休憩 |
|
||||
| 红外桌面/夹持风扇 | 后排或局部送风不足;暴晒后需要快速换气 | 独立开/关、1~3 档、摇头开/关、定时 | 车窗、空调、内外循环、座椅通风、舱内温度 | 极速凉舱、露营通风、局部舒适 |
|
||||
| 红外故事机/白噪音机 | 充电等待、儿童陪伴、午休需要非屏幕声音 | 开/关、播放、暂停、音量档位、曲目/模式、睡眠模式 | 座椅、遮阳帘、阅读灯、空调 | 故事舱、晚安、冥想、阅读 |
|
||||
| 红外机器人/玩偶 | 需要有角色感和肉眼可见的互动外设 | 唤醒、挥手、说话、唱歌、跳舞、停止、休眠 | 灯光、座椅姿态、座椅动态模式、空调风量 | 星际故事、生日、迎宾、充电游戏 |
|
||||
| 红外补光灯 | 车内直播、视频会议、补妆和拍摄时原车灯位不合适 | 独立开/关、亮度档位、冷/暖/自然光、固定效果 | 遮阳帘、座椅、阅读灯、空调 | 移动摄影棚、视频会议、补妆 |
|
||||
|
||||
## 3.2 B 级:可以扩展,但需挑选具体型号
|
||||
|
||||
| 外设 | 价值 | 红外要求与问题 | 建议 |
|
||||
|---|---|---|---|
|
||||
| 红外微型投影仪 | 驻车影院、露营娱乐 | 很多型号只有电源 Toggle,启动慢,关机可能需二次确认 | 选择具备独立关机指令、自动信号源和稳定启动时间的型号 |
|
||||
| 红外空气净化器 | 停车休息、宠物和空气舒适 | 需排除臭氧/强离子模式;体积和供电需适车 | 仅作为空调辅助,不能冒充车端空气质量保障 |
|
||||
| 红外露营灯/尾门灯 | 尾门和帐篷区照明 | 动态模式可能通过循环键选择,状态不确定 | 只学习固定暖光、白光、亮度和明确关闭 |
|
||||
| 红外 LED 字幕牌/像素屏 | 生日、应援、露营提示 | 遥控器通常只能切换预置内容,不能动态写文字 | 提前写入固定图案,把红外动作定义为“播放预设 1/2/3” |
|
||||
| 红外香氛机 | 午休、迎宾和放松 | 液体倾倒、过敏、宠物和儿童限制 | 只选防倾倒、低压、雾化与灯光分离控制型号,默认不参与场景 |
|
||||
|
||||
## 3.3 C 级:不建议进入首批车端场景
|
||||
|
||||
- 只有 RF/蓝牙遥控的遥控车、无人机和大量消费级玩具;
|
||||
- 依赖长按且没有独立 STOP 的移动玩具;
|
||||
- 电热毯、暖风机、加热坐垫等高热设备;
|
||||
- 无防护激光投影、UV 消毒灯和高亮快闪设备;
|
||||
- 易倾倒加湿器、开放液体装置和烟雾机;
|
||||
- 高扭矩机械支架、伸缩机构和裸露电机;
|
||||
- 仅有电源 Toggle 且无法确定当前状态的设备。
|
||||
|
||||
## 4. NFC 卡设计
|
||||
|
||||
建议把 NFC 分成两类,既符合当前学习链路,也方便构建预设和自定义场景。
|
||||
|
||||
### 4.1 外设能力卡
|
||||
|
||||
每个红外外设对应一张能力卡,记录:
|
||||
|
||||
```yaml
|
||||
kind: PeripheralCapabilityCard
|
||||
device_id: ir-strip-01
|
||||
device_type: ambient_light_strip
|
||||
capabilities:
|
||||
- name: light.power_on
|
||||
ir_slot: 21
|
||||
- name: light.power_off
|
||||
ir_slot: 22
|
||||
- name: light.blue
|
||||
ir_slot: 23
|
||||
- name: light.breathe
|
||||
ir_slot: 24
|
||||
compatibility:
|
||||
power: usb_5v
|
||||
parked_only_effects: [flash, chase]
|
||||
```
|
||||
|
||||
刷外设卡用于识别设备、导入能力、单项测试或替换场景中的同类设备。
|
||||
|
||||
### 4.2 场景卡
|
||||
|
||||
场景卡不重复保存所有原始红外波形,而是引用已经学习的外设能力和车端场景版本:
|
||||
|
||||
```yaml
|
||||
kind: SceneCard
|
||||
scene_id: family-space-adventure
|
||||
scene_version: 3
|
||||
bindings:
|
||||
ambient_booster: ir-strip-01
|
||||
projector: star-projector-01
|
||||
story_actor: robot-01
|
||||
```
|
||||
|
||||
用户刷“月球、火星、返航、极速凉舱、影院”等实体场景卡,即可触发预设或自定义功能。
|
||||
|
||||
## 5. 场景一:光语座舱
|
||||
|
||||
### 5.1 产品需求
|
||||
|
||||
原车氛围灯不仅偏弱,车辆状态也集中显示在屏幕。外接红外灯带可以同时承担氛围增强和离散状态提示。虽然红外无法做连续参数控制,但固定颜色、呼吸、流水和快慢模式足够形成状态语言。
|
||||
|
||||
### 5.2 车端状态驱动灯带
|
||||
|
||||
| 车端状态 | 红外灯带动作 | 原车设备配合 |
|
||||
|---|---|---|
|
||||
| 正常氛围模式 | 固定主题色或低速渐变 | 原车氛围灯同色低亮 |
|
||||
| 座椅正在调整 | 蓝色流水 | 座椅到位后切换固定蓝色 |
|
||||
| 动态摇篮运行 | 蓝色呼吸或慢速渐变 | 停止后恢复当前主题 |
|
||||
| 空调高风量制冷 | 蓝色快速渐变 | 风量降低后切换慢速渐变 |
|
||||
| 任一车窗未关好 | 红色慢闪 | 全部车窗反馈关闭后绿灯一次 |
|
||||
| 遮阳帘移动 | 暖白呼吸 | 到位后恢复主题色 |
|
||||
| 手机正在无线充电 | 蓝色呼吸 | 满电切换绿色,故障切换红色闪烁 |
|
||||
| 场景正常结束 | 绿色呼吸一次后恢复/关闭 | 依据场景恢复原车灯光 |
|
||||
|
||||
### 5.3 状态优先级
|
||||
|
||||
灯带同一时间只能处于一个红外模式,必须规定优先级:
|
||||
|
||||
```text
|
||||
车窗/无线充电故障提示
|
||||
> 场景中止提示
|
||||
> 座椅/遮阳帘运动反馈
|
||||
> 充电与空调状态
|
||||
> 普通氛围效果
|
||||
```
|
||||
|
||||
仅在状态变化时发射红外信号,并设置最小保持时间,避免车端状态抖动导致频繁切换。
|
||||
|
||||
### 5.4 自定义示例
|
||||
|
||||
> 我的副驾座椅调整时灯带用蓝色流水,到位后变成湖蓝;如果有车窗没关好,始终优先红色慢闪。
|
||||
|
||||
## 6. 场景二:烈日快速凉舱
|
||||
|
||||
### 6.1 产品需求
|
||||
|
||||
车辆暴晒后,仅靠空调内循环降温较慢;外接红外风扇可以辅助排出热空气并改善副驾或后排局部送风。车端舱温、车窗和空调反馈决定外设风扇的运行阶段。
|
||||
|
||||
### 6.2 状态驱动流程
|
||||
|
||||
1. 用户刷“极速凉舱”场景卡或选择预设;
|
||||
2. 系统确认 P 挡、零车速和舱内温度高于设定阈值;
|
||||
3. 车窗打开到预设通风开度;只有实际车窗反馈匹配后,才向红外风扇发送“高档 + 摇头”;
|
||||
4. 灯带显示橙色快速渐变,表示热空气排出阶段;
|
||||
5. 达到通风时长或舱温开始下降后,车窗关闭;
|
||||
6. 必须等待四窗全部关闭反馈,才切换空调低温、内循环、高风量、副驾座椅通风;
|
||||
7. 红外风扇切换中档,灯带切换蓝色渐变;
|
||||
8. 舱温达到目标范围后,外接风扇降到低档或关闭,车端空调恢复舒适档,灯带变为稳定湖蓝;
|
||||
9. 任何车窗关闭失败都不会进入内循环完成状态,界面和灯带保持故障提示。
|
||||
|
||||
外接风扇没有物理反馈,因此执行报告写“风扇高档红外指令已发出”,舱温变化只能作为整体效果证据,不能证明风扇自身状态。
|
||||
|
||||
## 7. 场景三:驻车沉浸影院
|
||||
|
||||
### 7.1 外设
|
||||
|
||||
- 红外微型投影仪或星空投影灯;
|
||||
- 红外灯带;
|
||||
- 可选红外音响/白噪音设备;
|
||||
- 可选红外风扇。
|
||||
|
||||
### 7.2 联动流程
|
||||
|
||||
1. 刷“影院外设套装卡”或“驻车影院”场景卡;
|
||||
2. 校验 P 挡和零车速;
|
||||
3. 关闭四窗、关闭遮阳帘、关闭阅读灯,副驾进入影院姿态,空调进入低噪声档;
|
||||
4. 场景等待四窗、遮阳帘和座椅的真实反馈;
|
||||
5. 只有遮光和座椅条件满足后,才发送投影仪/星空灯 ON、灯带深蓝和外部音响播放;
|
||||
6. 座椅被人工调整时,影院继续,但场景释放座椅,不在结束时覆盖用户的新姿态;
|
||||
7. 挡位离开 P 或用户取消时,优先发送外设明确 OFF,再停止动态灯效并恢复仍由场景持有的车端资源;
|
||||
8. 如果投影设备只有 Power Toggle,不允许加入该预设。
|
||||
|
||||
这比“同时打开投影和调座椅”多了一层必要关系:车辆先完成遮光、姿态和安全条件,外设才进入工作状态。
|
||||
|
||||
## 8. 场景四:NFC 星际故事卡
|
||||
|
||||
### 8.1 产品需求
|
||||
|
||||
充电和停车等待时,通过实体 NFC 卡选择故事章节,减少儿童持续观看屏幕。红外玩偶、投影灯和灯带提供外部角色与舞台,车端座椅、空调和遮阳帘成为剧情的一部分。
|
||||
|
||||
### 8.2 外设与场景卡
|
||||
|
||||
- 红外星空投影灯;
|
||||
- 红外故事机器人/玩偶;
|
||||
- 红外灯带;
|
||||
- 可选红外风扇;
|
||||
- “启程、月球、火星、返航”四张 NFC 场景卡。
|
||||
|
||||
### 8.3 章节联动
|
||||
|
||||
#### 启程卡
|
||||
|
||||
1. 检查 P 挡和零车速;
|
||||
2. 遮阳帘关闭、阅读灯关闭、副驾进入休闲姿态;
|
||||
3. 遮阳帘反馈到位后,星空投影灯开启;
|
||||
4. 座椅反馈到位后,玩偶执行“挥手 + 发射台词”;
|
||||
5. 灯带进入蓝色流水,空调风量短时提高形成“启动气流”。
|
||||
|
||||
#### 月球卡
|
||||
|
||||
- 原车氛围灯切换冷蓝;
|
||||
- 灯带切换白蓝呼吸;
|
||||
- 空调转为低风量;
|
||||
- 原车灯光反馈匹配后,玩偶讲述月球章节;
|
||||
- 投影灯切换白色星空和慢速旋转。
|
||||
|
||||
#### 火星卡
|
||||
|
||||
- 原车氛围灯和灯带切换红色;
|
||||
- 副驾短时进入轻柔动态摇篮;
|
||||
- 动态模式反馈开始后,风扇高档模拟沙尘气流,玩偶执行火星表演;
|
||||
- 动态模式结束后,风扇降档,灯带从红闪切换稳定红色。
|
||||
|
||||
#### 返航卡
|
||||
|
||||
- 红外玩偶 STOP、投影 OFF、风扇 OFF、灯带暖白;
|
||||
- 车端座椅、空调、遮阳帘和原车灯光按资源所有权恢复;
|
||||
- 所有可确认车端状态恢复后,灯带发送绿色呼吸一次再关闭。
|
||||
|
||||
### 8.4 自定义方式
|
||||
|
||||
用户可以学习自己玩偶的动作,并修改实体章节卡:
|
||||
|
||||
> 火星卡里不要让原来的机器人表演,改成我的恐龙叫三次;返航时先关投影,再恢复座椅。
|
||||
|
||||
这充分利用“红外信号写入 NFC、刷卡选择能力”的现有链路,同时形成实体、无屏和可自定义的车端产品体验。
|
||||
|
||||
## 9. 场景五:离车确认光带
|
||||
|
||||
### 9.1 产品需求
|
||||
|
||||
离车前用户需要确认车窗、遮阳帘和无线充电位,但这些状态分散在屏幕中。灯带可以作为最终确认出口。
|
||||
|
||||
### 9.2 联动流程
|
||||
|
||||
1. 刷“离车”场景卡或在车机选择离车预设;
|
||||
2. 任一车窗未完全关闭:灯带红色慢闪,车机标出具体车窗;
|
||||
3. 遮阳帘未达到离车目标:灯带暖白呼吸,车机继续关闭并等待反馈;
|
||||
4. 左右无线充电区域仍有设备或出现故障:灯带黄色闪烁,提醒取走手机;
|
||||
5. 所有可确认项目满足后:灯带绿色呼吸一次,原车氛围灯与灯带关闭;
|
||||
6. 外设灯带只负责提示,不替代车端状态判断。
|
||||
|
||||
这是灯带比“第三方氛围灯”更进一步的长期产品功能。
|
||||
|
||||
## 10. 场景六:移动摄影棚
|
||||
|
||||
### 10.1 外设
|
||||
|
||||
- 红外补光灯;
|
||||
- 红外背景灯带;
|
||||
- 可选红外微型风扇。
|
||||
|
||||
### 10.2 NFC 风格卡
|
||||
|
||||
- 暖肤人像;
|
||||
- 冷白会议;
|
||||
- 蓝紫短视频;
|
||||
- 证件照。
|
||||
|
||||
### 10.3 联动流程
|
||||
|
||||
1. 刷风格卡,确认 P 挡和零车速;
|
||||
2. 遮阳帘调整到该风格的目标位置,座椅进入镜头姿态;
|
||||
3. 阅读灯关闭,空调降低风量和噪声;
|
||||
4. 等待遮阳帘、座椅和空调状态反馈;
|
||||
5. 向补光灯发送固定色温与亮度,背景灯带发送主题色;
|
||||
6. 用户调整座椅后,场景释放座椅控制,不自动拉回;
|
||||
7. 用户刷“摄影结束”卡,补光灯和背景灯明确 OFF,车端状态恢复。
|
||||
|
||||
## 11. 场景七:露营布营与收营
|
||||
|
||||
### 11.1 外设
|
||||
|
||||
- 红外露营灯/尾门灯;
|
||||
- 红外风扇;
|
||||
- 红外投影仪;
|
||||
- 红外灯带。
|
||||
|
||||
### 11.2 两张关键场景卡
|
||||
|
||||
**布营卡**:车端先完成驻车、车窗通风开度、座椅和灯光设置;收到车端反馈后,再开启露营灯、风扇和投影。
|
||||
|
||||
**收营卡**:先向所有红外外设发送明确 OFF,再关闭车窗和遮阳帘、恢复座椅和空调;车端反馈全部完成后灯带绿色提示。
|
||||
|
||||
收营场景的实际价值高于单纯派对效果,因为它把容易遗漏的多设备关闭动作集中处理。红外外设没有状态反馈,因此界面显示“已发送关闭指令”,仍建议用户目视确认。
|
||||
|
||||
## 12. 推荐技术展配置
|
||||
|
||||
### 12.1 四件主外设
|
||||
|
||||
1. 红外 RGB/流水灯带:兼顾氛围增强和状态提示;
|
||||
2. 红外桌面风扇:体现舱温、车窗、空调和外设的状态驱动协同;
|
||||
3. 红外星空投影灯:提供强视觉效果;
|
||||
4. 红外机器人/故事玩偶:提供角色和动作反馈。
|
||||
|
||||
可选第五件是红外补光灯,用于展示成人创作者场景。
|
||||
|
||||
### 12.2 六张展示卡
|
||||
|
||||
- 灯带能力卡;
|
||||
- 风扇能力卡;
|
||||
- 启程场景卡;
|
||||
- 月球场景卡;
|
||||
- 火星场景卡;
|
||||
- 返航场景卡。
|
||||
|
||||
### 12.3 展示顺序
|
||||
|
||||
1. 分别学习灯带和风扇动作并写入能力卡,证明外设适配;
|
||||
2. 刷“极速凉舱”,展示车窗反馈驱动风扇档位与灯带状态;
|
||||
3. 刷“启程/月球/火星”实体卡,展示车端状态决定投影、玩偶和风扇的动作时机;
|
||||
4. 刷“返航”,展示外设明确关闭、车端恢复与结果分级;
|
||||
5. 修改火星卡中的玩偶绑定或动作顺序,保存为自定义场景卡。
|
||||
|
||||
## 13. 对现有工程的增量
|
||||
|
||||
### 13.1 外设能力模型增加红外特性
|
||||
|
||||
```yaml
|
||||
transport: infrared
|
||||
ir_slot: 21
|
||||
idempotent: true
|
||||
command_semantics: power_off
|
||||
repeat: 2
|
||||
interval_ms: 250
|
||||
parked_only: false
|
||||
physical_feedback: unavailable
|
||||
```
|
||||
|
||||
只有 `idempotent=true` 的关键开关和固定档位能力才能进入自动预设。
|
||||
|
||||
### 13.2 场景增加车端反馈门控
|
||||
|
||||
```yaml
|
||||
- id: close_shade
|
||||
capability: vehicle.sunshade.set
|
||||
parameters: {covered_percent: 100}
|
||||
wait_for:
|
||||
state: vehicle.sunshade.covered_percent
|
||||
equals: 100
|
||||
timeout_ms: 8000
|
||||
|
||||
- id: start_projector
|
||||
depends_on: [close_shade]
|
||||
capability: peripheral.projector.power_on
|
||||
confirmation: ir_sent_only
|
||||
failure_policy: continue
|
||||
```
|
||||
|
||||
### 13.3 红外外设影子状态
|
||||
|
||||
车机为每个外设保存“最后一次已发送的确定指令”,仅用于避免重复操作和生成恢复计划。影子状态不能作为物理状态证据。设备重新上电、NFC 重新识别或红外链路异常后,影子状态必须失效。
|
||||
|
||||
### 13.4 多设备红外管理
|
||||
|
||||
- 记录每个外设协议、地址、重复次数和发射间隔;
|
||||
- 做码冲突测试;
|
||||
- 同一时刻的多个红外动作在控制器侧顺序发射;
|
||||
- 控制器和设备接收窗必须保持固定视距;
|
||||
- 对移动玩具保留独立 STOP,并在取消时优先发送。
|
||||
|
||||
### 13.5 结果分级
|
||||
|
||||
- `车端反馈已确认`:CAN0/CAN1 状态匹配;
|
||||
- `红外网关已确认`:控制器确认接收了发射请求;
|
||||
- `红外指令已发出`:无法证明外设物理状态;
|
||||
- `场景已降级`:缺少外设能力,跳过可选外设节点;
|
||||
- `场景已拒绝`:缺少必要的独立 OFF/STOP 或安全条件不满足。
|
||||
|
||||
## 14. 实施顺序
|
||||
|
||||
### P0:使用现有红外/NFC能力
|
||||
|
||||
- 按准入条件采购并筛选灯带、风扇、投影灯和玩偶;
|
||||
- 学习并验证固定 ON/OFF、颜色、档位、模式和 STOP;
|
||||
- 制作能力卡与“启程、月球、火星、返航”场景卡;
|
||||
- 实现极速凉舱、驻车影院和星际故事三个预设;
|
||||
- 自定义场景先支持替换外设、调整顺序和修改车端参数。
|
||||
|
||||
### P1:补齐状态驱动
|
||||
|
||||
- Android 场景执行器增加 `wait_for`、车端条件分支和超时降级;
|
||||
- 光语座舱监听车窗、座椅、空调、遮阳帘和无线充电状态变化;
|
||||
- 红外外设增加幂等性、重复参数、影子状态和恢复规则;
|
||||
- 浏览器只负责编辑和观察,场景下发到车机本地执行。
|
||||
|
||||
### P2:形成产品目录
|
||||
|
||||
- 发布红外外设兼容性清单和认证测试;
|
||||
- 提供官方能力卡、场景卡和可复制模板;
|
||||
- 允许用户将自己学习的红外动作绑定到官方场景角色;
|
||||
- 对香氛、净化、移动玩具和投影设备建立专项安全限制。
|
||||
Reference in New Issue
Block a user