摩托罗拉EMDK:如何停止扫描状态变化数据?

时间:2014-01-14 19:20:01

标签: c# event-handling rfid motorola motorola-emdk

背景:

我正在使用Motorola EMDK v2.5 for .NET从MC 919Z手持式扫描仪获取rfid扫描数据。只要用户按下设备上的按钮,我想继续获取rfid标签数据。一旦他从按钮上移开手指,我就想停止阅读RFID数据。

我正在使用的eMDK活动:

现在摩托罗拉公开了两个事件:

  • StatusNotify:按钮状态(按下或未按下)时触发的事件发生变化。
  • ReadNotify:读取rfid标签时触发的事件。

问题:

这两个事件似乎先发制人而不被触发。如果正在读取标签,则不会触发按钮状态更改事件。如果按钮状态更改事件触发,则不会读取标记。

所以,问题是如何确保两个事件串联起来。

1 个答案:

答案 0 :(得分:1)

你需要做一些事情(对不起VB代码,但转换为C#应该是微不足道的):

  • 无论您使用Actions.Inventory.Perform()还是Actions.TagAccess.OperationSequence.PerformSequence(),都需要定义TriggerInfo并传递给这些方法,而不是常规的无参数调用。此结构包含实际的触发事件。

    Imports Symbol
    Imports Symbol.RFID3
    Imports Symbol.RFID3.Events
    Imports Symbol.RFID3.TagAccess
    
    Private Sub DoRead()
        triggernfo = New TriggerInfo()
        triggernfo.TagReportTrigger = 1
        triggernfo.StartTrigger.Type = START_TRIGGER_TYPE.START_TRIGGER_TYPE_HANDHELD
        triggernfo.StartTrigger.Handheld.HandheldEvent = HANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_PRESSED
        triggernfo.StopTrigger.Type = STOP_TRIGGER_TYPE.STOP_TRIGGER_TYPE_HANDHELD_WITH_TIMEOUT
        triggernfo.StopTrigger.Handheld.HandheldEvent = HANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_RELEASED
        triggernfo.StopTrigger.Handheld.Timeout = 0 'Default handheld timeout value
    
    'Then you need to pass it to the Perform() OR PerformSequence() call:
        _Reader.Actions.TagAccess.OperationSequence.PerformSequence(Nothing, triggernfo, Nothing)
    'OR
        _Reader.Actions.Inventory.Perform(Nothing, triggernfo, Nothing)
    End Sub
    

重点是您现在不需要每次都致电Perform()PerformSequence()来开始阅读,您只需在Form.Load之后定义连接到读取器并使用其中的触发器调用Perform(),并且它将自动仅在使用触发器时激活。根据您编码的方式,我认为您可以使用当前的委托回调,如果Read委托人使用GetReadTags()(我现在推测,因为我还没有看到您的代码)。 / p>

最后,在您的状态委托调用中,您现在可以捕获Symbol.RFID3.Events.STATUS_EVENT_TYPE.HANDHELD_TRIGGER_EVENT作为EventData。如果你进一步挖掘,你可以eventData.HandheldTriggerEventData.HandheldTriggerEventHANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_PRESSED进入HANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_RELEASED。你不需要对这个事件做任何事情来实际读取标签,触发和读取都会发生,即使你在这里什么也不做,这是值得的。

实际上,弄乱事件(比如停止或开始读取)可能会使触发器抛出错误,所以除非你有迫切需要(就像我今天所做的那样),否则请使用TriggerInfo对象并单独保留Status委托; )