Compartir a través de


función HidP_TranslateUsagesToI8042ScanCodes (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 delimitador que finaliza la lista de usos.

[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 un interrupción direcció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 estaban anteriormente inactivas, pero ahora están activas).

HidPKeyboard_Make

Especifica un hacer dirección (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 anteriormente estaban activas, 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 del modificador identifica el estado de las teclas modificadoras del 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 de tipo PHIDP_INSERT_SCANCODES proporcionada por el autor de la llamada que usa la rutina de uso de traducción 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
    );

Contexto

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 devuelve la rutina de uso de traducción al autor de la llamada de la rutina de uso de traducción.

Largura

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 de 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 en la lista de uso modificado asignado a un código de examen de teclado no válido.

Observaciones

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 en ChangedUsageList. Después de que la rutina de uso de traducción asigne correctamente un uso, usa el InsertCodesProcedure rutina 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 produce 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 se establecen actualmente 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 análisis de interrupción. Las siguientes operaciones 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, lista de uso actual, lista de uso de interrupción y una lista de uso make.

    Cada lista es una matriz de usos inicializada sin inicializar. 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 la rutina de traducción.

    En el bucle de procesamiento, el código debe mantener esta estructura para su uso por la rutina de traducción. 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 uso actual de los usos que se establecen en ON. Establezca el parámetro usagePage de entrada de la rutina obtener usos en HID_USAGE_PAGE_KEYBOARD.
  2. Llame a HidP_UsageListDifference para comparar la lista de uso actual de usos 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 de marca.
  3. Llame a la rutina de uso de traducción, estableciendo ChangedUsageList a la lista de uso de interrupciones, KeyAction a HidP_KeyboardBreak y ModificadorState a la estructura que mantiene el código de procesamiento para la rutina de traducción. La rutina de usos de traducción 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 a HidP_KeyboardMake y ModifierState a 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 de 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 los usos de HID y los códigos de examen de teclado PS/2, consulte el sitio web de compatibilidad con teclas y códigos de examen.

Requisitos

Requisito Valor
cliente mínimo admitido Disponible en Windows 2000 y versiones posteriores de Windows.
de la plataforma de destino de Universal
encabezado de hidpi.h (incluya Hidpi.h)
biblioteca de Hidparse.lib
irQL <= DISPATCH_LEVEL

Consulte también

HidP_GetUsages

HidP_MaxUsageListLength

HidP_UsageListDifference