From ac2fed8ee440bfd56c0fcf4d62dda68aa61c9d3c Mon Sep 17 00:00:00 2001 From: Tony Cao Date: Fri, 11 Sep 2026 21:17:46 +0800 Subject: [PATCH] feat: HOSTDEMO_KNOWN env to override show-mode fixture UID list (for emulated-Butler interop tests) --- src/hostdemo.rs | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/hostdemo.rs b/src/hostdemo.rs index 56a2844..b9835c2 100644 --- a/src/hostdemo.rs +++ b/src/hostdemo.rs @@ -503,11 +503,27 @@ pub fn run(target: &str, bind_ip: &str, secs: u64) { println!("[{}] 认领完成 B12=0x{:08x}; {}", label, bc, if is_show { "地址1-32 炫彩呼吸 (零模板纯自构造 DMX+RDM)" } else { "verbatim DMX + 模板 RDM" }); let rdm_t: Option> = base_rdm; - let known: [[u8; 6]; 3] = [ - [0x01, 0x07, 0x34, 0x67, 0x01, 0x25], - [0x01, 0x07, 0x34, 0x88, 0x09, 0x00], - [0x08, 0x99, 0x50, 0x00, 0x26, 0xc9], - ]; + // HOSTDEMO_KNOWN=uid12hex[,uid12hex...] 覆盖默认灯具清单 + // (用于对测仿真 Butler/其他 UID 的设备; 默认 = 台架 3 台真灯) + let known: Vec<[u8; 6]> = match std::env::var("HOSTDEMO_KNOWN") { + Ok(v) if !v.trim().is_empty() => v + .split(',') + .filter_map(|s| { + let s = s.trim(); + if s.len() != 12 { return None; } + let mut u = [0u8; 6]; + for i in 0..6 { + u[i] = u8::from_str_radix(&s[i * 2..i * 2 + 2], 16).ok()?; + } + Some(u) + }) + .collect(), + _ => vec![ + [0x01, 0x07, 0x34, 0x67, 0x01, 0x25], + [0x01, 0x07, 0x34, 0x88, 0x09, 0x00], + [0x08, 0x99, 0x50, 0x00, 0x26, 0xc9], + ], + }; let start = Instant::now(); let mut di = 0usize; let mut qseq: u16 = 0;