Função HidP_TranslateUsagesToI8042ScanCodes (hidpi. h)

A rotina HidP_TranslateUsagesToI8042ScanCodes mapeia uma lista de usos de HID na página HID_USAGE_PAGE_KEYBOARD uso para seus respectivos códigos de verificação de PS/2 (exame de código definido 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 converter usos interpreta um zero como um delimitador que termina a lista de uso.

[in] UsageListLength

Especifica o número máximo possível de usos na lista de uso alterado.

[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 direção de interrupção (chave para cima). A lista de uso alterado contém os usos definidos como OFF que foram previamente definidos como ON (que corresponde às chaves que estavam desativadas, mas agora estão ativas).

HidPKeyboard_Make

Especifica uma direção de Make (chave para baixo). A lista de uso alterado contém os usos definidos como ativado que foram previamente definidos como OFF (que corresponde às chaves que estavam anteriormente, mas que agora estão inativas).

[in, out] ModifierState

Ponteiro para uma estrutura de _HIDP_KEYBOARD_MODIFIER_STATE que o chamador mantém para uso pela rotina de conversão de usos. 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 de modificador é usada com a rotina de conversão de uso.

[in] InsertCodesProcedure

Ponteiro para uma rotina de retorno de chamada de digitação PHIDP_INSERT_SCANCODES fornecida pelo chamador que a rotina de uso de conversão usa para retornar os códigos de verificação mapeados para o chamador da rotina de conversão de uso.

typedef BOOLEAN (*PHIDP_INSERT_SCANCODES)(
    IN PVOID  Context,
    IN PCHAR  NewScanCodes,
    IN ULONG  Length
    );

Contexto

Ponteiro para o contexto do chamador da rotina de conversão de uso. A rotina de conversão de uso passa o ponteiro InsertCodesContext para a rotina InsertCodesProcedure .

NewScanCodes

Aponta para o primeiro byte de um código de verificação que a rotina de uso de conversão retorna para o chamador da rotina de conversão de uso.

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 uso de conversão passa para a rotina InsertCodesProcedure .

Valor retornado

HidP_TranslateUsagesToI8042ScanCodes retorna um dos seguintes valores de status:

Código de retorno Descrição
HIDP_STATUS_SUCCESS
A rotina de tradução de uso 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 do botão de teclado na lista de uso alterado na ordem em que eles ocorrem na lista, começando com o valor em ChangedUsageList. Depois que a rotina de tradução de uso 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 conversão de uso continua mapeando os usos na lista até que ocorra um dos seguintes: um valor de uso na lista é zero; Ele 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 é 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-as com uma lista de uso anterior (usos que foram definidos anteriormente como on) e mapeia a diferença entre as listas de uso atual e anterior 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 conversã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 quebra e uma lista de make Usage.

    Cada lista é uma matriz de usos com inicialização zero. Para garantir que o código de processamento mapeie todos os usos que podem ser alterados entre os 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 pode retornar para a página de uso de HID_USAGE_PAGE_KEYBOARD. Esse número é obtido usando HidP_MaxUsageListLength.

  • Uma estrutura de _HIDP_KEYBOARD_MODIFIER_STATE inicializada por zero para ser usada pela rotina de conversão de usos.

    No loop de processamento, o código deve manter essa estrutura para ser usada pela rotina de conversão de usos. O código de processamento pode ler o estado das teclas modificadoras, mas o código não deve modificar a estrutura. A rotina de conversão de uso usa essa estrutura para manter informações internas sobre o estado das chaves modificadoras.

After initializing the required structures, each iteration of the processing loop typically includes the following sequence of operations:
  1. Chame HidP_GetUsages para obter a lista de uso atual de usos que estão definidos como on. Defina o parâmetro de entrada UsagePage da rotina obter usos 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 da lista de uso retorna uma lista de uso de quebra e uma lista fazer uso.
  3. Chame a rotina de conversão de uso, definindo ChangedUsageList para a lista de uso de quebra, keyaction para HidP_KeyboardBreak e modifierstate para a estrutura que o código de processamento mantém para a rotina de conversão de usos. A rotina converter usos usa a rotina de retorno de chamada InsertCodesProcedures para retornar os códigos de interrupção de verificação para o loop de processamento.
  4. Chame a rotina de conversão de uso, definindo ChangedUsageList para a lista Make Usage, keyaction para HidP_KeyboardMake e modifierstate para a estrutura que o código de processamento mantém para a rotina de conversão de usos. A rotina converter usos usa a rotina de retorno de chamada InsertCodesProcedures para retornar os códigos de verificação de make ao 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 códigos de verificação e suporte de chave .

Requisitos

   
Cliente mínimo com suporte disponível em Windows 2000 e versões posteriores do Windows.
Plataforma de Destino Universal
Cabeçalho hidpi. h (incluir hidpi. h)
Biblioteca Hidparse. lib
IRQL <= DISPATCH_LEVEL

Confira também

HidP_GetUsages

HidP_MaxUsageListLength

HidP_UsageListDifference