Skip to content

Repository files navigation

8800web

MIT License Web Bluetooth

简体中文 | English

基于浏览器的森海克斯 SHX8800 系列对讲机编程工具(及兼容机型)。通过 Web Bluetooth 无线连接或 USB Serial 有线连接,完成读频、编辑、写频——无需安装任何桌面软件。


功能特性

  • BLE 连接 — 使用 Web Bluetooth 无线连接对讲机(需 Chromium 内核浏览器)
  • USB Serial 连接 — 使用 Web Serial API 通过 USB 线连接(Chrome、Edge、Firefox 151+、Opera)
  • 读取对讲机 — 完整读取信道、VFO 设置、DTMF/MDC 联系人、功能设置、FM 预设及开机图片
  • 信道编辑 — 电子表格风格编辑器,支持 512 个信道(8 区 × 64 个),可编辑频率/亚音/功率/带宽/扫描/PTT ID,支持复制/剪切/粘贴/复制/重排序
  • CSV 导入/导出 — 通过 CSV 文件批量管理信道
  • 写频 — 将修改后的配置写回设备
  • 备份与还原 — 以 JSON 格式保存/加载完整对讲机镜像
  • 差异对比 — 写频前审查变更内容
  • 开机图片 — 支持读取/写入 OLED 开机画面(128×128 RGB565),参考 senhaix-freq-writer-enhanced 实现,支持 8x00 流式协议与 Pro 0xA5 帧协议
  • 多语言 — 英文与中文界面
  • 信道分享 — 分享信道配置

支持机型

  • SHX8800
  • SHX8600
  • SHX8800 Pro
  • SHX8600 Pro

快速开始

npm install
npm run dev

在 Chromium 内核浏览器(Chrome、Edge 等)中打开 http://localhost:8800。Web Bluetooth 和 Web Serial 需要 HTTPS 或 localhost 环境。

连接方式

方式 浏览器支持 适用场景
Web Bluetooth Chrome、Edge、Opera 通过 BLE 无线连接
Web Serial Chrome、Edge、Firefox 151+、Opera USB 有线连接(更快、更稳定)

注: Safari 和 iOS 浏览器不受支持。详见浏览器兼容性

命令

命令 说明
npm run dev 启动开发服务器(端口 8800)
npm run build 生产构建到 dist/
npm run preview 预览生产构建
npm test 运行测试(Node.js 内置测试运行器)
npm run lint 使用 ESLint 检查代码

技术栈

  • React 19 + React Router 7
  • Vite 8 — 构建工具
  • Tailwind CSS 4 — 样式
  • Ant Design 5 (部分使用,正迁移至自定义组件)
  • lucide-react — 图标
  • i18next — 国际化
  • gbk.js — 中文文本编码(GBK/GB2312)
  • Web Bluetooth API — BLE 对讲机连接
  • Web Serial API — USB 串口对讲机连接

架构

┌─────────────────────────────────────────────────────────────┐
│                      应用层                                   │
│                    (Shx8800Session)                          │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                   TransportFactory                            │
│               (动态传输选择)                                   │
└─────────────────────────────────────────────────────────────┘
                              │
            ┌─────────────────┴─────────────────┐
            ▼                                   ▼
┌───────────────────────┐           ┌───────────────────────┐
│  WebSerialTransport   │           │ WebBluetoothTransport │
│   (USB/串口)          │           │      (BLE)            │
└───────────────────────┘           └───────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                   TransportInterface                         │
│              (抽象基类)                                       │
└─────────────────────────────────────────────────────────────┘

传输层

应用使用传输抽象层,支持多种连接方式:

  • TransportInterface — 定义传输契约的抽象基类
  • WebBluetoothTransport — 基于 Web Bluetooth API 的 BLE 实现
  • WebSerialTransport — 基于 Web Serial API 的 USB 串口实现
  • TransportFactory — 用于创建和选择传输的工厂
  • SerialProtocolAdapter — 串口通信协议适配器,带 CRC-16 组帧

详见串口传输文档(英文)。


协议栈

Web Bluetooth / Web Serial   ← 传输层(可选)
        ↓
WebBluetoothTransport         ← BLE 连接(service 0xFFE0, characteristic 0xFFE1)
WebSerialTransport            ← USB 串口连接(可配置波特率)
        ↓
Shx8800Session                ← 会话协议(握手、块读写)
        ↓
BootImageSession              ← 开机图片写频协议(8x00 + Pro)
        ↓
shx8800.js                    ← 二进制协议编解码
        ↓
bootImage.js                  ← RGB565、CRC-16、图像转换
        ↓
AppContext (React)            ← 全局状态(对讲机镜像、连接状态)
        ↓
Pages                         ← UI 视图(信道、设置、备份等)

开机图片写入

参考 senhaix-freq-writer-enhanced 项目实现,支持两种协议:

8x00 协议(8600/8800)

  • 握手:PROGROMSHXU → 等待 0x06 ACK → 发送 0x46 → 等待就绪响应
  • 首包(68 字节):头部 [0x17, 0x09, 0x22, 0x30],图像数据 48 字节(偏移 16)
  • 后续包(68 字节):头部 [0x49, 计数器高, 计数器低, 0x40],图像数据 64 字节(偏移 4)
  • 每包发送后等待 0x06 ACK 确认

Pro 协议(8600 Pro/8800 Pro)

  • 握手:同上,发送 0x44 进入 Pro 模式
  • 使用 0xA5 帧头 + CRC-16(CRC-CCITT 0x1021)打包
  • 命令:握手(0x02) → 设置地址(0x03, Flash 0x10000) → 擦除(0x04) → 写入(0x57, 1024 字节块) → 结束(0x06)
  • 每包带有 CRC-16 校验,确保数据完整性

图像格式

  • 分辨率:128 × 128 像素
  • 颜色格式:RGB565(16 位,5R + 6G + 5B)
  • 数据大小:32,768 字节
  • 支持拖拽上传 PNG/JPEG/GIF/WebP/BMP,自动缩放至 128×128

测试

测试使用 Node.js 内置测试运行器,覆盖协议编解码、握手、开机图片探测、开机图片写入、信道编辑、备份往返及机型元数据。

npm test

共 30 个测试用例:

  • shx8800.js:协议编解码、信道解析、备份导入导出
  • bootImage.js:RGB565 编解码、CRC-16、Pro 数据包构建与解析
  • BootImageSession.js:8x00 数据包构建、Pro 机型检测
  • BootImageProbeSession.js:握手探测、响应解析

开发说明

当前版本参考 K5Web 的后台结构,用纯 Web Bluetooth 打通 SHX8800 的连接、自动握手、读频、写频、备份恢复和信道编辑主流程。

已知限制

  • Safari 和 iOS 浏览器不支持 Web Serial 或 Web Bluetooth
  • Pro 协议在 BLE 环境下跳过波特率切换步骤
  • 开机图片写入功能需结合实际设备进行验证
  • 建议先导出 JSON 备份,便于异常时恢复

浏览器兼容性

浏览器 版本 Web Bluetooth Web Serial 备注
Chrome 89+ 推荐
Edge 89+ 基于 Chromium
Firefox 151+ 仅串口
Opera 76+ 基于 Chromium
Safari 全部 不支持
Chrome Android 149+ 移动端支持
Safari iOS 全部 不支持

要求:

  • HTTPS 或 localhost(安全上下文)
  • 需要用户手势触发连接

详见 Web Serial API 调研(英文)。


文档


许可证

MIT License


致谢

About

Browser-based radio programming tool for SHX8800 series walkie-talkies via Web Bluetooth | 基于浏览器的森海克斯 SHX8800 系列对讲机编程工具(及兼容机型)。通过 Web Bluetooth 无线连接,完成读频、编辑、写频——无需安装任何桌面软件。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages