| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- using System;
- using System.Text;
- namespace TeamAAS.Communication.LightSources
- {
- /// <summary>
- /// KCS 光源协议命令构造器
- /// 适用于 KDC-12V60W-4T / KDC3-24V300W-8T 等型号
- /// </summary>
- public static class KCSLightProtocol
- {
- /// <summary>
- /// 读取指定通道亮度
- /// KDC4: SA# KDC8: SRA#
- /// </summary>
- public static string BuildReadCommand(int channelIndex, bool useSR = false)
- {
- char ch = (char)('A' + channelIndex);
- return useSR ? $"SR{ch}#" : $"S{ch}#";
- }
- /// <summary>
- /// 设置指定通道亮度
- /// SA0120# (通道A, 亮度120)
- /// </summary>
- 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")}#";
- }
- /// <summary>
- /// 全开所有通道(使用当前亮度值)
- /// S{DDD}T{DDD}T...C#
- /// </summary>
- 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();
- }
- /// <summary>
- /// 全关所有通道
- /// S000F000F...C#
- /// </summary>
- 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();
- }
- /// <summary>
- /// 解析读取响应,返回亮度值
- /// 响应格式: ?XDDD (5字符) 或 7字符
- /// </summary>
- 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;
- }
- /// <summary>
- /// 验证设置响应是否成功
- /// 成功: 返回通道字母 (如 "A") 或 "!"
- /// </summary>
- 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();
- }
- /// <summary>
- /// 验证全开/全关响应
- /// 成功: 返回 "!"
- /// </summary>
- public static bool VerifyAllResponse(string response)
- {
- return !string.IsNullOrEmpty(response) && response.Trim() == "!";
- }
- }
- }
|