支持通过 UART 手动逐台添加相机再启动输出

保留已连接相机,添加失败不占用编号,并要求输出停止后才能新增。通过 23 项回归测试、真实 SDK 的 1–4 路逐台添加验证、Ruff 和文档检查。
This commit is contained in:
ykcheungab
2026-10-14 15:49:58 +08:00
parent 07339c3374
commit 133a98e418
5 changed files with 422 additions and 330 deletions
+7 -3
View File
@@ -55,9 +55,13 @@ def main():
open_runtime = partial(FingerRuntime.open, map_cache=str(scratch / "uv-map.npz"))
with patch.object(FingerRuntime, "open", side_effect=open_runtime):
for count in range(1, 5):
bank = FingerSensorBank(sources[:count])
bank = FingerSensorBank()
try:
bank.connect_all()
for source in sources[:count]:
existing = dict(bank.runtimes)
bank.add(source)
assert all(bank.runtimes[i] is runtime for i, runtime in existing.items())
assert len(bank.read_all()) == len(bank.runtimes)
runtimes = list(bank.runtimes.values())
for left, right in itertools.combinations(runtimes, 2):
assert left.capture is not right.capture
@@ -67,7 +71,7 @@ def main():
readings = bank.read_all()
assert [r.sensor_id for r in readings] == list(range(1, count + 1))
assert all(np.isfinite([r.normal, r.shear_x, r.shear_y]).all() for r in readings)
print(f"PASS {count} sources: independent captures/processors, 3 complete rounds", flush=True)
print(f"PASS {count} sources: incremental add/read, independent states, 3 final rounds", flush=True)
finally:
bank.close()
assert all(runtime.capture is None for runtime in runtimes)