HID设备。进行事件处理的最佳方式?

时间:2011-09-01 17:45:22

标签: vb.net hid

我正在使用HID设备连接到CAN总线,并连接了几种不同类型的传感器。其中一些响应很快,另一些则有更多延迟。

我在C#中使用这个USB HID组件作为Visual Basic中的.dll,效果很好。 http://www.codeproject.com/KB/cs/USB_HID.aspx

我目前发送和接收命令的代码有点麻烦。有时命令和发送但收不到足够快。问题可能在于传感器,而不是实际的vb代码。我们希望程序继续监控其他传感器,而不是长时间挂起。

目前我正在使用事件处理程序和循环,但我想知道这是否可以通过线程更好地完成?或者如果我的惯例对这种情况最好。

代码段:

CANUSB_Class.vb

Public Sub DataReceivedHandler(ByVal sender As Object, ByVal dataReceived As DataRecievedEventArgs)
     For Each byteReceived As Byte In dataReceived.data
         rxDataStruct.dataPacket(rxDataStruct.InPacketLength) = byteReceived
         rxDataStruct.InPacketLength += 1
     Next
     rxDataReady = True

MainParsingRoutine.vb

sendCommand = False
CANPort.rxDataReady = False
     Try
          Do
              Tries += 1
              If Tries > 4 Then
                  Exit Do
              End If
              CANTimer.Start()
              CANPort.transmitPacket(OutCANPacket)

              'Wait for Return Packet
              Do Until CANPort.rxDataReady = True Or _ 
                      CANTimer.ElapsedMilliseconds > timeout
                  System.Threading.Thread.Sleep(0)
              Loop
              If CANPORT.rxDataReady = True Then
                  sendCommand = True 
          Loop Until sendCommand = True

1 个答案:

答案 0 :(得分:0)

如果有人正在开发HID设备并且在这个页面上发现我最终使用了ManualResetEvent。

在CANUSB课程中,下一行是:

resetEvent.Set()

然后在MainParsingRoutine.vb中我改变了:

Do Until CANPort.rxDataReady = True Or _ 
                  CANTimer.ElapsedMilliseconds > timeout
              System.Threading.Thread.Sleep(0)
          Loop
          If CANPORT.rxDataReady = True Then
              sendCommand = True

为:

CANUSB.resetEvent.WaitOne(100)

在100ms后超时。

与我们的HID设备配合得非常好,比我们以前的FTDI usb串行设备要好得多。