using System; using System.Linq; using System.Collections.ObjectModel; using System.Collections.Generic; using System.Text; namespace ITC81DB { #region Enum public enum BarcodeStatus { None, Normal, NoRead, NoMatch, } #endregion public class BarcodeShortCut { public static readonly string MinAngle = "5362"; public static readonly string MaxAngle = "5363"; public static readonly string Frequency = "5364"; public static readonly string ReadingPhaseTimeout = "78"; public static readonly string Timeout = "79"; public static readonly string ReadingConditions = "5250"; } public class Barcode { #region Field public static byte[] EnterHostMode = { 0x1B, 0x5B, 0x43 }; public static byte[] EnterTerminalMode = { 0x1B, 0x5D, 0x42 }; public static byte[] EnterProgrammingMode = { 0x1B, 0x63, 0x4D, 0xB0, 0x30 }; public static byte[] ExitProgrammingMode = { 0x1B, 0x64, 0x4D, 0xB0, 0x30 }; public static byte[] ExitTerminalMode = { 0x1B, 0x49, 0x41, 0x20 }; public static byte[] ExitHostMode = { 0x1B, 0x5B, 0x41 }; public static byte[] AutoExitCommandMode = { 0x1B, 0x5B, 0x41 }; public static byte[] SavePermanently = { 0x45, 0x20, 0x50, 0x0D, 0x0A }; private bool m_IsCommandMode; // 현재 커맨드 모드인지 확인 private int m_SaveValue; // 설정한 값 저장 변수 private string m_SaveGettingShortCut; // 설정한 Getting ShortCut 변수 private string m_SaveSettingShortCut; // 설정한 Setting ShortCut 변수 private Queue QueueBarcode; private Collection CollectionLotNo; #endregion #region Constructor public Barcode(Collection items, int productCount) { this.DefaultSetting(productCount); for (int i = 0; i < productCount; i++) this.CollectionLotNo[i] = items[i].LotNo; } #endregion #region Property public bool IsCommandMode { get { return this.m_IsCommandMode; } set { this.m_IsCommandMode = value; } } public int SaveValue { get { return this.m_SaveValue; } set { this.m_SaveValue = value; } } public string SaveGettingShortCut { get { return this.m_SaveGettingShortCut; } set { this.m_SaveGettingShortCut = value; } } public string SaveSettingShortCut { get { return this.m_SaveSettingShortCut; } set { this.m_SaveSettingShortCut = value; } } public int GetQueueCount { get { return this.QueueBarcode.Count; } } #endregion #region Method private void DefaultSetting(int barcodeCount) { this.IsCommandMode = false; this.QueueBarcode = new Queue(); this.CollectionLotNo = new Collection(); for (int i = 0; i < barcodeCount; i++) this.CollectionLotNo.Add(""); } public void SetLotNo(Collection items, int productCount) { for (int i = 0; i < productCount; i++) this.CollectionLotNo[i] = items[i].LotNo; } public void SetData(string data) { //value = this.DecisionLength(data); this.QueueBarcode.Enqueue(data); } public BarcodeStatus GetData(ref int productNo) { string value = ""; BarcodeStatus ret = BarcodeStatus.None; if (this.QueueBarcode.Count > 0) { value = this.QueueBarcode.Peek(); if (value.Length > 14) value = value.Substring(value.Length - 14, 14); if (value == "NoRead") { productNo = 991; return ret = BarcodeStatus.NoRead; } else { for (int i = 0; i < this.CollectionLotNo.Count; i++) { if (this.CollectionLotNo[i] == value) { productNo = i + 1; return ret = BarcodeStatus.Normal; } } productNo = 992; return ret = BarcodeStatus.NoMatch; } } productNo = 0; return ret = BarcodeStatus.None; } public BarcodeStatus GetData(ref int productNo, int startIndex, int endIndex) { string value = ""; BarcodeStatus ret = BarcodeStatus.None; if (this.QueueBarcode.Count > 0) { value = this.QueueBarcode.Peek(); if (value == "NoRead") { productNo = 991; return ret = BarcodeStatus.NoRead; } else { int length = endIndex - startIndex + 1; if(value.Length >= length) value = value.Substring(startIndex, length); if (value.Length > 14) value = value.Substring(value.Length - 14, 14); for (int i = 0; i < this.CollectionLotNo.Count; i++) { if (this.CollectionLotNo[i] == value) { productNo = i + 1; return ret = BarcodeStatus.Normal; } } productNo = 992; return ret = BarcodeStatus.NoMatch; } } productNo = 0; return ret = BarcodeStatus.None; } /// /// 바코드 길이를 14 이하로 결정 /// /// /// string private string DecisionLength(string barcode) { if (barcode.Length > 14) return barcode.Substring(barcode.Length - 14, 14); else return barcode; } public string BarcodePeek() { string ret = ""; if (this.QueueBarcode.Count > 0) ret = this.QueueBarcode.Peek(); return ret; } public void BarcodeDequeue() { if (this.QueueBarcode.Count > 0) this.QueueBarcode.Dequeue(); } public void Clear() { this.QueueBarcode.Clear(); } #endregion } }