177 lines
5.7 KiB
C#
177 lines
5.7 KiB
C#
/*
|
|
* Copyright (c) 2025 LG Electronics Inc.
|
|
* SPDX-License-Identifier: LicenseRef-LGE-Proprietary
|
|
*/
|
|
using Aurora.Api;
|
|
using Hermes;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace VisionLight {
|
|
/// <summary>
|
|
/// !!! 반드시 UDP로 통신할 해야 함 !!!
|
|
/// [스트로브 조명 컨트롤러 - 8CH / 소켓 통신]
|
|
/// Range : (0,1000)
|
|
/// SocketProtocol : TCP or UDP
|
|
/// IpAddress : 192.168.0.231 (예시)
|
|
/// PortNumber : 50000 (예시)
|
|
/// </summary>
|
|
public class Light_LVS_ES08_Socket : LightBase_Socket {
|
|
internal const byte CMD_START_CODE = 0x01;
|
|
internal const byte CMD_END_CODE = 0x04;
|
|
|
|
internal const byte CMD_OP_CODE_WRITE = 0x00;
|
|
|
|
internal const byte LENGTH_DATA_MSG = 0x01;
|
|
internal const byte LENGTH_LEVEL_DATA_MSG = 0x02;
|
|
|
|
internal const byte ADDR_PAGE_SELECT = 0x3C;
|
|
internal const byte ADDR_CHANNEL_SELECT = 0x20;
|
|
internal const byte ADDR_STEP_VALUE = 0x28;
|
|
|
|
internal const byte LENGTH_SET_PAGE_REQUEST_MSG = 6;
|
|
internal const byte LENGTH_SET_CHANNEL_REQUEST_MSG = 6;
|
|
internal const byte LENGTH_SET_LEVEL_REQUEST_MSG = 7;
|
|
/// <summary>
|
|
/// LVS ES08 Socket 생성자
|
|
/// </summary>
|
|
/// <param name="deviceId">디바이스 ID</param>
|
|
public Light_LVS_ES08_Socket(string deviceId) : base(deviceId) {
|
|
DeviceId = deviceId;
|
|
}
|
|
/// <summary>
|
|
/// Set On Implement
|
|
/// </summary>
|
|
/// <param name="channel">채널</param>
|
|
/// <returns>Light 결과 값</returns>
|
|
protected override eLightResult SetOnImpl(int channel) {
|
|
SetLevelImpl(LastChLevels[channel], channel);
|
|
return eLightResult.OK;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Set Off Implement
|
|
/// </summary>
|
|
/// <param name="channel">채널</param>
|
|
/// <returns>Light 결과 값</returns>
|
|
protected override eLightResult SetOffImpl(int channel) {
|
|
SetLevelImpl(0, channel);
|
|
return eLightResult.OK;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Set Level Implement
|
|
/// </summary>
|
|
/// <param name="level">레벨</param>
|
|
/// <param name="channel">채널</param>
|
|
/// <returns>Light 결과 값</returns>
|
|
protected override eLightResult SetLevelImpl(int level, int channel) {
|
|
try {
|
|
lock (LockThis) {
|
|
if (PageSelect(1) == E1.OK) {
|
|
//page의 경우 일단 1로 설정
|
|
if (ChannelSelect(channel) == E1.OK) {
|
|
if (SendData_SetLevel(level) == E1.OK) {
|
|
return eLightResult.OK;
|
|
}
|
|
else {
|
|
return eLightResult.NG;
|
|
}
|
|
}
|
|
else {
|
|
return eLightResult.NG;
|
|
}
|
|
}
|
|
else {
|
|
return eLightResult.NG;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e) {
|
|
LOG.FuncE(e.Message);
|
|
return eLightResult.NG;
|
|
}
|
|
}
|
|
|
|
private int PageSelect(int page) {
|
|
try {
|
|
byte[] sendData = CreatePageSelectReqMsg(page);
|
|
SocketConn.Send(sendData);
|
|
|
|
return E1.OK;
|
|
}
|
|
catch (Exception e) {
|
|
LOG.FuncE(e.Message);
|
|
}
|
|
return E1.GENERIC;
|
|
}
|
|
|
|
private byte[] CreatePageSelectReqMsg(int page) {
|
|
byte[] requestMsg = new byte[LENGTH_SET_PAGE_REQUEST_MSG];
|
|
requestMsg[0] = CMD_START_CODE;
|
|
requestMsg[1] = CMD_OP_CODE_WRITE;
|
|
requestMsg[2] = LENGTH_DATA_MSG;
|
|
requestMsg[3] = ADDR_PAGE_SELECT;
|
|
requestMsg[4] = (byte)page;
|
|
requestMsg[5] = CMD_END_CODE;
|
|
|
|
return requestMsg;
|
|
}
|
|
|
|
private int ChannelSelect(int channel) {
|
|
try {
|
|
byte[] sendData = CreateChannelSelectReqMsg(channel);
|
|
SocketConn.Send(sendData);
|
|
|
|
return E1.OK;
|
|
}
|
|
catch (Exception e) {
|
|
LOG.FuncE(e.Message);
|
|
}
|
|
return E1.GENERIC;
|
|
}
|
|
|
|
private byte[] CreateChannelSelectReqMsg(int channel) {
|
|
byte[] requestMsg = new byte[LENGTH_SET_CHANNEL_REQUEST_MSG];
|
|
requestMsg[0] = CMD_START_CODE;
|
|
requestMsg[1] = CMD_OP_CODE_WRITE;
|
|
requestMsg[2] = LENGTH_DATA_MSG;
|
|
requestMsg[3] = ADDR_CHANNEL_SELECT;
|
|
requestMsg[4] = (byte)channel;
|
|
requestMsg[5] = CMD_END_CODE;
|
|
|
|
return requestMsg;
|
|
}
|
|
|
|
private int SendData_SetLevel(int level) {
|
|
try {
|
|
byte[] sendData = CreateSetLevelReqMsg(level);
|
|
SocketConn.Send(sendData);
|
|
|
|
return E1.OK;
|
|
}
|
|
catch (Exception e) {
|
|
LOG.FuncE(e.Message);
|
|
}
|
|
|
|
return E1.GENERIC;
|
|
}
|
|
|
|
private byte[] CreateSetLevelReqMsg(int level) {
|
|
byte[] requestMsg = new byte[LENGTH_SET_LEVEL_REQUEST_MSG];
|
|
requestMsg[0] = CMD_START_CODE;
|
|
requestMsg[1] = CMD_OP_CODE_WRITE;
|
|
requestMsg[2] = LENGTH_LEVEL_DATA_MSG;
|
|
requestMsg[3] = ADDR_STEP_VALUE;
|
|
requestMsg[4] = (byte)(level % 256);
|
|
requestMsg[5] = (byte)(level / 256);
|
|
requestMsg[6] = CMD_END_CODE;
|
|
|
|
return requestMsg;
|
|
}
|
|
}
|
|
}
|