版本协议

OpenAtom OHL 1.0

标签
专业版
#第11届立创电赛#vibecoding线条小狗键盘

创建时间:4周前

305 0

描述

<h3>1、项目功能介绍</h3> <p>本项目是基于开源项目 <a href="https://oshwhub.com/kjpig/binary-keyboard-wireless-edtion" target="_blank">可爱二进制无线键盘</a> 复刻的<strong>旋钮款无线客制化小键盘</strong>。项目旨在打造一个极简且高效的桌面生产力工具,特别适配 <strong>Vibe Coding</strong> 等追求流畅、沉浸式开发体验的高频交互场景。</p> <h4>核心功能与硬件复刻</h4> <ul> <li><strong>高集成度硬件架构</strong>:基于沁恒 <strong>CH592F</strong> 无线主控,严格按照原设计打样 PCB、采购物料并精准焊接。</li> <li><strong>三模连接</strong>:全面支持 <strong>蓝牙 BLE</strong>、<strong>自定义 2.4G 无线</strong> 以及 <strong>Type-C 有线模式</strong>。</li> <li><strong>丰富交互控制</strong>:集成机械按键输入、EC11 旋钮编码器(音量调节/代码缩放/滚轮切换)及反贴 RGB 动态背光。</li> <li><strong>低功耗电源管理</strong>:具备深度休眠机制,休眠电流控制在 <strong>$\mu\text{A}$ 级别</strong>,保障续航。</li> <li><strong>Web 端即开即用</strong>:完美适配网页配置工具 <a href="https://key.mpas.top/" target="_blank">BinaryKeyboard Studio</a>,支持多层映射(Layer)、宏录制与灯效自定义。</li> <li><strong>HA 智能家居实体控制(本次原创扩展)</strong>:配套自研一体化联动服务,将小键盘变身为 <strong>Home Assistant 桌面物理控制面板</strong>——按键直接开关卧室灯、空调等实体设备,无需解锁手机、无需打开任何 App。</li> </ul> <h4>个性化定制与优化</h4> <ul> <li><strong>场景聚焦 (Vibe Coding)</strong>:针对编码流进行定制宏配置,实现一键运行、快捷注释、多任务切换等高频指令映射。</li> <li><strong>HA 智能家居联动</strong>:原创 Python 一体化服务 <code>ha_server.py</code>,通过「F13~F24 无冲突键码 + 全局按键监听 + HA REST API」实现键盘按键与家居实体的自由映射,详见第 6 节 Demo 详解。</li> <li><strong>主题外观定制</strong>:搭配<strong>线条小狗</strong>主题键帽,软件端同步适配清新色系 RGB 动效,兼顾桌面美学与趣味性。</li> </ul> <hr> <h3>2、项目属性</h3> <ul> <li><strong>项目性质</strong>:基于开源设计的复刻与二次开发。</li> <li><strong>原创与优化点</strong>: <ul> <li>电路与核心固件遵循原开源协议。</li> <li><strong>线条小狗主题键帽适配方案</strong>、专为 <strong>Vibe Coding 优化的键位映射配置文件</strong>,以及 <strong>Home Assistant 实体控制联动服务(ha_server.py + Web 配置页)</strong> 为本次原创设计。</li> </ul></li> <li><strong>公开状态</strong>:本项目为<strong>首次公开</strong>,未参与其他赛事评奖,旨在分享低成本、个性化的客制化硬件开发经验。</li> </ul> <hr> <h3>3、开源协议</h3> <p>本项目严格遵循原项目的混合开源协议:</p> <ul> <li><strong>固件与软件源码</strong>:遵循 <strong>GPL-3.0 License</strong></li> <li><strong>PCB 工程与 3D 结构文件</strong>:遵循 <strong>CC BY-NC-SA 4.0</strong>(署名-非商业性使用-相同方式共享)</li> <li><strong>项目说明文档及图文素材</strong>:遵循 <strong>CC BY 4.0</strong></li> </ul> <hr> <h3>4、硬件部分</h3> <h4>原理与供电架构</h4> <ol> <li><strong>电源系统</strong>:支持 Type-C 或锂电池(403040 规格)供电。采用 <strong>TP4054</strong> 负责锂电充电;系统主供电采用 <strong>TPS62740</strong> 高效 Buck 芯片降压至 <strong>2.5V</strong> 为 MCU 及外设供电;外加 <strong>TPS61023</strong> 升压芯片驱动反贴 RGB 灯珠,保证电量波动时不掉亮度。</li> <li><strong>控制与扫描</strong>:CH592F 负责机械按键矩阵扫描、EC11 正交脉冲相位采样及 2.4G/BLE 协议栈运行。</li> </ol> <h4>关键注意事项</h4> <p>> ⚠️ <strong>硬件装配重点排查事项:</strong> > > <em> <strong>PCB 板厚</strong>:板载 PCB 天线基于 <strong>1.0mm</strong> 板厚阻抗匹配设计,打样请务必选择 1.0mm。 > </em> <strong>工作电压域</strong>:系统核心供电为 <strong>2.5V</strong>(非常见 3.3V/5V),外接调试器时请注意电平兼容性。 > <em> <strong>电池极性</strong>:1.25mm 电池端子务必核对<strong>红正黑负</strong>,不同批次线序不同,反接极易烧毁芯片。 > </em> <strong>焊接顺序建议</strong>:<code>电源管理模块</code> $\to$ <code>CH592F 主控</code> $\to$ <code>按键、旋钮及反贴 3528 RGB 灯珠</code>。</p> <h4>调试验证流程</h4> <ol> <li><strong>上电前</strong>:用万用表二极管档/电阻档测量电源输入端,确保无对地短路。</li> <li><strong>电压测量</strong>:接入电源,验证 TPS62740 输出端是否稳定在 <strong>2.5V</strong>。</li> <li><strong>固件烧录</strong>:按住 PCB 上的 <code>BOOT</code> 键插入 Type-C,使用 MeowISP 识别设备并烧录。</li> <li><strong>功能测试</strong>:进入 BinaryKeyboard Studio 网页端逐一校验按键触发、旋钮顺逆时针脉冲与 RGB 渲染。</li> </ol> <p><img src="//image.lceda.cn/pullimage/8470YnczrJQjjWTWNu8v2zEJ3CsW9hotkfxU2zPC.jpeg" alt="硬件实物图 1"> <img src="//image.lceda.cn/pullimage/EjPcuRWwnBl93GsRudLB3W388SgL8EROufpE2STy.jpeg" alt="硬件实物图 2"> <img src="//image.lceda.cn/pullimage/fqyMtKNWfZDKjrCgwAWtPh5QEcNlKRxm61H4Dof5.jpeg" alt="硬件实物图 3"></p> <hr> <h3>5、软件部分</h3> <p>软件生态完全沿用原开源工程,支持多层映射、鼠标模拟与 MeowMacro 脚本宏编辑。</p> <h4>固件烧录步骤</h4> <ol> <li>从原项目 Release 获取最新的 <strong>MeowISP</strong> 工具与旋钮固件(<code>CH592F_KNOB_*_Full.hex</code>)。</li> <li>关闭键盘电源开关。</li> <li>按住 PCB 上的 <strong>BOOT 按键</strong>,同时通过 Type-C 数据线接入电脑。</li> <li>打开 MeowISP,选择设备型号并加载固件,点击 <strong>下载</strong>。</li> <li>烧录完成后重新插拔并打开电源开关,打开 <a href="https://key.mpas.top/" target="_blank">BinaryKeyboard Studio</a> 进行键位映射。</li> </ol> <img src="//image.lceda.cn/pullimage/khwE42FTaJdfVQwttg0YWH7dlfTHSMTXkV3wSPip.png" alt="MeowISP 烧录界面"> <hr> <h3>6、HA 智能家居实体控制 Demo(原创扩展,详解)</h3> <p>在复刻硬件与基础功能之外,本项目原创开发了一套 <strong>「小键盘 → Home Assistant 实体控制」联动方案</strong>,把客制化小键盘从"桌面宏工具"升级为<strong>桌面智能家居物理控制面板</strong>。以下为完整技术解析。</p> <h4>6.1 Demo 效果</h4> <p>键盘切到指定层后:</p> <ul> <li>按 <strong>K1</strong>(映射 F13)→ 卧室灯<strong>打开</strong>;</li> <li>按 <strong>K2</strong>(映射 F14)→ 卧室灯<strong>关闭</strong>;</li> <li>按 <strong>K3 / K4</strong>(映射 F15 / F16)→ 可分别绑定空调、插座、场景、脚本等任意 HA 实体;</li> <li>旋钮按压槽位(逻辑索引 6)同样可分配 F 键参与映射。</li> </ul> <p>全程无需点亮手机屏幕、无需打开 HA 面板,盲操作即可控制家居设备,桌面体验丝滑。</p> <h4>6.2 系统架构</h4> <pre><code>┌──────────────┐ USB HID 键盘报告 ┌────────────────┐ REST API ┌──────────────┐ │ BinaryKeyboard│ ─────────────────→ │ ha_server.py │ ────────────→ │ Home │ │ (CH592F 固件) │ F13/F14/... 键码 │ (端口 8080) │ turn_on/off │ Assistant │ │ │ │ keyboard 库 │ │ (卧室灯/空调…)│ │ 4层 × 7键 │ USB HID 配置协议 │ 全局按键钩子 │ │ │ │ KNOB 7键版 │ ←────────────────→ │ Web 配置页面 │ │ │ └──────────────┘ 读/写键位、保存 └────────────────┘ └──────────────┘ ↑ http://localhost:8080 浏览器 (可视化配置)</code></pre> <p>三个角色分工:</p> <table> <tr> <th style="text-align:left;">角色</th> <th style="text-align:left;">职责</th> </tr> <tr> <td style="text-align:left;"><strong>键盘固件</strong></td> <td style="text-align:left;">存储键位表(哪一层哪个键发什么 HID 键码),按键时发出对应键码</td> </tr> <tr> <td style="text-align:left;"><strong>ha_server.py</strong></td> <td style="text-align:left;">一体化服务:Web 配置页 + USB HID 读写固件 + 全局按键监听 + 调用 HA API</td> </tr> <tr> <td style="text-align:left;"><strong>Home Assistant</strong></td> <td style="text-align:left;">接收服务调用,真正控制灯、空调等设备</td> </tr> </table> <h4>6.3 核心思路:为什么选 F13~F24</h4> <p>要让电脑程序感知「哪个物理键被按下」,最可靠的方式是让键盘发出<strong>普通按键的 HID 报告</strong>,再用全局键盘钩子捕获。但字母、数字、方向键等常规按键会干扰正常打字。</p> <p><strong>F13~F24 是 HID 标准中定义、但普通键盘上不存在的 12 个键</strong>:Windows 能正常识别,而任何应用程序都不使用它们,因此是"零冲突"的理想载体:</p> <pre><code>物理键 K1 ──固件键位表──→ HID 键码 F13 (0x68) ──Windows──→ 程序捕获 "F13"</code></pre> <p>F13~F24 与 HID 键码对照(本项目实测校验):</p> <table> <tr> <th style="text-align:left;">F 键</th> <th style="text-align:left;">F13</th> <th style="text-align:left;">F14</th> <th style="text-align:left;">F15</th> <th style="text-align:left;">F16</th> <th style="text-align:left;">F17</th> <th style="text-align:left;">F18</th> <th style="text-align:left;">F19</th> <th style="text-align:left;">F20</th> <th style="text-align:left;">F21</th> <th style="text-align:left;">F22</th> <th style="text-align:left;">F23</th> <th style="text-align:left;">F24</th> </tr> <tr> <td style="text-align:left;">HID 键码</td> <td style="text-align:left;">0x68</td> <td style="text-align:left;">0x69</td> <td style="text-align:left;">0x6A</td> <td style="text-align:left;">0x6B</td> <td style="text-align:left;">0x6C</td> <td style="text-align:left;">0x6D</td> <td style="text-align:left;">0x6E</td> <td style="text-align:left;">0x6F</td> <td style="text-align:left;">0x70</td> <td style="text-align:left;">0x71</td> <td style="text-align:left;">0x72</td> <td style="text-align:left;">0x73</td> </tr> </table> <p>> ⚠️ <strong>开发踩坑实录</strong>:HID 官方键码表中 F13 起始于 <strong>0x68</strong>。开发初期误用了 <code>0x67~0x72</code> 区间——<code>0x67</code> 实际是"小键盘 =",Windows 将其呈现为 <code>CLEAR</code>(scan_code=89)。当时的现象极具迷惑性:按 K1 电脑收到 CLEAR(监听不识别,看似"没反应"),按 K2 收到真正的 F13(却触发了 K1 配置的动作),表现如同"键位错乱"。最终通过交互式逐键测试脚本分段捕获比对固件键位表,才定位到这一位的键码偏移。教训:<strong>键码必须查官方 HID Usage Table,不能凭印象</strong>。</p> <h4>6.4 固件键位的读取与写入(USB HID 配置协议)</h4> <p>键盘 USB 枚举为复合设备:<code>MI_00</code> 标准键盘接口(Windows 独占,负责发按键报告)、<code>MI_03</code> 厂商配置接口(usage_page = 0xFF00,读写键位表用)。<code>ha_server.py</code> 通过 <strong>hidapi</strong> 打开 MI_03 与固件通信。</p> <p><strong>报文格式</strong>(Windows 下 hidapi 写入必须 65 字节,首字节为 Report ID = 0x00):</p> <pre><code>字节: [0] [1] [2] [3] [4...] 含义: 0x00 命令码 子命令 数据长度 数据 (ReportID)</code></pre> <p><strong>命令一览</strong>:</p> <table> <tr> <th style="text-align:left;">命令码</th> <th style="text-align:left;">名称</th> <th style="text-align:left;">作用</th> </tr> <tr> <td style="text-align:left;"><code>0x01</code></td> <td style="text-align:left;">SYS_INFO</td> <td style="text-align:left;">读固件版本、层数、键数、键盘类型</td> </tr> <tr> <td style="text-align:left;"><code>0x22</code></td> <td style="text-align:left;">LAYER_GET</td> <td style="text-align:left;">读当前层 / 层数 / 默认层</td> </tr> <tr> <td style="text-align:left;"><code>0x20</code></td> <td style="text-align:left;">KEYMAP_GET</td> <td style="text-align:left;">读指定层的键位表(子命令 = 层号)</td> </tr> <tr> <td style="text-align:left;"><code>0x21</code></td> <td style="text-align:left;">KEYMAP_SET</td> <td style="text-align:left;">写指定层的键位表</td> </tr> <tr> <td style="text-align:left;"><code>0x10</code></td> <td style="text-align:left;">CFG_SAVE</td> <td style="text-align:left;">将 RAM 中的配置持久化到 Flash</td> </tr> </table> <p><strong>键位表结构</strong>:KEYMAP_GET 回复从偏移 7 起每 4 字节描述一个键(type / modifier / param1 / param2),共 8 个槽位。<code>type=1</code>(KEYBOARD)时 <code>param1</code> 即 HID 键码;<code>type=0</code> 为空键,<strong>按下不发任何报告</strong>——因此某层要参与 HA 控制必须先写入 F 键。</p> <p><strong>合并写入策略</strong>:直接整层覆盖会抹掉用户原有的音量键、方向键等配置。写入时先读回现有键位,只修改目标 F 键槽位(原本非 F 键的槽位原样保留),再写回并 CFG_SAVE 持久化。</p> <h4>6.5 监听链路:从物理按键到 HA 设备的八步数据流</h4> <pre><code>① 按下物理 K1(当前层 1) ↓ ② 固件查键位表: 层1[K1] = F13(0x68) ↓ ③ 固件经 MI_00 键盘接口发出 HID 报告 "F13" ↓ ④ Windows 识别为按键 F13 (scan_code=100) ↓ ⑤ ha_server.py 的 keyboard 库全局钩子捕获 keydown ↓ ⑥ 查监听映射表: F13 → {entityId: "switch.wo_shi_deng", action: "on"} ↓ ⑦ (500ms 防抖) 后台线程调用 HA REST API POST /api/services/switch/turn_on {"entity_id": "switch.wo_shi_deng"} ↓ ⑧ Home Assistant 执行,卧室灯打开</code></pre> <p><strong>「固件为真源」的映射构建</strong>:监听映射表并非照抄网页保存的配置,而是<strong>每次启动/热更新时实时读取固件键位</strong>,得到真实的「层.键位 → F 键」分配,再按位置从配置中取实体绑定拼接成最终映射。这样即使用户之后在 Studio 或其他工具里调整了固件键位(如 F13 从 K1 挪到 K2),映射关系依然自动保持一致,杜绝"配置与设备不同步"的错乱。</p> <p><strong>配置三层存储</strong>:<code>localStorage</code>(页面快速展示)→ <code>ha_config.json</code>(服务端持久化:HA 地址 / 令牌 / 实体绑定 / 监听开关)→ <strong>固件 Flash(最终真源)</strong>。服务重启后自动读取配置、对照固件过滤有效映射并恢复监听,无需人工干预。</p> <p><strong>HA REST API 调用</strong>:获取实体用 <code>GET /api/states</code>(过滤 switch / light / fan / cover / scene / script / button 等可切换域);控制用 <code>POST /api/services//turn_on|turn_off|toggle</code>(scene / script / button 有各自的调用方式);认证采用请求头 <code>Authorization: Bearer &lt;长期访问令牌&gt;</code>。</p> <h4>6.6 Web 配置页面</h4> <p><img src="https://image.lceda.cn/oshwhub/pullImage/0fd41d1ee9924b9d9166f8250fcac2f6.png" alt="image.png"> 服务内嵌粉色主题配置页(与键盘颜值配套),操作流程:</p> <ol> <li>填入 HA 地址与长期访问令牌 → 一键拉取可控制实体列表;</li> <li>选择键盘层(1~4 层),为 K1~K4 及旋钮槽位分配 F13~F16 等 F 键;</li> <li>「写入固件」→「保存」(持久化到键盘 Flash,断电不丢);</li> <li>点击各按键绑定 HA 实体与动作(开 / 关 / 切换),保存即同步生效;</li> <li>「启动监听」→ 面板实时展示映射明细(<code>F13 = 层1 K1 → 卧室灯 (开)</code>),按物理键即可控制设备。</li> </ol> <p><img src="https://image.lceda.cn/oshwhub/pullImage/831129562b99416690ee9d53ef7b69d3.png" alt="image.png"></p> <h4>6.7 工程细节</h4> <ul> <li><strong>ThreadingHTTPServer 多线程</strong>:单个慢请求不再卡死整个服务;</li> <li><strong>HID 事务锁(RLock)</strong>:命令-应答原子化,防止并发请求串包;可重入设计避免 <code>connect()</code> 嵌套调用死锁;</li> <li><strong>监听防抖</strong>:同一 F 键 500ms 内只触发一次,避免机械抖动重复控制;</li> <li><strong>HA 调用异步化</strong>:服务调用在后台线程执行,按键响应零阻塞;</li> <li><strong>排查工具链</strong>:配套三个测试脚本(全键事件捕获 / F 键专项 / 交互式逐键分段测试),实测 K1→F13 全部准确到达,端到端注入验证开灯/关灯状态翻转正常。</li> </ul> <h4>6.8 复现步骤</h4> <pre><code class="language-bash"># 1. 安装依赖 pip install hidapi keyboard # 2. 键盘 USB 连接电脑,管理员终端启动(keyboard 库全局钩子需要权限) python -u ha_server.py # 3. 浏览器打开 http://localhost:8080 按上文流程配置</code></pre> <p>本 Demo 的完整代码、当前键位映射表与详细排查手册已整理于项目目录 <code>ha-keyboard-service/</code>(含 <code>README.md</code> 与《键位映射详解.md》)。</p> <hr> <h3>7、BOM 清单</h3> <table> <tr> <th style="text-align:left;">序号</th> <th style="text-align:left;">器件名称 / 型号</th> <th style="text-align:left;">位号</th> <th style="text-align:left;">封装规格</th> <th style="text-align:left;">数量</th> <th style="text-align:left;">品牌 / 厂家</th> <th style="text-align:left;">用途说明</th> </tr> <tr> <td style="text-align:left;">1</td> <td style="text-align:left;"><strong>CH592F</strong></td> <td style="text-align:left;">U12</td> <td style="text-align:left;">VQFN-28</td> <td style="text-align:left;">1</td> <td style="text-align:left;">沁恒 (WCH)</td> <td style="text-align:left;">无线主控 MCU</td> </tr> <tr> <td style="text-align:left;">2</td> <td style="text-align:left;"><strong>TPS62740</strong></td> <td style="text-align:left;">-</td> <td style="text-align:left;">WSON-8</td> <td style="text-align:left;">1</td> <td style="text-align:left;">TI</td> <td style="text-align:left;">高效降压 Buck (2.5V)</td> </tr> <tr> <td style="text-align:left;">3</td> <td style="text-align:left;"><strong>TPS61023</strong></td> <td style="text-align:left;">-</td> <td style="text-align:left;">SOT-563</td> <td style="text-align:left;">1</td> <td style="text-align:left;">TI</td> <td style="text-align:left;">同步升压 IC (RGB 供电)</td> </tr> <tr> <td style="text-align:left;">4</td> <td style="text-align:left;"><strong>TP4054</strong></td> <td style="text-align:left;">U29</td> <td style="text-align:left;">TSOT-23-5</td> <td style="text-align:left;">1</td> <td style="text-align:left;">友台半导体</td> <td style="text-align:left;">锂电池充电管理</td> </tr> <tr> <td style="text-align:left;">5</td> <td style="text-align:left;"><strong>USBLC6-2SC6</strong></td> <td style="text-align:left;">D2</td> <td style="text-align:left;">SOT-23-6</td> <td style="text-align:left;">1</td> <td style="text-align:left;">TECH PUBLIC</td> <td style="text-align:left;">USB 接口 ESD 保护</td> </tr> <tr> <td style="text-align:left;">6</td> <td style="text-align:left;"><strong>32MHz 晶振</strong></td> <td style="text-align:left;">U14</td> <td style="text-align:left;">SMD 1.6×1.2</td> <td style="text-align:left;">1</td> <td style="text-align:left;">扬兴 (YXC)</td> <td style="text-align:left;">高频系统晶振</td> </tr> <tr> <td style="text-align:left;">7</td> <td style="text-align:left;"><strong>Type-C 母座</strong></td> <td style="text-align:left;">USB1</td> <td style="text-align:left;">16-PIN SMD</td> <td style="text-align:left;">1</td> <td style="text-align:left;">首韩 (SHOU HAN)</td> <td style="text-align:left;">供电与有线通信接口</td> </tr> <tr> <td style="text-align:left;">8</td> <td style="text-align:left;"><strong>EC11 编码器</strong></td> <td style="text-align:left;">-</td> <td style="text-align:left;">贴片/插针</td> <td style="text-align:left;">1</td> <td style="text-align:left;">通用</td> <td style="text-align:left;">旋转编码器(带按压)</td> </tr> <tr> <td style="text-align:left;">9</td> <td style="text-align:left;"><strong>3528 RGB 灯珠</strong></td> <td style="text-align:left;">-</td> <td style="text-align:left;">3528 反贴</td> <td style="text-align:left;">若干</td> <td style="text-align:left;">通用</td> <td style="text-align:left;">底部氛围与键位背光</td> </tr> <tr> <td style="text-align:left;">10</td> <td style="text-align:left;"><strong>锂电池 (403040)</strong></td> <td style="text-align:left;">-</td> <td style="text-align:left;">带 1.25 端子</td> <td style="text-align:left;">1</td> <td style="text-align:left;">通用</td> <td style="text-align:left;">3.7V 聚合物锂电池</td> </tr> <tr> <td style="text-align:left;">11</td> <td style="text-align:left;"><strong>机械轴体</strong></td> <td style="text-align:left;">-</td> <td style="text-align:left;">轴座/焊接</td> <td style="text-align:left;">若干</td> <td style="text-align:left;">通用</td> <td style="text-align:left;">键位输入轴体</td> </tr> <tr> <td style="text-align:left;">12</td> <td style="text-align:left;"><strong>定制键帽</strong></td> <td style="text-align:left;">-</td> <td style="text-align:left;">标准高度</td> <td style="text-align:left;">若干</td> <td style="text-align:left;">定制</td> <td style="text-align:left;"><strong>线条小狗主题键帽</strong></td> </tr> </table> <hr> <h3>8、大赛 LOGO 验证</h3> <img src="//image.lceda.cn/pullimage/sNYELZWijMSG6cbfLR8fCVSdmhzn15vrTyZ05nXM.jpeg" alt="大赛 LOGO 验证照片"> <hr> <h3>9、项目演示视频</h3> <ul> <li>📺 <strong>Bilibili 演示视频</strong>:<a href="https://www.bilibili.com/video/BV15D8s6gEGf/" target="_blank">【线条小狗二进制键盘】视频演示与功能体验</a></li> </ul>

文档

BOM

附件

附件名 下载
WCHISPTool_Setup.exe
CH592F-KNOB-3.1.40-full.bin
HA演示.mp4

评论(0)

  • 表情
    emoji
    小嘉工作篇
    小嘉日常篇
  • 图片
成功
工程所有者当前已关闭评论
goToTop
svg-battery svg-battery-wifi svg-books svg-more svg-paste svg-pencil svg-plant svg-ruler svg-share svg-user svg-logo-cn svg-double-arrow