📄 readerform.cs
字号:
private void ReaderForm_Load(object sender, System.EventArgs e)
{
//since the assembly is deprecated, show deprecated message
MessageBox.Show("This sample uses the Symbol.RFID assembly. Symbol.RFID is deprecated. Use Symbol.RFID2 demonstrated in CS_RFID2Sample instead.", "Deprecated");
// If we can initialize the Reader
if ( !this.InitReader() )
{
MessageBox.Show("Unable to initialize RFID!","Error");
// If not, close this form
this.Close();
return;
}
}
/// <summary>
/// Application is closing
/// </summary>
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
// Terminate reader
this.TermReader();
base.OnClosing(e);
}
/// <summary>
/// Initialize the reader.
/// </summary>
private bool InitReader()
{
// If reader is already present then fail initialize
if ( this.MyReader != null )
{
return false;
}
try
{
// Create new reader, first available reader will be used.
this.MyReader = new Symbol.RFID.Reader();
// Create reader data to read upto 20 tags
this.MyReaderData = new Symbol.RFID.ReaderData(20);
this.FindReaderData = new Symbol.RFID.ReaderData(1);
// Enable reader
this.MyReader.Actions.Enable();
// Attach handler for read notification
this.MyEventHandler = new EventHandler(MyReader_ReadNotify);
this.MyReader.ReadNotify += this.MyEventHandler;
// Attach handler for trigger notification
this.MyTriggerHandler = new Symbol.RFID.Reader.TriggerEventHandler(MyTrigger_Pressed);
this.MyReader.TriggerNotify += this.MyTriggerHandler;
// Attach to activate and deactivate events
this.Activated += new EventHandler(ReaderForm_Activated);
this.Deactivate +=new EventHandler(ReaderForm_Deactivate);
// Select the TagType for Actions
this.MyReader.Parameters.TagType = Symbol.RFID.Tag.Types.EPC_CLASS1;
// Set Attenuation as required
this.MyReader.Parameters.Attenuation = 140;
}
catch
{
return false;
}
return true;
}
/// <summary>
/// Stop reading and disable/close reader
/// </summary>
private void TermReader()
{
// If we have a reader
if ( this.MyReader != null )
{
// Remove read notification handler
this.MyReader.ReadNotify -= null;
// Attempt to stop any pending read
this.StopRead();
// Disable reader, with wait cursor
this.MyReader.Actions.Disable();
// Free it up
this.MyReader.Dispose();
// Indicate we no longer have one
this.MyReader = null;
}
// If we have a reader data
if ( this.MyReaderData != null )
{
// Free it up
this.MyReaderData.Dispose();
// Indicate we no longer have one
this.MyReaderData = null;
}
}
/// <summary>
/// Start a read on the reader
/// </summary>
private void StartRead()
{
this.ReaderStatus.Text = "Reading ...";
// If the flag is set then start a new TagList
if (ClearListFlag)
this.MyReaderData.ClearInventory = true;
else
this.MyReaderData.ClearInventory = false;
// If we have both a reader and a reader data
if((this.MyReader != null) && (this.MyReaderData != null))
{
// Submit a read
this.MyReader.Actions.Read(this.MyReaderData);
}
}
/// <summary>
/// Start a find on the selected tag
/// </summary>
private void StartFind()
{
this.ReaderStatus.Text = "Finding ...";
// Clear the inventory flag
this.FindReaderData.ClearInventory = true;
// If we have both a reader and a reader data
if((this.MyReader != null) && (this.FindReaderData != null))
{
// Submit a read
this.MyReader.Actions.Read(this.FindReaderData);
}
}
/// <summary>
/// Stop all reads on the reader
/// </summary>
private void StopRead()
{
// If we have a reader
if ( this.MyReader != null )
{
// Prevent new reads
this.MyReader.TriggerNotify -= this.MyTriggerHandler;
// Disable the timer
this.ReaderTimer.Enabled = false;
// Try to cancel pending read or wait for it's completion
this.MyReader.Actions.Flush();
}
}
/// <summary>
/// Handles Stage2 Notification from the trigger
/// </summary>
private void MyTrigger_Pressed(object sender, Symbol.RFID.TriggerEventArgs e)
{
// Handle Trigger Press or Release
if ( e.NewState == Symbol.RFID.TriggerState.STAGE2 )
{
this.TriggerReleasedFlag = false;
this.ReaderStatus.Text = "Trigger Pulled";
// If we have a reader and it is not already busy
if ( (this.MyReader != null) && (!this.MyReader.Info.IsBusy) )
{
if (menuItemFind.Checked)
{
int i = 0;
try
{
i = ReaderDataListView.Items[ReaderDataListView.SelectedIndices[0]].Index;
}
catch(ArgumentOutOfRangeException)
{
System.Windows.Forms.MessageBox.Show("TagID not selected", "CS_RFIDSample2");
return;
}
this.prevTagMask = this.MyReader.Parameters.Mask;
// Lock all tags of the given data length in range
byte TagLength = (byte)this.MyReaderData.TagList[i].DataLength;
byte[] TagID = this.MyReaderData.TagList[i].TagID;
// Set new tag mask
Symbol.RFID.TagMask tagMask = new TagMask( (byte)(TagLength * 8), 16, TagID );
this.MyReader.Parameters.Mask = tagMask;
// Request inventory using masked scroll command
this.MyReader.Parameters.InventoryType = 1;
this.MyReader.Parameters.OuterLoop = 2;
this.MyReader.Parameters.InnerLoop = 2;
this.MyReader.Parameters.OuterWakes = 1;
this.MyReader.Parameters.InnerOuterWakes = 1;
this.MyReader.Parameters.HoppingFlag = 1;
this.MyReader.Parameters.NumSleeps = 0;
// Remove previous handler
this.MyReader.ReadNotify -= this.MyEventHandler;
// Attach handler for read notification
this.FindEventHandler = new EventHandler(MyReader_FindNotify);
this.MyReader.ReadNotify += this.FindEventHandler;
// To improve performance, power up the reader until we release trigger
this.MyReader.Parameters.PowerMode = true;
// Start a find
this.StartFind();
}
else
{
// Reset Inventory Loop Parameters to their defaults
this.MyReader.Parameters.InventoryType = 0;
this.MyReader.Parameters.OuterLoop = 5;
this.MyReader.Parameters.InnerLoop = 3;
this.MyReader.Parameters.OuterWakes = 2;
this.MyReader.Parameters.InnerOuterWakes = 2;
this.MyReader.Parameters.HoppingFlag = 0;
this.MyReader.Parameters.NumSleeps = 3;
// Remove previous handler
this.MyReader.ReadNotify -= this.FindEventHandler;
// Re-attach handler for read notification
this.MyReader.ReadNotify += this.MyEventHandler;
// To improve performance, power up the reader until we release trigger
this.MyReader.Parameters.PowerMode = true;
// Start a new read
this.StartRead();
}
// Set timer which handles sending further reads until trigger is released
this.ReaderTimer.Interval = 2000;
this.ReaderTimer.Enabled = true;
}
}
else if ( e.NewState == Symbol.RFID.TriggerState.RELEASED )
{
this.ReaderStatus.Text = "Trigger Released";
// Disable the timer
this.ReaderTimer.Enabled = false;
// Set the flag so that the power to the reader can be disabled upon
// completion of the read.
TriggerReleasedFlag = true;
//restore the mask after find tag calls
if (menuItemFind.Checked)
{
this.MyReader.Parameters.Mask = prevTagMask;
}
}
}
/// <summary>
/// Submits a new read at every timer tick
/// </summary>
private void ReaderTimer_Tick(object sender, System.EventArgs e)
{
// If another RFID operation has not already started
if (!this.MyReader.Info.IsBusy)
{
if (menuItemFind.Checked)
{
// Start a new find
this.StartFind();
}
else
{
// Start a new read
this.StartRead();
}
}
}
/// <summary>
/// Read complete or failure notification
/// </summary>
private void MyReader_ReadNotify(object sender, EventArgs e)
{
// Get the next ReaderData
Symbol.RFID.ReaderData TheReaderData =
(Symbol.RFID.ReaderData)this.MyReader.GetNextReaderData();
// If it is a successful read (as opposed to a failed one)
if ( TheReaderData.Result == Symbol.Results.SUCCESS )
{
// Handle the data from this read
this.HandleData(TheReaderData);
}
// Disable power if the trigger has been released
if (this.TriggerReleasedFlag)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -