using Edge.Core.Parser.BinaryParser.Attributes; using Edge.Core.Parser.BinaryParser.Util; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LanTian_Pump_664_Or_886.MessageEntity.Incoming { public class ReadPumpStateResponse : MessageBase { public enum NozzleStateEnum { 提枪 = 0, 挂枪 = 1 } public enum StartOrStopStateEnum { 停机 = 0, /// /// 有的油机主板是真正出油才变成 开机状态,有的是收到FC发来的开机指令后就变成 开机状态 /// 开机 = 1 } public enum ControlStateEnum { 自控 = 0, 受控 = 1 } public enum ErrorStateEnum { 无错误, 传感器错误, 计数器错误, /// /// the protocol doc does not defined, how? /// Undefined } public enum PaymentStateEnum { 无支付请求, POS支付请求, } [Format(1, EncodingType.BIN, 1)] public byte RawStateFlag { get; set; } public NozzleStateEnum NozzleState { get { return this.RawStateFlag.GetBit(7) == 0 ? NozzleStateEnum.提枪 : NozzleStateEnum.挂枪; } set { this.RawStateFlag = this.RawStateFlag.SetBit(7, 7, value == NozzleStateEnum.提枪 ? 0 : 1); } } public StartOrStopStateEnum StartOrStopState { get { return this.RawStateFlag.GetBit(5) == 0 ? StartOrStopStateEnum.停机 : StartOrStopStateEnum.开机; } set { this.RawStateFlag = this.RawStateFlag.SetBit(5, 5, value == StartOrStopStateEnum.停机 ? 0 : 1); } } public ControlStateEnum ControlState { get { return this.RawStateFlag.GetBit(3) == 0 ? ControlStateEnum.自控 : ControlStateEnum.受控; } set { this.RawStateFlag = this.RawStateFlag.SetBit(3, 3, value == ControlStateEnum.自控 ? 0 : 1); } } public ErrorStateEnum ErrorState { get { var bit1 = this.RawStateFlag.GetBit(1); var bit2 = this.RawStateFlag.GetBit(2); if (bit1 == 0 && bit2 == 0) return ErrorStateEnum.无错误; if (bit2 == 0 && bit1 == 1) return ErrorStateEnum.传感器错误; if (bit2 == 1 && bit1 == 0) return ErrorStateEnum.计数器错误; return ErrorStateEnum.Undefined; } } public PaymentStateEnum PaymentState { get { return this.RawStateFlag.GetBit(0) == 0 ? PaymentStateEnum.无支付请求 : PaymentStateEnum.POS支付请求; } set { this.RawStateFlag = this.RawStateFlag.SetBit(0, 0, value == PaymentStateEnum.无支付请求 ? 0 : 1); } } public override string ToLogString() { return this.GetType().Name + base.ToLogString() + " Nozzle with Address: " + this.Adrs + " is " + this.NozzleState + ", " + this.StartOrStopState + ", " + this.ControlState + ", " + this.ErrorState + ", " + this.PaymentState; } } }