using Aurora.Api; using AuroraCellTracker.DaekhonCoporation; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using AuroraDeviceCommon.Utils; using Hermes; using System.Windows; namespace AuroraCellTracker { public enum eCellTrackerType { Daekhon, } public enum eMode { Queue, Callback } public class CellTracker : Device { Logger _Logger = new Logger("CellTracker"); public ICellTracker _CellTracker; public CellTrackerConfig _CellTrackerConfig { get; set; } private ICellTracker[] _MultiCellTrackerObj = new ICellTracker[4]; public ICellTracker[] MultiCellTrackerObj { get { return _MultiCellTrackerObj; } set { _MultiCellTrackerObj = value; } } public CellTracker(string deviceId, eCellTrackerType cellTrackerType) { DeviceId = deviceId; CommType = CommunicationType.Etc; Type = DeviceType.Etc; // 주의: 생성자에서 config 값을 가져오기 번거로우니 아래와 같이 처리 // 생성자에서는 시스템 세팅의 Simul 정보만 사용 (시리얼포트의 IsSimul 까지 처리됨) // 상위단(여기)에서 DoActivate 시, simul flag 를 최종 결정 // 방침: 시뮬은 상위단에서 처리하는 구조 (내부 _PowerMeter 사용안함 (= 시리얼포트 사용안함)) switch (cellTrackerType) { case eCellTrackerType.Daekhon: _CellTracker = new CellTrackerDaekhon(); break; default: _Logger.E("Error: CellTracker Type is not available."); return; } _CellTracker.SetCellInfo(string.Empty, string.Empty); } protected override int DoActivate(IDeviceConfig config) { _CellTrackerConfig = config as CellTrackerConfig; if (IsSimul) { return E1.OK; } // 예외처리 필요, 연결안됬을때 에러코드 받고 이런게 없는듯.. if (string.IsNullOrEmpty(_CellTrackerConfig.CellTrackerDllDirectory)) { _Logger.E(string.Format("Dll Directory is Empty")); return E1.ARGUMENT; } Application.Current.Dispatcher.InvokeAsync(() => { _CellTracker.Initialize(_CellTrackerConfig.CellTrackerMode, _CellTrackerConfig.CellTrackerDllDirectory); _CellTracker.SetIdComponent(_CellTrackerConfig.CellIdStartNo, _CellTrackerConfig.CellIdLength, _CellTrackerConfig.LotIdStartNo, _CellTrackerConfig.LotIdLength); }); return E1.OK; } protected override int DoDeactivate() { if (!IsSimul) { Application.Current.Dispatcher.InvokeAsync(() => { _CellTracker?.Close(); }); } return E1.OK; } private void Initialize(IDeviceConfig config) { if (_CellTracker == null) { return; } _CellTrackerConfig = config as CellTrackerConfig; if (IsSimul) { return; } // 예외처리 필요, 연결안됬을때 에러코드 받고 이런게 없는듯.. if (string.IsNullOrEmpty(_CellTrackerConfig.CellTrackerDllDirectory)) { _Logger.E(string.Format("Dll Directory is Empty")); return; } _CellTracker.Initialize(_CellTrackerConfig.CellTrackerMode, _CellTrackerConfig.CellTrackerDllDirectory); } public CellInfoStr GetCellInfoStrings() { if (!IsActivated) { return null; } return _CellTracker.GetCellInfoStrings(); } public void ReceiveData() { if (!IsActivated) { return; } _CellTracker.ReceiveData(); } public void SendEcsData(string strCellID, string strPath, string strData) { if (!IsActivated) { return; } _CellTracker.SendEcsData(strCellID, strPath, strData); } public void SetIPConfig() { if (!IsActivated) { return; } _CellTracker.SetIPConfig(); } public void getDummyData(out string lotId, out string cellId) { lotId = string.Empty; cellId = string.Empty; if (!IsActivated) { return; } if (_CellTracker != null && _CellTracker is CellTrackerDaekhon core) { core.CalcCellInfo("", out lotId, out cellId); } } } }