177 lines
5.5 KiB
C#
177 lines
5.5 KiB
C#
using Aurora.Api.Devices;
|
|
using Hermes;
|
|
using System;
|
|
using System.Text;
|
|
|
|
namespace VisionLight {
|
|
/// <summary>
|
|
/// [상시 조명 컨트롤러 - 12CH / 시리얼 통신]
|
|
/// Range : (0,255) or (0,512)
|
|
/// Baudrate : 19200 bps
|
|
/// DataBit : 8 bit
|
|
/// StopBit : 1 bit
|
|
/// ParityBit : None
|
|
/// </summary>
|
|
internal class Light_TSM_P12RV2 : LightBase_Serial {
|
|
public readonly string STX = "" + (char)0x2;
|
|
public readonly string ETX = "" + (char)0x3;
|
|
public readonly string CMD_ON = "ON";
|
|
public readonly string CMD_OFF = "ON"; // Off여도 Cmd가 "ON"임에 주의
|
|
public readonly string CMD_ALL_ON = "ALON";
|
|
public readonly string CMD_ALL_OFF = "ALON"; // All Off여도 Cmd가 "ALON"임에 주의
|
|
public readonly string CMD_LEVEL = "WR";
|
|
public readonly string CMD_ALL_LEVEL = "ALWR";
|
|
public readonly string CMD_READ_LEVEL = "RD";
|
|
//public readonly string CMD_SAVE_LEVEL = "SV";
|
|
|
|
public Light_TSM_P12RV2(string deviceId) : base(deviceId) {
|
|
}
|
|
|
|
#region Set On (Single or All)
|
|
protected override eLightResult SetOnImpl(int channel) {
|
|
lock (LockThis) {
|
|
if (SendData_SetOn(channel) == E1.OK) {
|
|
return eLightResult.OK;
|
|
}
|
|
else {
|
|
return eLightResult.NG;
|
|
}
|
|
}
|
|
}
|
|
|
|
private int SendData_SetOn(int channel) {
|
|
try {
|
|
byte[] sendData = CreateSetOnReqMsg(channel);
|
|
SerialConn.Write(sendData, sendData.Length);
|
|
|
|
return E1.OK;
|
|
}
|
|
catch (Exception e) {
|
|
LOG.FuncE(e.Message);
|
|
}
|
|
|
|
return E1.GENERIC;
|
|
}
|
|
|
|
private byte[] CreateSetOnReqMsg(int channel) {
|
|
string msg = "";
|
|
if (channel != -1) {
|
|
// <STX>01ON1<ETX> (Single)
|
|
msg = string.Format("{0}{1:00}{2}{3:D1}{4}", STX, channel, CMD_ON, 1, ETX);
|
|
}
|
|
else {
|
|
// <STX>ALON1<ETX> (All)
|
|
msg = string.Format("{0}{1}{2:D1}{3}", STX, CMD_ALL_ON, 1, ETX);
|
|
}
|
|
|
|
return Encoding.UTF8.GetBytes(msg);
|
|
}
|
|
#endregion
|
|
|
|
#region Set Off (Single or All)
|
|
protected override eLightResult SetOffImpl(int channel) {
|
|
lock (LockThis) {
|
|
if (SendData_SetOff(channel) == E1.OK) {
|
|
return eLightResult.OK;
|
|
}
|
|
else {
|
|
return eLightResult.NG;
|
|
}
|
|
}
|
|
}
|
|
|
|
private int SendData_SetOff(int channel) {
|
|
try {
|
|
byte[] sendData = CreateSetOffReqMsg(channel);
|
|
SerialConn.Write(sendData, sendData.Length);
|
|
|
|
return E1.OK;
|
|
}
|
|
catch (Exception e) {
|
|
LOG.FuncE(e.Message);
|
|
}
|
|
|
|
return E1.GENERIC;
|
|
}
|
|
|
|
private byte[] CreateSetOffReqMsg(int channel) {
|
|
string msg = "";
|
|
if (channel != -1) {
|
|
// <STX>01ON0<ETX> (Single)
|
|
msg = string.Format("{0}{1:00}{2}{3:D1}{4}", STX, channel, CMD_OFF, 0, ETX);
|
|
}
|
|
else {
|
|
// <STX>ALON0<ETX> (All)
|
|
msg = string.Format("{0}{1}{2:D1}{3}", STX, CMD_ALL_OFF, 0, ETX);
|
|
}
|
|
|
|
return Encoding.UTF8.GetBytes(msg);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Get Level
|
|
private int SendData_GetLevel(int channel) {
|
|
try {
|
|
// <STX>01RD120<ETX> (Single)
|
|
string msg = string.Format("{0}{1:00}{2}{3}", STX, channel, CMD_READ_LEVEL, ETX);
|
|
|
|
byte[] sendData = Encoding.UTF8.GetBytes(msg);
|
|
SerialConn.Write(sendData, sendData.Length); // READ 명령 이후에 값은 어떻게 받을 것인가?
|
|
|
|
// TEST CODE
|
|
byte[] readData = new byte[100];
|
|
SerialConn.Read(readData);
|
|
|
|
return E1.OK;
|
|
}
|
|
catch (Exception e) {
|
|
LOG.FuncE(e.Message);
|
|
}
|
|
|
|
return E1.GENERIC;
|
|
}
|
|
#endregion
|
|
|
|
#region Set Level (Single or All)
|
|
protected override eLightResult SetLevelImpl(int level, int channel) {
|
|
lock (LockThis) {
|
|
if (SendData_SetLevel(level, channel) == E1.OK) {
|
|
return eLightResult.OK;
|
|
}
|
|
else {
|
|
return eLightResult.NG;
|
|
}
|
|
}
|
|
}
|
|
|
|
private int SendData_SetLevel(int level, int channel) {
|
|
try {
|
|
byte[] sendData = CreateSetLevelReqMsg(level, channel);
|
|
SerialConn.Write(sendData, sendData.Length);
|
|
|
|
return E1.OK;
|
|
}
|
|
catch (Exception e) {
|
|
LOG.FuncE(e.Message);
|
|
}
|
|
|
|
return E1.GENERIC;
|
|
}
|
|
|
|
private byte[] CreateSetLevelReqMsg(int level, int channel) {
|
|
string msg = "";
|
|
if (channel != -1) {
|
|
// <STX>01WR120<ETX> (Single)
|
|
msg = string.Format("{0}{1:00}{2}{3:D3}{4}", STX, channel, CMD_LEVEL, level, ETX);
|
|
}
|
|
else {
|
|
// <STX>ALWR120<ETX> (All)
|
|
msg = string.Format("{0}{1}{2:D3}{3}", STX, CMD_ALL_LEVEL, level, ETX);
|
|
}
|
|
|
|
return Encoding.UTF8.GetBytes(msg);
|
|
}
|
|
#endregion
|
|
}
|
|
} |