⇐ 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