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() == "!";
}
}
}