funzione HidP_TranslateUsagesToI8042ScanCodes (hidpi.h)
La routine HidP_TranslateUsagesToI8042ScanCodes esegue il mapping di un elenco di utilizzi 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 utilizzo della tastiera (pulsante). La routine di utilizzo della traduzione 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 (chiave su). L'elenco di utilizzo modificato contiene gli utilizzi impostati su OFF impostati in precedenza su ON (che corrisponde alle chiavi precedentemente inattivi, ma ora sono aggiornate).
HidPKeyboard_Make
Specifica una direzione di impostazione (chiave verso il basso). L'elenco di utilizzo modificato contiene gli usi impostati su ON impostati in precedenza su OFF (che corrisponde alle chiavi precedentemente aggiornate, ma ora sono inattivi).
[in, out] ModifierState
Puntatore a una struttura _HIDP_KEYBOARD_MODIFIER_STATE gestita dal chiamante per l'uso dalla routine di conversione. 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 sul modo in cui viene usata una struttura dello stato del modificatore con la routine di utilizzo della conversione, vedere la sezione Osservazioni.
[in] InsertCodesProcedure
Puntatore a una routine di callback fornita dal chiamante PHIDP_INSERT_SCANCODES tipizzata che la routine di utilizzo di conversione usa per restituire i codici di analisi mappati al chiamante della routine di utilizzo di traduzione.
typedef BOOLEAN (*PHIDP_INSERT_SCANCODES)(
IN PVOID Context,
IN PCHAR NewScanCodes,
IN ULONG Length
);
Contesto
Puntatore al contesto del chiamante della routine di utilizzo di conversione. La routine di utilizzo della traduzione passa il puntatore InsertCodesContext alla routine InsertCodesProcedure .
NewScanCodes
Puntatore al primo byte di un codice di analisi che la routine di utilizzo di traduzione restituisce al chiamante della routine di utilizzo di conversione.
Length
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 di conversione passa alla routine InsertCodesProcedure .
Valore restituito
HidP_TranslateUsagesToI8042ScanCodes restituisce uno dei valori di stato seguenti:
Codice restituito | Descrizione |
---|---|
|
La routine di utilizzo di traduzione ha eseguito correttamente il mapping di tutti gli usi validi nell'elenco di utilizzo modificato. |
|
Utilizzo nell'elenco di utilizzo modificato mappato a un codice di analisi della tastiera non valido. |
Commenti
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 conversione esegue correttamente il mapping di un utilizzo, usa la routine InsertCodesProcedure del chiamante per restituire il codice di analisi corrispondente al chiamante. La routine di utilizzo della traduzione continua a eseguire il mapping degli usi 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 (usi attualmente impostati su ON), li confronta con un elenco di utilizzo precedente (utilizzo precedentemente impostato 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 degli usi.
Prima di iniziare un ciclo di elaborazione, il codice di elaborazione in genere alloca e inizializza i dati seguenti:
-
Elenco di utilizzo precedente, elenco di utilizzo corrente, elenco di utilizzo di interruzione e elenco di utilizzo.
Ogni elenco è una matrice zero inizializzata di utilizzi. Per assicurarsi che il codice di elaborazione esegue il mapping di tutti gli usi che possono cambiare tra i report di input HID consecutivi, il codice di elaborazione deve impostare il numero di elementi in ogni elenco al 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 conversione.
Nel ciclo di elaborazione il codice deve mantenere questa struttura per l'uso dalla routine di conversione degli usi. 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 traduzione usa questa struttura per mantenere informazioni interne sullo stato delle chiavi del modificatore.
- Chiamare HidP_GetUsages per ottenere l'elenco di utilizzo corrente di utilizzi impostati su ON. Impostare il parametro di input UsagePage della routine get usages su HID_USAGE_PAGE_KEYBOARD.
- Chiamare HidP_UsageListDifference per confrontare l'elenco di utilizzo corrente di utilizzi a 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 di traduzione, impostando ChangedUsageList nell'elenco di utilizzo di interruzione, KeyAction su HidP_KeyboardBreak e ModifierState sulla struttura gestita dal codice di elaborazione per la routine di conversione. La routine di conversione usa la routine di callback insertCodesProcedureper restituire i codici di analisi di interruzione al ciclo di elaborazione.
- Chiamare la routine di utilizzo di traduzione, impostando ChangedUsageList sull'elenco di utilizzo, KeyAction su HidP_KeyboardMake e ModifierState sulla struttura gestita dal codice di elaborazione per la routine di conversione. La routine di conversione usa la routine di callback insertCodesProcedureper restituire i codici di analisi al ciclo di elaborazione.
- Aggiornare l'elenco di utilizzo precedente all'elenco di utilizzo corrente.
Requisiti
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 |