90 lines
2.7 KiB
C#
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
|
|
} |