⇐ zurück zur Hauptseite

Zur Anbindung von selbst entwickelten HID-Devices dient die im folgenden beschriebene .Net-Library. Es sind nur diejenigen Funktionen eingebunden, die wirklich benötigt werden. Der Quellcode ist enthalten, kann also einfach ergänzt und modifiziert werden.

Zur Nutzung:
Basis ist die Klasse HidDeviceManagament. Diese Klasse stellt statische (shared in VB) Methoden zum Zugriff auf HID-Devices zur Verfügung. Ebenso werden Ereignisse ausgelöst, wenn HID-Devices vom System entfernt oder neu angeschlossen werden. Das wichtigste Element ist die DeviceList-Eigenschaft. Über diese Eigenschaft wird eine ReadOnly-Liste der aktuell zur Verfügung stehenden HID-Devices bereitgestellt. Mit Hilfe dieser Liste kann man prüfen, ob ein gesuchtes Device angeschlossen ist. Die Methode FindDevices stellt eine einfache Such-Alternative bereit.

HidDeviceManagament stellt außerdem zwei Events bereit, über die mitgeteilt wird, wenn Geräte entfernt (DeviceRemoved) oder  neu angeschlossen (DeviceArrived)  werden. Man kann direkt an die statischen Events anbinden (AddHandler in VB). Einfacher ist es jedoch, eine lokale Referenz auf die einzige Instanz (Singleton, GetInstance) dieser Klasse anzulegen und mit WithEvents- und der Handles-Klausel zu arbeiten.
Private WithEvents HDM As HidDeviceManagament = HidDeviceManagament.GetInstance
Private Sub HDM_DeviceArrived(ByVal Hid As HidDevice) Handles HDM.DeviceArrived
   ...
End Sub

Private Sub HDM_DeviceRemoved(ByVal Hid As HidDevice) Handles HDM.DeviceRemoved
   ...
End Sub

Alternativ kann auch ein Instanz von HDMControl auf die Form gezogen werden.

Über die Listenfunktionen erhält man ein (oder mehrere) Objekte der HID-Klasse. Diese Klasse stellt die wichtigsten Eigenschaften eines HID-Devices (z.B. VendorID oder ProductID) zur Verfügung.

Über die üblichen Methoden open und close veranlasst man, dass eine logische Verbindung zum Gerät auf- und abgebaut wird. Der aktuelle Verbindungszustand kann über die Eigenschaft IsOpen abgerufen werden.

Außerdem wird das Ereignis DeviceRemoved ausgelöst, wenn das durch dieses Objekt repräsentierte Gerät entfernt wird. Ob ein einmal entdecktes Device aktuell noch angeschlossen ist, kann mit Hilfe der Eigenschaft IsConnected ermittelt werden. Wird das Gerät wieder angeschlossen, wird das HID-Objekt nicht (!) aktualisiert, sondern HidDeviceManagament stellt ein neues Objekt zur Verfügung. D.h. ein HID-Objekt, das einmal als "removed" gekennzeichnet wurde, wird nie wieder verfügbar.  Auch die Geräte-Liste in HidDeviceManagament führt ein entferntes Gerät nicht mehr. Hintergrund für dieses Verhalten ist, dass Geräte beim Entfernen ihre Identität unter Windows verlieren. Ggf. kann hier die Seriennummer weiterhelfen. Dies muss aber programmseitig geschehen.

Die HID-Klasse erlaubt es, über die Methoden GetDataBlock und SendDataBlock Daten mit dem Device auszutauschen. Hierbei gilt es zu beachten, dass der Datenaustauch über einen sog. Feature-Report mit der Report-ID "1" dausgeführt wird. Die AVR-Firmware muss einen solchen Datenaustausch unterstützen. Wichtig ist, dass der HID-Descriptor passend aufgebaut ist. Über die Eigenschaft DataBlockSize kann die max. Größe des Datenblocks abgerufen werden. Dies sind übrigens Netto-Daten. Die Übertragung der Report-ID wird vor dem Anwender verborgen.

Zuletzt sei erwähnt, dass alle spezifischen Fehler eine HidException auslösen.

Eine typische Anwendung (ohne Fehlerbehandlung) wäre wie folgt:
Dim HID As HidDevice = HidDeviceManagament.FindDevices _
                       (VendorID:=&H1234, ProductID:=&H0815, ...)(0)
HID.Open
Dim Data() As Byte = {9, 8, 7}
HID.SendDataBlock(Data)
Data = HID.GetDataBlock()
HID.Close