根据新版本调整set_pattern:0~65535
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user