Merge remote-tracking branch 'origin/master'

This commit is contained in:
tonycao 2026-09-12 09:10:46 +08:00
commit a1d709a62a
2 changed files with 16 additions and 4 deletions

View File

@ -200,7 +200,8 @@ fn rdm_region(b: &[u8]) -> Option<(bool, &[u8])> {
if g16(b, 0x18) != 0x0002 { return None; }
if &b[0x1A..0x1E] != b"Butl" { return None; }
let rlen = g16(b, 0x28) as usize;
if b.len() < 0x2A + rlen { return None; }
// rlen=0 = 42B 事件计数遥测帧 (真机有事件时 ~115ms 一帧), 非 RDM 载荷
if rlen == 0 || b.len() < 0x2A + rlen { return None; }
let d = &b[0x2A..0x2A + rlen];
Some((d[0] == 0xAA, d))
}

View File

@ -170,11 +170,22 @@ fn main() {
return;
}
"hostdemo" => {
// hostdemo [目标IP] [秒] — 主机侧等效示例: 认领真机 + RDM 发现 + 加密 DMX 控制
// 源 IP 固定 192.168.123.113 (真机 .1 的 AECH 固件过滤); 秒=0 只做认领+RDM 不发 DMX
// hostdemo [目标IP] [秒] [源IP] — 主机侧等效示例: 认领真机 + RDM 发现 + 加密 DMX 控制
// 源 IP: 第4参 > HOSTDEMO_SRC env > 自动探测 (UDP connect 本地地址) > 0.0.0.0。
// 旧台架固定 192.168.123.113 (真机 .1 的 AECH 固件过滤); 仿真端不过滤, 自动探测即可
let ip = std::env::args().nth(2).unwrap_or_else(|| "192.168.123.1".into());
let secs: u64 = std::env::args().nth(3).and_then(|s| s.parse().ok()).unwrap_or(30);
hostdemo::run(&ip, "192.168.123.113", secs);
let bind_ip = std::env::args().nth(4)
.or_else(|| std::env::var("HOSTDEMO_SRC").ok())
.unwrap_or_else(|| {
if let Ok(s) = std::net::UdpSocket::bind("0.0.0.0:0") {
if s.connect(format!("{}:31772", ip)).is_ok() {
if let Ok(a) = s.local_addr() { return a.ip().to_string(); }
}
}
"0.0.0.0".into()
});
hostdemo::run(&ip, &bind_ip, secs);
return;
}
"analyze" => {