111 lines
3.0 KiB
C#
111 lines
3.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Timers;
|
|
using System.Windows.Forms;
|
|
using Newtonsoft.Json.Linq;
|
|
using static ControllerDllCSharp.ClassLibControllerDll;
|
|
namespace AssistClient.Device
|
|
{
|
|
public class LightDev : IDisposable
|
|
{
|
|
private long portHandle;
|
|
/// <summary>
|
|
/// 光源亮度值
|
|
/// </summary>
|
|
public int DigitalValue { get; private set; }
|
|
|
|
public Action<WarningEnum, string> WarningEvent;
|
|
/// <summary>
|
|
/// 光源亮度值<通道号,亮度值0-255>
|
|
/// </summary>
|
|
public Action<int, int> DigitalEvent;
|
|
/// <summary>
|
|
/// 是否打开设备成功
|
|
/// </summary>
|
|
public bool IsInit { get; private set; } = false;
|
|
//private System.Timers.Timer timer = new System.Timers.Timer();
|
|
public LightDev()
|
|
{
|
|
}
|
|
public bool start(int comNum)
|
|
{
|
|
try
|
|
{
|
|
int result = CreateSerialPort(comNum, ref portHandle); //创建串口
|
|
if (result != SUCCESS)
|
|
throw new Exception($"打开光源设备(COM{comNum})失败: {result}");
|
|
|
|
IsInit = true;
|
|
//timer.Elapsed += Timer_Elapsed;
|
|
//timer.Interval = 100;
|
|
//timer.Enabled = true;
|
|
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
WarningEvent?.Invoke(WarningEnum.High, ex.Message);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
public void stop()
|
|
{
|
|
if (!IsInit) return;
|
|
try
|
|
{
|
|
IsInit = false;
|
|
//timer.Elapsed -= Timer_Elapsed;
|
|
//timer.Stop();
|
|
int result = ReleaseSerialPort(portHandle); //断开串口
|
|
}
|
|
catch { }
|
|
}
|
|
public int getDigitalValue(int channelIndex)
|
|
{
|
|
if (!IsInit) return -1;
|
|
|
|
int value = 0;
|
|
if (GetDigitalValue(ref value, channelIndex, portHandle) != SUCCESS)
|
|
return -1;
|
|
|
|
DigitalEvent?.Invoke(channelIndex, value);
|
|
return value;
|
|
}
|
|
/// <summary>
|
|
/// 设置亮度值
|
|
/// </summary>
|
|
/// <param name="channelIndex">通道</param>
|
|
/// <param name="value">0-255</param>
|
|
/// <returns></returns>
|
|
public bool setDigitalValue(int channelIndex, int value)
|
|
{
|
|
if (!IsInit) return false;
|
|
Task.Factory.StartNew(() => {
|
|
if (SetDigitalValue(channelIndex, value, portHandle) != SUCCESS)
|
|
return;// false;
|
|
});
|
|
|
|
return true;
|
|
}
|
|
|
|
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
|
|
{
|
|
if (!IsInit) return;
|
|
|
|
}
|
|
|
|
|
|
public void Dispose()
|
|
{
|
|
stop();
|
|
}
|
|
}
|
|
} |