C00225155-02/C00225155/MegaRobo.C00225155/MegaRobo.C00225155.ControlD.../CameraLightService.cs

90 lines
2.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MegaRobo.Connections;
using MegaRobo.Contract;
using MegaRobo.Contract.Abstractions;
using MegaRobo.Logger;
namespace MegaRobo.C00225155.ControlDevices;
public class CameraLightService : DeviceBase, IConnection, IDisposable, IConnectionAsync
{
public override async Task<string> Initialize(ICoreService coreService, params object[] args)
{
await Task.Delay(0);
try
{
string portName = "COM1";
if(args is [string portIndex, ..])
{
portName = portIndex;
}
this.CoreService = coreService;
this.SerialPortManger = new SerialPortManger();
bool isSuccess = this.SerialPortManger.Open(portName);
this.SerialPortManger.SetPort(portName, 19200, DataBits.Eight, StopBits.One, Parity.None);
// bool isSuccess = this.SerialPortManger.Open();
// int retCode = ControllerDllCSharp.ClassLibControllerDll.CreateSerialPort(3, ref this._controllerHandle); //创建串口
this.Logger.LogDebug($"打开串口Com3{(isSuccess ? "" : "")}");
} catch(Exception ex)
{
this.Logger.LogException(ex);
}
return string.Empty;
}
#region properties
public SerialPortManger SerialPortManger { get; set; }
public ConnectionState ConnectionState { get; set; }
public event EventHandler<ConnectionState> ConnectChanged;
public TimeSpan Timeout { get; set; }
public bool IsConnected => SerialPortManger?.IsOpen ?? false;
#endregion properties
#region functions
public async Task<ConnectionState> CheckConnected()
{
await Task.Delay(0);
return ConnectionState.IsConnected;
}
public async Task<ConnectionState> ReconnectAsync()
{
await Task.Delay(0);
return ConnectionState.IsConnected;
}
public async Task SetValue(byte value, params int[] channelIndexs)
{
if(channelIndexs.Length == 0)
channelIndexs = new[] { 1, 2, 3, 4 };
var channelChars = new[] { "0", "A", "B", "C", "D" };
List<string> cmds = channelIndexs.Select(index => $"S{channelChars[index]}{value:D4}#").ToList();
string cmdLine = string.Join("", cmds);
var code = await this.SerialPortManger.WriteAndGetReplyAsync(cmdLine, TimeSpan.FromSeconds(1.5));
this.Logger.LogDebug($"设置光源cmd:{cmds} result:{code}");
}
public void Close()
{
this.SerialPortManger.Close();
}
public void Dispose()
{
// TODO release managed resources here
}
#endregion functions
#region events
#endregion events
}