funzione HidP_TranslateUsagesToI8042ScanCodes (hidpi.h)
La routine HidP_TranslateUsagesToI8042ScanCodes esegue il mapping di un elenco di di utilizzo HID nella pagina di utilizzo HID_USAGE_PAGE_KEYBOARD ai rispettivi codici di analisi PS/2 (set di codice di analisi 1).
Sintassi
NTSTATUS HidP_TranslateUsagesToI8042ScanCodes(
[in] PUSAGE ChangedUsageList,
[in] ULONG UsageListLength,
[in] HIDP_KEYBOARD_DIRECTION KeyAction,
[in, out] PHIDP_KEYBOARD_MODIFIER_STATE ModifierState,
[in] PHIDP_INSERT_SCANCODES InsertCodesProcedure,
[in, optional] PVOID InsertCodesContext
);
Parametri
[in] ChangedUsageList
Puntatore a un elenco di utilizzi della tastiera (pulsante). La routine translate usages interpreta uno zero come delimitatore che termina l'elenco di utilizzo.
[in] UsageListLength
Specifica il numero massimo possibile di utilizzi nell'elenco di utilizzo modificato.
[in] KeyAction
Identifica la direzione chiave per l'elenco di utilizzo delle modifiche specificato.
typedef enum _HIDP_KEYBOARD_DIRECTION {
HidP_Keyboard_Break,
HidP_Keyboard_Make
} HIDP_KEYBOARD_DIRECTION;
HidP_Keyboard_Break
Specifica una direzione di interruzione (tasto su). L'elenco di utilizzo modificato contiene gli utilizzi impostati su OFF precedentemente impostati su ON (che corrisponde alle chiavi precedentemente inattivi, ma sono ora aggiornate).
HidPKeyboard_Make
Specifica una impostare direzione (tasto giù). L'elenco di utilizzo modificato contiene gli utilizzi impostati su ON precedentemente impostati su OFF (che corrisponde alle chiavi precedentemente attivate, ma ora sono inattivi).
[in, out] ModifierState
Puntatore a una struttura _HIDP_KEYBOARD_MODIFIER_STATE gestita dal chiamante per l'utilizzo dalla routine di traslazione. La struttura dello stato del modificatore identifica lo stato dei tasti di modifica della tastiera.
typedef struct _HIDP_KEYBOARD_MODIFIER_STATE {
union {
struct {
ULONG LeftControl: 1;
ULONG LeftShift: 1;
ULONG LeftAlt: 1;
ULONG LeftGUI: 1;
ULONG RightControl: 1;
ULONG RightShift: 1;
ULONG RightAlt: 1;
ULONG RigthGUI: 1;
ULONG CapsLock: 1;
ULONG ScollLock: 1;
ULONG NumLock: 1;
ULONG Reserved: 21;
};
ULONG ul;
};
Ogni membro della struttura dello stato del modificatore identifica se l'utilizzo corrispondente è impostato su ON (1) o OFF (zero).
Per altre informazioni sull'uso di una struttura di stato del modificatore con la routine di utilizzo della conversione, vedere la sezione Osservazioni.
[in] InsertCodesProcedure
Puntatore a una routine di callback PHIDP_INSERT_SCANCODES tipizzata fornita dal chiamante utilizzata dalla routine di utilizzo della traslazione per restituire i codici di analisi mappati al chiamante della routine di utilizzo della traslazione.
typedef BOOLEAN (*PHIDP_INSERT_SCANCODES)(
IN PVOID Context,
IN PCHAR NewScanCodes,
IN ULONG Length
);
Contesto
Puntatore al contesto del chiamante della routine di utilizzo della traslazione. La routine di utilizzo della traslazione passa il puntatore InsertCodesContext alla routine InsertCodesProcedure.
NewScanCodes
Puntatore al primo byte di un codice di analisi restituito dalla routine di utilizzo della traslazione al chiamante della routine di utilizzo della traslazione.
Lunghezza
Specifica la lunghezza, in byte, del codice di analisi. Un codice di analisi non può superare quattro byte.
[in, optional] InsertCodesContext
Puntatore a un contesto definito dal chiamante che la routine di utilizzo della traslazione passa alla routine insertCodesProcedure.
Valore restituito
HidP_TranslateUsagesToI8042ScanCodes restituisce uno dei valori di stato seguenti:
Codice restituito | Descrizione |
---|---|
|
La routine di utilizzo traduci ha eseguito correttamente il mapping di tutti gli utilizzi validi nell'elenco di utilizzo modificato. |
|
Un utilizzo nell'elenco di utilizzo modificato mappato a un codice di analisi della tastiera non valido. |
Osservazioni
HidP_TranslateUsagesToI8042ScanCodes esegue il mapping sequenziale degli utilizzi del pulsante di tastiera nell'elenco di utilizzo modificato nell'ordine in cui si verificano nell'elenco, a partire dal valore in ChangedUsageList. Dopo che la routine di utilizzo della traslazione esegue correttamente il mapping di un utilizzo, usa la routine InsertCodesProced ure del chiamante per restituire il codice di analisi corrispondente al chiamante. La routine di utilizzo della traduzione continua a eseguire il mapping degli utilizzi nell'elenco fino a quando non si verifica uno dei seguenti: un valore di utilizzo nell'elenco è zero; esegue il mapping del numero di utilizzi specificati da UsageListLength; un utilizzo esegue il mapping a un codice di analisi della tastiera non valido.
HidP_TranslateUsagesToI8042ScanCodes è progettato principalmente per essere usato in un ciclo di elaborazione che determina ripetutamente l'elenco di utilizzo corrente (utilizzi attualmente impostati su ON), li confronta con un elenco di utilizzo precedente (utilizzi precedentemente impostati su ON) e mappa la differenza tra gli elenchi di utilizzo correnti e precedenti per creare codici di analisi e codici di analisi di interruzione. Le operazioni seguenti illustrano come usare la routine di conversione dei dati di utilizzo.
Prima di iniziare un ciclo di elaborazione, il codice di elaborazione in genere alloca e inizializza i dati seguenti:
-
Un elenco di utilizzo precedente, l'elenco di utilizzo corrente, l'elenco di interruzioni di utilizzo e un elenco di utilizzo.
Ogni elenco è una matrice di utilizzi inizializzata zero. Per garantire che il codice di elaborazione eselabori tutti gli utilizzi che possono cambiare tra report di input HID consecutivi, il codice di elaborazione deve impostare il numero di elementi in ogni elenco sul numero massimo di utilizzi che HidP_GetUsages possono restituire per la pagina di utilizzo HID_USAGE_PAGE_KEYBOARD. Questo numero viene ottenuto usando HidP_MaxUsageListLength.
-
Struttura di _HIDP_KEYBOARD_MODIFIER_STATE inizializzata zero per l'uso dalla routine di utilizzo della traslazione.
Nel ciclo di elaborazione, il codice deve mantenere questa struttura per l'uso dalla routine di traslazione degli utilizzi. Il codice di elaborazione può leggere lo stato delle chiavi del modificatore, ma il codice non deve modificare la struttura. La routine di utilizzo della traslazione usa questa struttura per mantenere informazioni interne sullo stato delle chiavi di modifica.
- Chiamare HidP_GetUsages per ottenere l'elenco di utilizzo corrente degli utilizzi impostati su ON. Impostare UsagePage parametro di input della routine get usages su HID_USAGE_PAGE_KEYBOARD.
- Chiamare HidP_UsageListDifference per confrontare l'elenco di utilizzo corrente degli utilizzi con un elenco di utilizzo precedente. La routine di differenza dell'elenco di utilizzo restituisce un elenco di utilizzo di interruzione e un elenco di utilizzo.
- Chiamare la routine di utilizzo della conversione, impostando ChangedUsageList all'elenco di utilizzo delle interruzioni, KeyAction a HidP_KeyboardBreak e ModifierState alla struttura gestita dal codice di elaborazione per la routine di traslazione. La routine translate usages usa la routine di callback InsertCodesProcedureroutine di callback per restituire i codici di analisi di interruzione al ciclo di elaborazione.
- Chiamare la routine di utilizzo della conversione, impostando ChangedUsageList all'elenco di utilizzo, KeyAction per HidP_KeyboardMake e ModifierState alla struttura gestita dal codice di elaborazione per la routine di conversione. La routine translate usages usa la routine di callback InsertCodesProcedureroutine di callback per restituire i codici di analisi al ciclo di elaborazione.
- Aggiornare l'elenco di utilizzo precedente all'elenco di utilizzo corrente.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Disponibile in Windows 2000 e versioni successive di Windows. |
piattaforma di destinazione | Universale |
intestazione | hidpi.h (include Hidpi.h) |
libreria | Hidparse.lib |
IRQL | <= DISPATCH_LEVEL |