| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace TeamAAS_VP.Core.Lights
- {
- public class KCSLightController : LightControllerBase
- {
- private readonly ICommunicationProtocol _protocol;
- private readonly Encoding _encoding;
- public KCSLightController(int id, ICommunicationProtocol protocol,int channelCount)
- : base(id, channelCount)
- {
- _protocol = protocol;
- _encoding = Encoding.ASCII;
- }
- protected override ILightChannel CreateChannel(int index)
- {
- return new KCSLightChannel(index, this);
- }
- public override async Task<bool> ConnectAsync()
- {
- var connected = await _protocol.ConnectAsync();
- if (connected)
- {
- IsConnected = true;
- await InitializeAsync();
- }
- return connected;
- }
- public override async Task DisconnectAsync()
- {
- await _protocol.DisconnectAsync();
- IsConnected = false;
- }
- public override async Task<bool> InitializeAsync()
- {
- try
- {
- // 初始化操作
- await GetChannelBrightnessInternal(0); // 测试通信
- return true;
- }
- catch
- {
- return false;
- }
- }
- public override async Task<bool> TurnOnAllAsync()
- {
- StringBuilder commandBuilder = new StringBuilder("S");
- for (int i = 0; i < ChannelCount; i++)
- {
- var channel = (KCSLightChannel)ChannelsInternal[i];
- commandBuilder.Append(channel.CurrentBrightness.ToString("D3"));
- commandBuilder.Append("T");
- }
- commandBuilder.Append("C#");
- var response = await SendCommandAsync(commandBuilder.ToString());
- return response?.Trim() == "!";
- }
- public override async Task<bool> TurnOffAllAsync()
- {
- StringBuilder commandBuilder = new StringBuilder("S");
- for (int i = 0; i < ChannelCount; i++)
- {
- commandBuilder.Append("000");
- commandBuilder.Append("F");
- }
- commandBuilder.Append("C#");
- var response = await SendCommandAsync(commandBuilder.ToString());
- return response?.Trim() == "!";
- }
- internal async Task<string> SendCommandAsync(string command)
- {
- var data = _encoding.GetBytes(command);
- var response = await _protocol.SendAndReceiveAsync(data, 1000);
- return _encoding.GetString(response);
- }
- internal async Task<int> GetChannelBrightnessInternal(int channelIndex)
- {
- string command = $"S{(char)('A' + channelIndex)}#";
- var response = await SendCommandAsync(command);
- if (response.Length == 5)
- {
- string valueStr = response.Substring(2, 3);
- if (int.TryParse(valueStr, out int brightness))
- {
- return brightness;
- }
- }
- return 0;
- }
- internal async Task<bool> SetChannelBrightnessInternal(int channelIndex, int brightness)
- {
- string command = $"S{(char)('A' + channelIndex)}0{brightness.ToString("D3")}#";
- var response = await SendCommandAsync(command);
- return response?.Trim() == ((char)('A' + channelIndex)).ToString();
- }
- }
- }
|