função HidP_TranslateUsagesToI8042ScanCodes (hidpi.h)
A rotina de HidP_TranslateUsagesToI8042ScanCodes mapeia uma lista de usos de HID na página de uso do HID_USAGE_PAGE_KEYBOARD para seus respectivos códigos de verificação PS/2 (Conjunto de Códigos de Verificação 1).
Sintaxe
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
);
Parâmetros
[in] ChangedUsageList
Ponteiro para uma lista de usos de teclado (botão). A rotina de tradução de usos interpreta um zero como um delimitador que encerra a lista de uso.
[in] UsageListLength
Especifica o número máximo possível de usos na lista de uso alterada.
[in] KeyAction
Identifica a direção da chave para a lista de uso de alterações especificada.
typedef enum _HIDP_KEYBOARD_DIRECTION {
HidP_Keyboard_Break,
HidP_Keyboard_Make
} HIDP_KEYBOARD_DIRECTION;
HidP_Keyboard_Break
Especifica uma quebra de direção (tecla para cima). A lista de uso alterada contém os usos definidos como OFF que foram definidos anteriormente como ON (que corresponde às chaves que estavam inativas anteriormente, mas agora estão ativas).
HidPKeyboard_Make
Especifica um fazer direção (tecla para baixo). A lista de uso alterada contém os usos definidos como ON que foram definidos anteriormente como OFF (que correspondem às chaves anteriormente atualizadas, mas agora estão inoperantes).
[in, out] ModifierState
Ponteiro para uma estrutura de _HIDP_KEYBOARD_MODIFIER_STATE que o chamador mantém para uso pela rotina de usos de tradução. A estrutura de estado do modificador identifica o estado das teclas modificadoras de teclado.
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;
};
Cada membro da estrutura de estado modificador identifica se o uso correspondente está definido como ON (1) ou OFF (zero).
Consulte a seção Comentários para obter mais informações sobre como uma estrutura de estado modificador é usada com a rotina de uso de tradução.
[in] InsertCodesProcedure
Ponteiro para uma rotina de retorno de chamada do tipo PHIDP_INSERT_SCANCODES fornecida pelo chamador que a rotina de uso de tradução usa para retornar os códigos de verificação mapeados para o chamador da rotina de uso de tradução.
typedef BOOLEAN (*PHIDP_INSERT_SCANCODES)(
IN PVOID Context,
IN PCHAR NewScanCodes,
IN ULONG Length
);
Contexto
Ponteiro para o contexto do chamador da rotina de uso de tradução. A rotina de tradução de uso passa o ponteiro InsertCodesContext para a rotina de InsertCodesProcedure.
NewScanCodes
Ponteiro para o primeiro byte de um código de verificação que a rotina de tradução de uso retorna ao chamador da rotina de uso de tradução.
Comprimento
Especifica o comprimento, em bytes, do código de verificação. Um código de verificação não pode exceder quatro bytes.
[in, optional] InsertCodesContext
Ponteiro para um contexto definido pelo chamador que a rotina de tradução de uso passa para a rotina de InsertCodesProcedure.
Valor de retorno
HidP_TranslateUsagesToI8042ScanCodes retorna um dos seguintes valores de status:
Código de retorno | Descrição |
---|---|
|
A rotina de tradução de uso mapeou com êxito todos os usos válidos na lista de uso alterada. |
|
Um uso na lista de uso alterado mapeado para um código de verificação de teclado inválido. |
Observações
HidP_TranslateUsagesToI8042ScanCodes mapeia sequencialmente os usos do botão de teclado na lista de uso alterada na ordem em que eles ocorrem na lista, começando com o valor em ChangedUsageList. Depois que a rotina de uso de tradução mapeia com êxito um uso, ela usa a rotina InsertCodesProcedure do chamador para retornar o código de verificação correspondente ao chamador. A rotina de tradução de uso continua a mapear os usos na lista até que um dos seguintes ocorra: um valor de uso na lista é zero; mapeia o número de usos especificado por UsageListLength; um uso é mapeado para um código de verificação de teclado inválido.
HidP_TranslateUsagesToI8042ScanCodes foi projetado principalmente para ser usado em um loop de processamento que determina repetidamente a lista de uso atual (usos que estão atualmente definidos como ON), compara-os com uma lista de uso anterior (usos que foram definidos anteriormente como ON) e mapeia a diferença entre as listas de uso atuais e anteriores para fazer códigos de verificação e quebrar códigos de verificação. As operações a seguir ilustram como usar a rotina de tradução de usos.
Antes de iniciar um loop de processamento, o código de processamento normalmente aloca e inicializa os seguintes dados:
-
Uma lista de uso anterior, lista de uso atual, lista de uso de interrupções e uma lista de uso de make.
Cada lista é uma matriz inicializada zero de usos. Para garantir que o código de processamento mapeie todos os usos que podem ser alterados entre relatórios de entrada hid consecutivos, o código de processamento deve definir o número de elementos em cada lista para o número máximo de usos que HidP_GetUsages podem retornar para a página de uso do HID_USAGE_PAGE_KEYBOARD. Esse número é obtido usando HidP_MaxUsageListLength.
-
Uma estrutura de _HIDP_KEYBOARD_MODIFIER_STATE inicializada zero para uso pela rotina de tradução de usos.
No loop de processamento, o código deve manter essa estrutura para uso pela rotina de tradução de usos. O código de processamento pode ler o estado das chaves modificadoras, mas o código não deve modificar a estrutura. A rotina de tradução de uso usa essa estrutura para manter informações internas sobre o estado das chaves modificadoras.
- Chame HidP_GetUsages para obter a lista de uso atual de usos definidos como ON. Defina o parâmetro de entrada UsagePage da rotina get usages para HID_USAGE_PAGE_KEYBOARD.
- Chame HidP_UsageListDifference para comparar a lista de usos atual com uma lista de uso anterior. A rotina de diferença de lista de uso retorna uma lista de uso de interrupções e uma lista de uso make.
- Chame a rotina de tradução de uso, definindo ChangedUsageList para a lista de uso de interrupção, keyaction para HidP_KeyboardBreak e ModifierState para a estrutura que o código de processamento mantém para a rotina de tradução de usos. A rotina de tradução de usos usa a rotina de retorno de chamada InsertCodesProcedurepara retornar os códigos de verificação de interrupção para o loop de processamento.
- Chame a rotina de tradução de uso, definindo ChangedUsageList para a lista de uso make, KeyAction para HidP_KeyboardMake e ModifierState para a estrutura que o código de processamento mantém para a rotina de tradução de usos. A rotina de tradução de usos usa a rotina de retorno de chamada InsertCodesProcedurepara retornar os códigos de verificação para o loop de processamento.
- Atualize a lista de uso anterior para a lista de uso atual.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Disponível no Windows 2000 e versões posteriores do Windows. |
da Plataforma de Destino | Universal |
cabeçalho | hidpi.h (inclua Hidpi.h) |
biblioteca | Hidparse.lib |
IRQL | <= DISPATCH_LEVEL |