using System; using System.Text; namespace TeamAAS.Communication.LightSources { /// /// KCS 光源协议命令构造器 /// 适用于 KDC-12V60W-4T / KDC3-24V300W-8T 等型号 /// public static class KCSLightProtocol { /// /// 读取指定通道亮度 /// KDC4: SA# KDC8: SRA# /// public static string BuildReadCommand(int channelIndex, bool useSR = false) { char ch = (char)('A' + channelIndex); return useSR ? $"SR{ch}#" : $"S{ch}#"; } /// /// 设置指定通道亮度 /// SA0120# (通道A, 亮度120) /// public static string BuildSetBrightnessCommand(int channelIndex, int brightness) { char ch = (char)('A' + channelIndex); int br = Math.Max(0, Math.Min(999, brightness)); return $"S{ch}0{br.ToString("D3")}#"; } /// /// 全开所有通道(使用当前亮度值) /// S{DDD}T{DDD}T...C# /// public static string BuildTurnOnAllCommand(int channelCount, int defaultBrightness = 120) { var sb = new StringBuilder("S"); int br = Math.Max(0, Math.Min(999, defaultBrightness)); for (int i = 0; i < channelCount; i++) { sb.Append(br.ToString("D3")); sb.Append("T"); } sb.Append("C#"); return sb.ToString(); } /// /// 全关所有通道 /// S000F000F...C# /// public static string BuildTurnOffAllCommand(int channelCount) { var sb = new StringBuilder("S"); for (int i = 0; i < channelCount; i++) { sb.Append("000"); sb.Append("F"); } sb.Append("C#"); return sb.ToString(); } /// /// 解析读取响应,返回亮度值 /// 响应格式: ?XDDD (5字符) 或 7字符 /// public static int ParseReadResponse(string response) { if (string.IsNullOrEmpty(response)) return 0; try { if (response.Length == 5) { string val = response.Substring(2, 3); if (int.TryParse(val, out int br)) return br; } else if (response.Length == 7) { string val = response.Substring(3, 3); if (int.TryParse(val, out int br)) return br; } } catch { } return 0; } /// /// 验证设置响应是否成功 /// 成功: 返回通道字母 (如 "A") 或 "!" /// public static bool VerifySetResponse(string response, int channelIndex) { if (string.IsNullOrEmpty(response)) return false; string trimmed = response.Trim(); if (trimmed == "!") return true; return trimmed == ((char)('A' + channelIndex)).ToString(); } /// /// 验证全开/全关响应 /// 成功: 返回 "!" /// public static bool VerifyAllResponse(string response) { return !string.IsNullOrEmpty(response) && response.Trim() == "!"; } } }