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;
}
}
}