根据新版本调整set_pattern:0~65535

This commit is contained in:
xinzhu.yin
2026-07-07 18:59:44 +08:00
parent 9fa811a9eb
commit 32aaef1c0f
24 changed files with 3016 additions and 279 deletions

View File

@@ -2,6 +2,7 @@
from __future__ import annotations
import logging
import os
from app.ucd.domain import (
Colorimetry,
@@ -33,6 +34,21 @@ class SignalService:
def __init__(self, device: IUcdDevice, bus: EventBus):
self._dev = device
self._bus = bus
self._pg_status_log_callback = None
def set_pg_status_log_callback(self, callback) -> None:
"""设置 PG 状态日志回调:``callback(lines: list[str]) -> None``。"""
self._pg_status_log_callback = callback
def _notify_pattern_sent(self, pattern_hint: str | None = None) -> None:
if not self._pg_status_log_callback:
return
try:
lines = self.get_pattern_generator_status_lines(pattern_hint)
if lines:
self._pg_status_log_callback(lines)
except Exception:
log.exception("SignalService._notify_pattern_sent failed")
# -- 高层接口 ------------------------------------------------
@@ -59,17 +75,30 @@ class SignalService:
self._dev.apply()
return changed
def send_pattern(self, pattern: PatternSpec) -> None:
def send_pattern(
self,
pattern: PatternSpec,
*,
pattern_hint: str | None = None,
) -> None:
"""在已 configure 的信号上仅更新图案后 apply。"""
log.info("SignalService.send_pattern pattern=%s", pattern.kind.value)
self._dev.set_pattern(pattern)
self._dev.apply()
self._notify_pattern_sent(pattern_hint)
def send_solid_rgb(self, rgb: tuple[int, int, int] | list[int]) -> None:
self.send_pattern(solid_rgb_pattern(rgb))
rgb_list = list(rgb)
self.send_pattern(
solid_rgb_pattern(rgb_list),
pattern_hint=f"Solid Color {rgb_list}",
)
def send_image(self, path: str) -> None:
self.send_pattern(image_pattern(path))
self.send_pattern(
image_pattern(path),
pattern_hint=os.path.basename(path) or "Image File",
)
def update_signal_format(
self,
@@ -127,9 +156,26 @@ class SignalService:
"""按 :class:`PQConfig` 写入色彩 / Timing / 当前 Pattern不 apply 输出)。"""
return bool(self._dev.set_ucd_params(config))
def send_pattern_params(self, params) -> bool:
def send_pattern_params(
self,
params,
*,
pattern_hint: str | None = None,
) -> bool:
"""以 ``params`` 更新当前 pattern 的参数并 apply。"""
return bool(self._dev.send_current_pattern_params(params))
ok = bool(self._dev.send_current_pattern_params(params))
if ok:
self._notify_pattern_sent(pattern_hint)
return ok
def get_pattern_generator_status_lines(
self,
pattern_hint: str | None = None,
) -> list[str]:
getter = getattr(self._dev, "get_pattern_generator_status_lines", None)
if not callable(getter):
return []
return list(getter(pattern_hint) or [])
def apply_and_run(self, config, pattern_params) -> bool:
"""``set_ucd_params`` + ``set_pattern`` + ``run`` 的复合操作。"""
@@ -380,7 +426,13 @@ class PatternService:
raise IndexError(f"pattern 索引越界: {index}")
pattern_param = session.pattern_params[index]
if not self.app.signal_service.send_pattern_params(pattern_param):
pattern_hint = None
if session.display_names and index < len(session.display_names):
pattern_hint = session.display_names[index]
if not self.app.signal_service.send_pattern_params(
pattern_param,
pattern_hint=pattern_hint,
):
raise RuntimeError(f"发送 pattern 失败: {index}")
return pattern_param