2026-01-26 14:51:28 +09:00

155 lines
4.7 KiB
C#

/*
* Copyright (c) 2025 LG Electronics Inc.
* SPDX-License-Identifier: LicenseRef-LGE-Proprietary
*/
using Aurora.Api;
using Aurora.Api.Devices;
using VisionCommon;
using Hermes;
namespace VisionLight {
/// <summary>
/// 시리얼 조명 베이스 클래스
/// </summary>
public abstract class LightBase_Serial : LightBase {
/// <summary> 시리얼 통신 </summary>
protected SerialConn SerialConn = null;
/// <summary>
/// 생성자
/// EquipmentInfo.SimulationMode로 시뮬레이션 상태를 설정한다.
/// </summary>
/// <param name="deviceId">디바이스 ID</param>
protected LightBase_Serial(string deviceId) : base(deviceId) {
LightConnType = eLightConnType.Serial;
}
/// <summary>
/// 생성자
/// </summary>
/// <param name="deviceId">디바이스 ID</param>
/// <param name="isSimul">시뮬레이션 상태</param>
protected LightBase_Serial(string deviceId, bool isSimul)
: base(deviceId, isSimul) {
LightConnType = eLightConnType.Serial;
}
/// <summary>
/// 디바이스 Activate
/// </summary>
/// <param name="config">디바이스 컨피그</param>
/// <returns></returns>
protected override int DoActivate(IDeviceConfig config) {
SetLightConfig(config as LightConfig);
InitLastChParams();
var lightConfig_Serial = (LightConfig_Serial)LightConfig;
if (IsSimul) {
return E1.OK;
}
else {
if (SerialConn == null) {
SerialConn = new SerialConn(DeviceId);
}
else if (SerialConn.IsPortOpen()) {
return E1.OK;
}
}
int res = SerialConn.Open(lightConfig_Serial.SerialConnConfig);
if (res == E1.OK) {
SetOnAllInternal(); // 시작시 모든 조명 On (Default)
}
return res;
}
/// <summary>
/// 디바이스 Deactivate
/// </summary>
/// <returns></returns>
protected override int DoDeactivate() {
ClearLastChParams();
if (EquipAdapter.Instance.EquipMode.IsSimulMode()) {
return E1.OK;
}
else {
if (SerialConn != null) {
return SerialConn.Close();
}
}
return E1.OK;
}
/// <summary>
/// 조명 켜기
/// </summary>
/// <param name="channel">채널 번호</param>
/// <returns>조명 제어 결과</returns>
public eLightResult SetOn(int channel = -1) {
if (!IsConnected()) {
return eLightResult.NG;
}
return base.SetOn(channel);
}
/// <summary>
/// 조명 끄기
/// </summary>
/// <param name="channel">채널 번호</param>
/// <returns>조명 제어 결과</returns>
public new eLightResult SetOff(int channel = -1) {
if (!IsConnected()) {
return eLightResult.NG;
}
return base.SetOff(channel);
}
/// <summary>
/// 조명 상태 가져오기
/// </summary>
/// <param name="channel">채널 번호</param>
/// <returns>조명 상태 (on : true, off : false)</returns>
public new bool GetOnOff(int channel) {
return base.GetOnOff(channel);
}
/// <summary>
/// 조명 값 가져오기
/// </summary>
/// <param name="channel">채널 번호</param>
/// <returns>조명 값</returns>
public new int GetLevel(int channel) {
if (!IsConnected()) {
return 0;
}
return base.GetLevel(channel);
}
/// <summary>
/// 조명 값 제어 (개별)
/// </summary>
/// <param name="level">레벨</param>
/// <param name="channel">채널 번호</param>
/// <returns>조명 제어 결과</returns>
public new eLightResult SetLevel(int level, int channel = -1) {
if (!IsConnected()) {
return eLightResult.NG;
}
return base.SetLevel(level, channel);
}
private bool IsConnected() {
if (EquipAdapter.Instance.EquipMode.IsSimulMode()) {
return true;
}
else if (SerialConn != null && SerialConn.IsConnected()) {
return true;
}
else {
return false;
}
}
}
}