Compartilhar via


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
HIDP_STATUS_SUCCESS
A rotina de uso de tradução mapeou com êxito todos os usos válidos na lista de uso alterada.
HIDP_STATUS_I8042_TRANS_UNKNOWN
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.

Depois de inicializar as estruturas necessárias, cada iteração do loop de processamento normalmente inclui a seguinte sequência de operações:
  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Atualize a lista de uso anterior para a lista de uso atual.
Para obter informações sobre o mapeamento entre os usos de HID e os códigos de verificação de teclado PS/2, consulte o site de suporte a teclas e códigos de verificação .

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

Confira também

HidP_GetUsages

HidP_MaxUsageListLength

HidP_UsageListDifference