using FastReport.Utils; using System; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; namespace FastReport { /// /// Represents a RFID label. /// public partial class RFIDLabel : ContainerObject { /// /// Specifies lock type on write\rewrite bank of data. /// public enum LockType { /// /// Unlock. /// Unlock = 'U', /// /// Lock. /// Lock = 'L', /// /// Permanently unlock. /// Open = 'O', /// /// Permanently lock. /// Protect = 'P' } /// /// Specifies action on error printing of RFID label. /// public enum EErrorHandle { /// /// Skip label. /// None = 'N', /// /// Place printer in Pause mode. /// PauseMode = 'P', /// /// Place printer in Error mode. /// ErrorMode = 'E', } private RFIDBank tidBank; private RFIDBank userBank; private RFIDBank epcBank; private string epcFormat; private string accessPassword; private string accessPasswordDataColumn; private string killPassword; private string killPasswordDataColumn; private LockType lockKillPassword; private LockType lockAccessPassword; private LockType lockEPCBank; private LockType lockUserBank; private int startPermaLock; private int countPermaLock; private bool adaptiveAntenna; private short readPower; private short writePower; private bool useAdjustForEPC; private bool rewriteEPCbank; private EErrorHandle errorHandle; /// [Browsable(false)] public override FillBase Fill { get => base.Fill; set => base.Fill = value; } /// [Browsable(false)] public override AnchorStyles Anchor { get => base.Anchor; set => base.Anchor = value; } /// [Browsable(false)] public override Border Border { get => base.Border; set => base.Border = value; } /// [Browsable(false)] public override DockStyle Dock { get => base.Dock; set => base.Dock = value; } /// [Browsable(false)] public override bool Visible { get => base.Visible; set => base.Visible = value; } /// /// Gets or sets Tag ID memory bank. /// public RFIDBank TIDBank { get { return tidBank; } set { tidBank = value; } } /// /// Gets or sets User memory bank. /// public RFIDBank UserBank { get { return userBank; } set { userBank = value; } } /// /// Gets or sets EPC memory bank. /// public RFIDBank EpcBank { get { return epcBank; } set { epcBank = value; } } /// /// Gets or sets EPC format. /// [DefaultValue("96,8,3,3,20,24,38")] public string EpcFormat { get { return epcFormat; } set { epcFormat = value; } } /// /// Gets or sets access password. /// public string AccessPassword { get { return accessPassword; } set { accessPassword = value; } } /// /// Gets or sets kill password. /// public string KillPassword { get { return killPassword; } set { killPassword = value; } } /// /// Gets or sets the name of the data column used to set the access password. /// public string AccessPasswordDataColumn { get { return accessPasswordDataColumn; } set { accessPasswordDataColumn = value; } } /// /// Gets or sets the name of the data column used to set the kill password. /// public string KillPasswordDataColumn { get { return killPasswordDataColumn; } set { killPasswordDataColumn = value; } } /// /// Gets or sets the lock type for the kill password. /// public LockType LockKillPassword { get { return lockKillPassword; } set { lockKillPassword = value; } } /// /// Gets or sets the lock type for the access password. /// public LockType LockAccessPassword { get { return lockAccessPassword; } set { lockAccessPassword = value; } } /// /// Gets or sets the lock type for the EPC bank. /// public LockType LockEPCBank { get { return lockEPCBank; } set { lockEPCBank = value; } } /// /// Gets or sets the lock type for the user bank. /// public LockType LockUserBank { get { return lockUserBank; } set { lockUserBank = value; } } /// /// Gets or sets the start section for permanent lock of user bank. /// public int StartPermaLock { get { return startPermaLock; } set { startPermaLock = value; } } /// /// Gets or sets the count of section for permanent lock of user bank. /// public int CountPermaLock { get { return countPermaLock; } set { countPermaLock = value; } } /// /// Gets or sets the read power level for the label. /// public short ReadPower { get { return readPower; } set { readPower = value; } } /// /// Gets or sets the write power level for the label. /// public short WritePower { get { return writePower; } set { writePower = value; } } /// /// Gets or sets a value that determines whether the using auto adjust of bits when write EPC bank. /// public bool UseAdjustForEPC { get { return useAdjustForEPC; } set { useAdjustForEPC = value; } } /// /// Gets or sets a value that determines whether the entire EPC bank will be overwritten. /// public bool RewriteEPCbank { get { return rewriteEPCbank; } set { rewriteEPCbank = value; } } /// /// Gets or sets error handle mode. /// public EErrorHandle ErrorHandle { get { return errorHandle; } set { errorHandle = value; } } /// /// Gets or sets a value that determines whether to use the adaptive antenna property. /// public bool AdaptiveAntenna { get { return adaptiveAntenna; } set { adaptiveAntenna = value; } } /// public override void GetData() { base.GetData(); if (TIDBank.DataColumn.Contains("[") && TIDBank.DataColumn.Contains("]")) TIDBank.Data = Report.Calc(TIDBank.DataColumn).ToString(); if (UserBank.DataColumn.Contains("[") && UserBank.DataColumn.Contains("]")) UserBank.Data = Report.Calc(UserBank.DataColumn).ToString(); if (EpcBank.DataColumn.Contains("[") && EpcBank.DataColumn.Contains("]")) EpcBank.Data = Report.Calc(EpcBank.DataColumn).ToString(); if (AccessPasswordDataColumn.Contains("[") && AccessPasswordDataColumn.Contains("]")) AccessPassword = Report.Calc(AccessPasswordDataColumn).ToString(); if (KillPasswordDataColumn.Contains("[") && KillPasswordDataColumn.Contains("]")) KillPassword = Report.Calc(KillPasswordDataColumn).ToString(); } /// public override void Assign(Base source) { base.Assign(source); RFIDLabel rFIDLabel = source as RFIDLabel; TIDBank.Assign(rFIDLabel.TIDBank); EpcBank.Assign(rFIDLabel.EpcBank); UserBank.Assign(rFIDLabel.UserBank); EpcFormat = rFIDLabel.EpcFormat; AccessPassword = rFIDLabel.AccessPassword; KillPassword = rFIDLabel.KillPassword; AccessPasswordDataColumn = rFIDLabel.AccessPasswordDataColumn; KillPasswordDataColumn = rFIDLabel.KillPasswordDataColumn; LockAccessPassword = rFIDLabel.LockAccessPassword; LockKillPassword = rFIDLabel.LockKillPassword; LockEPCBank = rFIDLabel.LockEPCBank; LockUserBank = rFIDLabel.LockUserBank; StartPermaLock = rFIDLabel.StartPermaLock; CountPermaLock = rFIDLabel.CountPermaLock; AdaptiveAntenna = rFIDLabel.AdaptiveAntenna; ReadPower = rFIDLabel.ReadPower; WritePower = rFIDLabel.WritePower; UseAdjustForEPC = rFIDLabel.UseAdjustForEPC; RewriteEPCbank = rFIDLabel.RewriteEPCbank; ErrorHandle = rFIDLabel.ErrorHandle; } /// public override void Serialize(FRWriter writer) { base.Serialize(writer); RFIDLabel c = writer.DiffObject as RFIDLabel; base.Serialize(writer); EpcBank.Serialize(writer, "EpcBank", c.EpcBank); TIDBank.Serialize(writer, "TidBank", c.TIDBank); UserBank.Serialize(writer, "UserBank", c.UserBank); if (EpcFormat != c.EpcFormat) writer.WriteStr("EpcFormat", EpcFormat); if (AccessPassword != c.AccessPassword) writer.WriteStr("AccessPassword", AccessPassword); if (KillPassword != c.KillPassword) writer.WriteStr("KillPassword", KillPassword); if (AccessPasswordDataColumn != c.AccessPasswordDataColumn) writer.WriteStr("AccessPasswordDataColumn", AccessPasswordDataColumn); if (KillPasswordDataColumn != c.KillPasswordDataColumn) writer.WriteStr("KillPasswordDataColumn", KillPasswordDataColumn); if (LockAccessPassword != c.LockAccessPassword) writer.WriteValue("LockAccessPassword", LockAccessPassword); if (LockKillPassword != c.LockKillPassword) writer.WriteValue("LockKillPassword", LockKillPassword); if (LockEPCBank != c.LockEPCBank) writer.WriteValue("LockEPCBlock", LockEPCBank); if (LockUserBank != c.LockUserBank) writer.WriteValue("LockUserBlock", LockUserBank); if (StartPermaLock != c.StartPermaLock) writer.WriteInt("StartPermaLock", StartPermaLock); if (CountPermaLock != c.CountPermaLock) writer.WriteInt("CountPermaLock", CountPermaLock); if (AdaptiveAntenna != c.AdaptiveAntenna) writer.WriteBool("AdaptiveAntenna", AdaptiveAntenna); if (ReadPower != c.ReadPower) writer.WriteInt("PowerRead", ReadPower); if (WritePower != c.WritePower) writer.WriteInt("PowerWrite", WritePower); if (UseAdjustForEPC != c.UseAdjustForEPC) writer.WriteBool("UseAdjustForEPC", UseAdjustForEPC); if (RewriteEPCbank != c.RewriteEPCbank) writer.WriteBool("RewriteEPCbank", RewriteEPCbank); if (ErrorHandle != c.ErrorHandle) writer.WriteValue("ErrorHandle", ErrorHandle); } /// public override void Draw(FRPaintEventArgs e) { DrawBackground(e); DrawMarkers(e); Border.Draw(e, new RectangleF(AbsLeft, AbsTop, Width, Height)); base.Draw(e); } public RFIDLabel() { tidBank = new RFIDBank(); epcBank = new RFIDBank(); userBank = new RFIDBank(); epcFormat = "96,8,3,3,20,24,38"; accessPassword = "00000000"; killPassword = "00000000"; accessPasswordDataColumn = ""; killPasswordDataColumn = ""; lockKillPassword = LockType.Open; lockAccessPassword = LockType.Open; lockEPCBank = LockType.Open; lockUserBank = LockType.Open; startPermaLock = 0; countPermaLock = 0; adaptiveAntenna = false; readPower = 16; writePower = 16; useAdjustForEPC = false; rewriteEPCbank = false; ErrorHandle = EErrorHandle.None; //Dock = System.Windows.Forms.DockStyle.Fill; } #if !FRCORE [TypeConverter(typeof(TypeConverters.FRExpandableObjectConverter))] #endif public class RFIDBank { private int offset; private string data; private string dataColumn; private Format dataFormat; /// /// Specifies the data format of a RFID label bank. /// public enum Format { Hex = 'H', ASCII = 'A' } /// /// Gets or sets a data of bank. /// public string Data { get { return data; } set { data = value; } } /// /// Gets or sets a data column name to this bank. /// public string DataColumn { get { return dataColumn; } set { dataColumn = value; } } /// /// Gets or sets a data offset of bank. Offset measured in 16-bit blocks. /// public int Offset { get { return offset; } set { offset = value; } } /// /// Gets or sets a data format of bank. /// public Format DataFormat { get { return dataFormat; } set { dataFormat = value; } } /// /// Gets count byte of data. /// public int CountByte { get { if (dataFormat == Format.ASCII) return Encoding.ASCII.GetByteCount(Data); else return (int)Math.Ceiling((double)Data.Length / 2); } } public RFIDBank() { dataColumn = ""; data = ""; dataFormat = Format.Hex; offset = 0; } /// /// Serializes the object. /// public void Serialize(FRWriter writer, string prefix, RFIDBank c) { if (Data != c.Data) writer.WriteStr(prefix + ".Data", Data); if (DataColumn != c.DataColumn) writer.WriteStr(prefix + ".DataColumn", DataColumn); if (DataFormat != c.DataFormat) writer.WriteValue(prefix + ".DataFormat", DataFormat); if (Offset != c.Offset) writer.WriteInt(prefix + ".Offset", Offset); } /// /// Copies the contents of another, similar object. /// public void Assign(RFIDBank rfidBank) { DataColumn = rfidBank.DataColumn; Data = rfidBank.Data; Offset = rfidBank.Offset; DataFormat = rfidBank.DataFormat; } } } }