docs: 新增 .qoder Repowiki 知识库文档
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* 从 motor/main.js 里原地抽出的**原有**链路,行为未改:
|
||||
* GET /system/status 探测 + 健康检查(lite/full 交替)
|
||||
* GET /motor/state?bin=1 电机状态(二进制,~408B)
|
||||
* GET /motor/state?bin=1 电机状态(二进制,27 槽满 ~2508B)
|
||||
* GET /can/feedback?lite=1 CAN 计数/总线状态
|
||||
* POST /can/send_batch 发送(唯一入口)
|
||||
* POST /can/send_burst 突发同时发送(多轴)
|
||||
@@ -52,6 +52,10 @@ export function createWifiTransport(ctx) {
|
||||
}
|
||||
|
||||
/* /motor/state?bin=1 二进制解析:协议见 ESP32 motor_state_handler。
|
||||
* 双版本兼容(设备固件与前端升级节奏不一定同步):
|
||||
* ver=1 v0.70:entry 76,data 32(CONFIG 在 44/48/52)
|
||||
* ver=2 v0.74:entry 92,data 48(字节 32~35 = InitStatus,CONFIG 后移到 60/64/68)
|
||||
* data 32B 时 decodeStatus 高位补 0 → initStatus=0,上层无需感知版本。
|
||||
* 返回与原 JSON 等价的对象 {have_data, age_ms, active_count, motors[]}。
|
||||
* data / config_data 保持 hex 字符串,让上层 hexToBytes 直接解析。 */
|
||||
function parseMotorStateBinary(ab) {
|
||||
@@ -59,7 +63,12 @@ export function createWifiTransport(ctx) {
|
||||
if (!ab || ab.byteLength < 12) return out;
|
||||
const dv = new DataView(ab);
|
||||
if (dv.getUint16(0, true) !== 0x4D53) return out; /* 'MS' */
|
||||
if (dv.getUint8(2) !== 1) return out; /* ver */
|
||||
const ver = dv.getUint8(2);
|
||||
if (ver !== 1 && ver !== 2) return out;
|
||||
const dataLen = (ver === 2) ? 48 : 32;
|
||||
const entry = 12 + dataLen + 8 + 24; /* 92 / 76(4+4+24 = config 段) */
|
||||
const cfgCntOff = 12 + dataLen; /* config_rx_count 相对 entry 起点 */
|
||||
const cfgSeqOff = cfgCntOff + 4;
|
||||
const flags = dv.getUint8(3);
|
||||
const age = dv.getUint32(4, true);
|
||||
const active = dv.getUint8(8);
|
||||
@@ -77,7 +86,7 @@ export function createWifiTransport(ctx) {
|
||||
for (let i = 0; i < len; i++) s += u8[start + i].toString(16).padStart(2, "0").toUpperCase();
|
||||
return s;
|
||||
};
|
||||
for (let i = 0; i < count && off + 76 <= ab.byteLength; i++) {
|
||||
for (let i = 0; i < count && off + entry <= ab.byteLength; i++) {
|
||||
out.motors.push({
|
||||
node: u8[off],
|
||||
ch: u8[off + 1],
|
||||
@@ -85,12 +94,12 @@ export function createWifiTransport(ctx) {
|
||||
dlc: u8[off + 3],
|
||||
rx_count: dv.getUint32(off + 4, true),
|
||||
seq: dv.getUint32(off + 8, true),
|
||||
data: hexOf(off + 12, 32),
|
||||
config_rx_count: dv.getUint32(off + 44, true),
|
||||
config_seq: dv.getUint32(off + 48, true),
|
||||
config_data: hexOf(off + 52, 24),
|
||||
data: hexOf(off + 12, dataLen),
|
||||
config_rx_count: dv.getUint32(off + cfgCntOff, true),
|
||||
config_seq: dv.getUint32(off + cfgSeqOff, true),
|
||||
config_data: hexOf(off + cfgSeqOff + 4, 24),
|
||||
});
|
||||
off += 76;
|
||||
off += entry;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user