fix(protocol): RXTX 命令通道切换到 331f(实机证据:1f1f 仅ACK不执行)+ 设备ID反解参数序校正(实机向量),150 测试全绿
This commit is contained in:
1 parent
4db823f207
commit
aebe0ad317
6 files changed
+33
-18
No files matched your search
+10
-7
@@ -4,11 +4,12 @@ from __future__ import annotations
|
||||
import datetime
|
||||
from typing import Iterator
|
||||
|
||||
# GATT(docs/protocol.md §1)
|
||||
# GATT(docs/protocol.md §1;实机 GATT 表 2026-07-28 经 bridge 诊断确认)
|
||||
EPD_SERVICE_UUID = "13187b10-eba9-a3ba-044e-83d3217d9a38"
|
||||
EPD_CHAR_UUID = "4b646063-6264-f3a7-8941-e65356ea82fe"
|
||||
RXTX_SERVICE_UUID = "00001f10-0000-1000-8000-00805f9b34fb"
|
||||
RXTX_CHAR_UUID = "00001f1f-0000-1000-8000-00805f9b34fb"
|
||||
RXTX_CHAR_UUID = "0000331f-0000-1000-8000-00805f9b34fb" # 活命令通道(h=57, notify+write+read)
|
||||
RXTX_CHAR_UUID_LEGACY = "00001f1f-0000-1000-8000-00805f9b34fb" # h=53 仅write,本设备不执行命令
|
||||
DEVICE_NAME_PREFIX = "NRF-"
|
||||
|
||||
BLOCK_PAYLOAD = 240 # my_step=480 hex 字符 = 240 数据字节
|
||||
@@ -179,9 +180,11 @@ def keygen_code(mac: bytes) -> bytes:
|
||||
|
||||
|
||||
def recover_mac_from_device_id(device_id: str) -> bytes:
|
||||
"""14hex 设备 ID → 6B MAC。
|
||||
ID = %02X(|MAC4-0x99|,|MAC5-0x99|,|MAC3-0x99|,|MAC2-0x99|,|MAC1-0x99|,|MAC0-0x99|,flags),
|
||||
flags bit i = MAC[i] ≥ 0x9A(证据 §4.2 生成函数 0x07FCA22C)。"""
|
||||
"""14hex 设备 ID → 6B MAC(NVDS 字节序)。
|
||||
ID = %02X(|MAC5-0x99|,|MAC4-0x99|,|MAC3-0x99|,|MAC2-0x99|,|MAC1-0x99|,|MAC0-0x99|,flags),
|
||||
flags bit i = MAC[i] ≥ 0x9A。
|
||||
证据:实机 2026-07-28 ID '81233F3C267112' ↔ 广播 18:BC:5A:5D:BF:28(校正
|
||||
firmware-analysis §4.2 中前两个参数的顺序,固件 snprintf 实参序为 MAC5,MAC4)。"""
|
||||
if len(device_id) != 14:
|
||||
raise ValueError("设备 ID 必须 14 个 hex 字符")
|
||||
try:
|
||||
@@ -189,8 +192,8 @@ def recover_mac_from_device_id(device_id: str) -> bytes:
|
||||
except ValueError:
|
||||
raise ValueError("设备 ID 含非 hex 字符") from None
|
||||
*v, flags = vals
|
||||
# v 顺序:MAC4,MAC5,MAC3,MAC2,MAC1,MAC0 → 反映射
|
||||
order = [4, 5, 3, 2, 1, 0]
|
||||
# v 顺序:MAC5,MAC4,MAC3,MAC2,MAC1,MAC0 → 反映射
|
||||
order = [5, 4, 3, 2, 1, 0]
|
||||
mac = [0] * 6
|
||||
for vi, idx in zip(v, order):
|
||||
if flags & (1 << idx):
|
||||
|
||||
Reference in new issue
Block a user