função HidP_TranslateUsagesToI8042ScanCodes (hidpi.h)
A rotina HidP_TranslateUsagesToI8042ScanCodes mapeia uma lista de usos 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 traduzir 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ção especificada.
typedef enum _HIDP_KEYBOARD_DIRECTION {
HidP_Keyboard_Break,
HidP_Keyboard_Make
} HIDP_KEYBOARD_DIRECTION;
HidP_Keyboard_Break
Especifica uma direção de interrupçã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 uma direção de make (tecla para baixo). A lista de uso alterada contém os usos definidos como ON que foram definidos anteriormente como OFF (que corresponde às chaves que estavam anteriormente ativas, mas agora estão inativas).
[in, out] ModifierState
Ponteiro para uma estrutura _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 do 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 InsertCodesProcedure .
NewScanCodes
Ponteiro para o primeiro byte de um código de verificação que a rotina de uso de tradução retorna para o 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 InsertCodesProcedure .
Retornar valor
HidP_TranslateUsagesToI8042ScanCodes retorna um dos seguintes valores de status:
Código de retorno | Descrição |
---|---|
|
A rotina de uso de tradução mapeou com êxito todos os usos válidos na lista de uso alterada. |
|
Um uso na lista de uso alterada mapeada para um código de verificação de teclado inválido. |
Comentários
HidP_TranslateUsagesToI8042ScanCodes mapeia sequencialmente os usos de botão de teclado na lista de uso alterada na ordem em que 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 uso de tradução continua a mapear os usos na lista até que ocorra um dos seguintes: 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 interromper códigos de verificação. As operações a seguir ilustram como usar a rotina de traduzir 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ção e uma lista de uso de make.
Cada lista é uma matriz de usos inicializada por zero. 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 por zero para uso pela rotina de usos de tradução.
No loop de processamento, o código deve manter essa estrutura para uso pela rotina de usos de tradução. 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 uso de tradução 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 como HID_USAGE_PAGE_KEYBOARD.
- Chame HidP_UsageListDifference para comparar a lista de uso atual de usos com uma lista de uso anterior. A rotina de diferença de lista de uso retorna uma lista de uso de interrupção e uma lista fazer uso.
- Chame a rotina de uso de tradução, definindo ChangedUsageList como a lista de uso de interrupção, KeyAction como HidP_KeyboardBreak e ModifierState para a estrutura que o código de processamento mantém para a rotina de usos de tradução. A rotina traduzir 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 uso de tradução, 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 usos de tradução. A rotina de traduzir 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 |
---|---|
Cliente mínimo com suporte | Disponível no Windows 2000 e versões posteriores do Windows. |
Plataforma de Destino | Universal |
Cabeçalho | hidpi.h (inclua Hidpi.h) |
Biblioteca | Hidparse.lib |
IRQL | <= DISPATCH_LEVEL |