using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using GSG.NET.Utils; namespace OHVConnector { public enum eKind { Unknown, // Not Define E, //Error S, //State B, //Battery T, // C, P, I,//수동명령보고,응답 O, A,//Alive Check L, U, F, M,//Move R, H, Z, } public class OCSMessage { const byte STX = 0x02; const byte ETX = 0x03; public string Id { get; set; } public eKind Kind { get; set; } //SubCode 만들기 위한 Bool public bool IsSubCode1 { get; set; } = false; public bool IsSubCode2 { get; set; } = false; public bool IsSubCode3 { get; set; } = false; public string RevID { get; set; } public string SendID { get; set; } public string Tag { get; set; } public string SubCode { get; set; } public byte CheckSum { get; set; } public OCSMessage() { } public string LogFormat() { return $"{this.Id} - {this.RevID} <- {this.SendID} : kind [{this.Kind.ToString()}] / Tag [{this.Tag}] / SubCode [{this.SubCode}]"; } string MakeSubcode() { if ( this.Kind == eKind.A) { return this.SubCode; } else { StringBuilder sb = new StringBuilder(); sb.Append(this.IsSubCode1 ? "1" : "0"); sb.Append(this.IsSubCode2 ? "1" : "0"); sb.Append(this.IsSubCode3 ? "1" : "0"); return this.SubCode = sb.ToString(); } } public MemoryBuffer ToMemoryBuffer() { var mb = new MemoryBuffer(); mb.Append(STX); mb.AppendAscii(RevID); mb.AppendAscii(SendID); mb.AppendAscii(this.Kind.ToString()); mb.AppendAscii(this.Tag); mb.AppendAscii(MakeSubcode()); mb.Append(GetCheckSum(mb.ToBytes)); mb.Append(ETX); return mb; } public byte GetCheckSum() { var mb = new MemoryBuffer(18); mb.Append(STX); mb.AppendAscii(RevID); mb.AppendAscii(SendID); mb.AppendAscii(this.Kind.ToString()); mb.AppendAscii(this.Tag); mb.AppendAscii(MakeSubcode()); return GetCheckSum(mb.ToBytes); } byte GetCheckSum(byte[] bs) { byte rb = 0; foreach( var item in bs) { rb += item; } return (byte)(rb & 0xff); } } }