2010-01-18 16 views
5

Ho alcuni dispositivi di scansione del codice a barre in grado di gestire una varietà di interfacce USB (COMM Emulation, HID Keyboard, HID POS, ecc.) Il problema è che, mentre io può dire se il dispositivo è in modalità HID, ho bisogno di essere in grado di determinare se si tratta di tastiera HID o POS HID.Determinazione dell'interfaccia HID da POS o da tastiera in C++

C'è un modo per determinare questo utilizzando Win32 C++, preferibilmente con la libreria HID Windows integrata (hidsdi.h)?

risposta

3

È possibile utilizzare HidD_GetHidGuid per ottenere l'GUID univoco per il dispositivo. I guidi dell'interfaccia del dispositivo sono definiti da ciascun fornitore di software per dispositivo/applicazione, Microsoft o terze parti come ritengono opportuno. In alcuni casi i GUID sono pubblicati e di dominio pubblico e sono interfacce standard, in alcuni casi non lo sono.

È anche possibile utilizzare il USBView utility di Microsoft che consente di esplorare l'albero USB oppure è possibile cercare nel registro e vedere se è possibile trovare il GUID per il proprio dispositivo. Potrebbe ancora essere necessario il query dispositivo per determinare il tipo di dispositivo se i dati di configurazione non sono presenti o non si rivelano da soli oltre a un dispositivo generico, se il dispositivo lo supporta.

Esistono due tipi di GUID: Classe dispositivo e Interfaccia dispositivo. Un dispositivo può essere solo una parte di una classe. Sfortunatamente, i GUID Device Class e Device Interface sono a volte gli stessi, confondendo così gli sviluppatori. Nel DDX WinXP, sono stati creati degli standard per provare a rendere la definizione di GUID meno confusa.

Vedi anche questa domanda precedente SO: Use RegisterDeviceNotification() for ALL USB devices.

+0

Potrebbe funzionare, ma c'è un elenco dei GUID da qualche parte? Il GUID non significherà nulla per me altrimenti. –

+0

vedere modifica [15 caratteri] –

+0

Il dispositivo PID cambia sui lettori di codici a barre in base alla modalità del cavo USB attiva. HTH –

1

Ecco una lista di possibili GUID HID: http://msdn.microsoft.com/en-us/library/ms791134.aspx e utilizzare HidD_GetHidGuid come suggerito Roboto

+0

Ok, più vicino ora, ma quella lista include solo una voce per HID, ma ho bisogno di HID POS contro tastiera HID. Il POS è bidirezionale e la tastiera è unidirezionale, quindi sono decisamente diversi. Forse questo non può essere determinato con HidD_GetHidGuid? –

+0

Quali GUID si ottengono in modalità POS e in modalità Tastiera? È la stessa? –

+0

Sì, è lo stesso e quello elencato qui: http://msdn.microsoft.com/en-us/library/bb663084.aspx Quale è solo per HID in generale –

1

Avrete bisogno di utilizzare le funzioni HidP_ per controllare il rapporto HID funzionalità. Scopri quali funzionalità (usi) sono presentate dal dispositivo HIDPOS e controlla se tali usi sono presenti usando HidD_GetPreparsedData(), HidP_GetCaps() e poi HidP_GetValueCaps (e/o ..ButtonCaps, ecc.). Un buon posto per cercare esempi è Jan Axelson's page. Se gli usi sono presenti, allora hai il dispositivo POS. In caso contrario, deve essere la tastiera (supponendo che tu abbia confermato che il dispositivo è collegato.)