HidP_TranslateUsagesToI8042ScanCodes función (hidpi.h)

La rutina de HidP_TranslateUsagesToI8042ScanCodes asigna una lista de usos de HID en la página de uso de HID_USAGE_PAGE_KEYBOARD a sus respectivos códigos de examen PS/2 (Conjunto de códigos de examen 1).

Sintaxis

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

Puntero a una lista de usos de teclado (botón). La rutina de traducción interpreta un cero como un delimitador que finaliza la lista de uso.

[in] UsageListLength

Especifica el número máximo posible de usos en la lista de usos modificados.

[in] KeyAction

Identifica la dirección clave de la lista de uso de cambios especificada.

typedef enum _HIDP_KEYBOARD_DIRECTION {
    HidP_Keyboard_Break,
    HidP_Keyboard_Make
} HIDP_KEYBOARD_DIRECTION;

HidP_Keyboard_Break

Especifica una dirección de interrupción (tecla arriba). La lista de uso modificado contiene los usos establecidos en OFF que se establecieron anteriormente en ON (que corresponde a las claves que anteriormente estaban inactivas, pero ahora están activas).

HidPKeyboard_Make

Especifica una dirección de marca (tecla abajo). La lista de uso modificado contiene los usos establecidos en ON que se establecieron anteriormente en OFF (que corresponde a las claves que estaban anteriormente activadas, pero ahora están inactivas).

[in, out] ModifierState

Puntero a una estructura de _HIDP_KEYBOARD_MODIFIER_STATE que el autor de la llamada mantiene para su uso por la rutina de traducción de usos. La estructura de estado modificador identifica el estado de las 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 miembro de la estructura de estado modificador identifica si el uso correspondiente se establece en ON (1) o OFF (cero).

Consulte la sección Comentarios para obtener más información sobre cómo se usa una estructura de estado modificador con la rutina de uso de traducción.

[in] InsertCodesProcedure

Puntero a una rutina de devolución de llamada proporcionada por el autor de la llamada PHIDP_INSERT_SCANCODES que la rutina de uso de traducción usa para devolver los códigos de examen asignados al autor de la llamada de la rutina de uso de traducción.

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

Context

Puntero al contexto del autor de la llamada de la rutina de uso de traducción. La rutina de uso de traducción pasa el puntero InsertCodesContext a la rutina InsertCodesProcedure .

NewScanCodes

Puntero al primer byte de un código de examen que la rutina de uso de traducción devuelve al autor de la llamada de la rutina de uso de traducción.

Length

Especifica la longitud, en bytes, del código de examen. Un código de examen no puede superar los cuatro bytes.

[in, optional] InsertCodesContext

Puntero a un contexto definido por el autor de la llamada que pasa la rutina de uso de traducción a la rutina InsertCodesProcedure .

Valor devuelto

HidP_TranslateUsagesToI8042ScanCodes devuelve uno de los siguientes valores de estado:

Código devuelto Descripción
HIDP_STATUS_SUCCESS
La rutina de uso de traducción ha asignado correctamente todos los usos válidos de la lista de uso modificados.
HIDP_STATUS_I8042_TRANS_UNKNOWN
Un uso de la lista de uso modificada asignada a un código de examen de teclado no válido.

Comentarios

HidP_TranslateUsagesToI8042ScanCodes asigna secuencialmente los usos del botón de teclado en la lista de uso modificados en el orden en que se producen en la lista, empezando por el valor de ChangedUsageList. Una vez que la rutina de uso de traducción asigna correctamente un uso, usa la rutina InsertCodesProcedure del autor de la llamada para devolver el código de examen correspondiente al autor de la llamada. La rutina de uso de traducción continúa asignando los usos de la lista hasta que se produzca uno de los siguientes: un valor de uso en la lista es cero; asigna el número de usos especificados por UsageListLength; un uso se asigna a un código de examen de teclado no válido.

HidP_TranslateUsagesToI8042ScanCodes está diseñado principalmente para usarse en un bucle de procesamiento que determina repetidamente la lista de uso actual (usos que están actualmente establecidos en ON), los compara con una lista de uso anterior (usos que se establecieron anteriormente en ON) y asigna la diferencia entre las listas de uso actuales y anteriores para hacer códigos de examen y códigos de examen de interrupción. Las operaciones siguientes muestran cómo usar la rutina de traducción de usos.

Antes de comenzar un bucle de procesamiento, el código de procesamiento normalmente asigna e inicializa los datos siguientes:

  • Una lista de uso anterior, una lista de uso actual, una lista de uso de interrupción y una lista de uso make.

    Cada lista es una matriz inicializada de cero de usos. Para asegurarse de que el código de procesamiento asigna todos los usos que pueden cambiar entre los informes de entrada HID consecutivos, el código de procesamiento debe establecer el número de elementos de cada lista en el número máximo de usos que HidP_GetUsages puede devolver para la página de uso de HID_USAGE_PAGE_KEYBOARD. Este número se obtiene mediante HidP_MaxUsageListLength.

  • Estructura de _HIDP_KEYBOARD_MODIFIER_STATE inicializada con cero para su uso por parte de la rutina de traducción.

    En el bucle de procesamiento, el código debe mantener esta estructura para usarla en la rutina de traducción de usos. El código de procesamiento puede leer el estado de las claves modificadoras, pero el código no debe modificar la estructura. La rutina de uso de traducción usa esta estructura para mantener información interna sobre el estado de las claves modificadoras.

Después de inicializar las estructuras necesarias, cada iteración del bucle de procesamiento suele incluir la siguiente secuencia de operaciones:
  1. Llame a HidP_GetUsages para obtener la lista de usos actual de los usos establecidos en ON. Establezca el parámetro de entrada UsagePage de la rutina get usages en HID_USAGE_PAGE_KEYBOARD.
  2. Llame a HidP_UsageListDifference para comparar la lista de usos actual con una lista de uso anterior. La rutina de diferencia de lista de uso devuelve una lista de uso de interrupción y una lista de uso make.
  3. Llame a la rutina de uso de traducción, estableciendo ChangedUsageList en la lista de uso de interrupción, KeyAction en HidP_KeyboardBreak y ModifierState en la estructura que mantiene el código de procesamiento para la rutina de traducción de usos. La rutina de traducción de usos usa la rutina de devolución de llamada insertCodesProcedurepara devolver los códigos de examen de interrupción al bucle de procesamiento.
  4. Llame a la rutina de uso de traducción, estableciendo ChangedUsageList en la lista de uso make, KeyAction en HidP_KeyboardMake y ModifierState en la estructura que mantiene el código de procesamiento para la rutina de traducción de usos. La rutina de usos de traducción usa la rutina de devolución de llamada insertCodesProcedurepara devolver los códigos de examen make al bucle de procesamiento.
  5. Actualice la lista de uso anterior a la lista de uso actual.
Para obtener información sobre la asignación entre usos de HID y códigos de examen de teclado PS/2, consulte el sitio web de códigos de detección y soporte técnico de teclas.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows 2000 y versiones posteriores de Windows.
Plataforma de destino Universal
Encabezado hidpi.h (include Hidpi.h)
Library Hidparse.lib
IRQL <= DISPATCH_LEVEL

Consulte también

HidP_GetUsages

HidP_MaxUsageListLength

HidP_UsageListDifference