from lightsync.devices.base import BaseDevice from lightsync.models.device import DeviceConfig class SK6812Device(BaseDevice): """SK6812 RGBW LED strip — 4 bytes per pixel (R, G, B, W).""" def __init__(self, config: DeviceConfig): super().__init__(config) @property def bytes_per_pixel(self) -> int: return 4 def encode_frame(self, pixels: list[tuple]) -> bytes: """Encode pixel list to SK6812 frame bytes. Each pixel: (r, g, b, w) tuple — 4 bytes per LED. """ buf = bytearray() for pixel in pixels: r, g, b = pixel[0], pixel[1], pixel[2] w = pixel[3] if len(pixel) > 3 else 0 buf.extend([r & 0xFF, g & 0xFF, b & 0xFF, w & 0xFF]) return bytes(buf) def encode_animation_cmd(self, animation: str, params: dict) -> bytes: """Stub — Phase 3 implements real animation command encoding.""" return b""