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 |
---|---|
|
La rutina de uso de traducción ha asignado correctamente todos los usos válidos de la lista de uso modificados. |
|
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.
- 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.
- 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.
- 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.
- 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.
- Actualice la lista de uso anterior a la lista de uso actual.
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 |