Partager via


HidP_TranslateUsagesToI8042ScanCodes, fonction (hidpi.h)

La routine HidP_TranslateUsagesToI8042ScanCodes mappe une liste d’utilisations HID sur la page d’utilisation HID_USAGE_PAGE_KEYBOARD à leurs codes d’analyse PS/2 respectifs (jeu de codes d’analyse 1).

Syntaxe

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
);

Paramètres

[in] ChangedUsageList

Pointeur vers une liste d’utilisations du clavier (bouton). La routine d’utilisations de traduction interprète un zéro comme un délimiteur qui met fin à la liste d’utilisation.

[in] UsageListLength

Spécifie le nombre maximal d’utilisations possibles dans la liste des utilisations modifiées.

[in] KeyAction

Identifie la direction clé pour la liste d’utilisation des modifications spécifiées.

typedef enum _HIDP_KEYBOARD_DIRECTION {
    HidP_Keyboard_Break,
    HidP_Keyboard_Make
} HIDP_KEYBOARD_DIRECTION;

HidP_Keyboard_Break

Spécifie un sens d’arrêt (touche vers le haut). La liste d’utilisation modifiée contient les utilisations définies sur OFF qui étaient précédemment définies sur ON (ce qui correspond aux clés qui étaient précédemment en panne, mais qui sont maintenant activées).

HidPKeyboard_Make

Spécifie une direction de création (touche vers le bas). La liste d’utilisation modifiée contient les utilisations définies sur ON qui étaient précédemment définies sur OFF (ce qui correspond aux clés qui étaient précédemment en place, mais qui sont maintenant en panne).

[in, out] ModifierState

Pointeur vers une structure _HIDP_KEYBOARD_MODIFIER_STATE que l’appelant gère pour une utilisation par la routine des utilisations de traduction. La structure d’état du modificateur identifie l’état des touches de modification du clavier.

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;
};

Chaque membre de la structure d’état du modificateur identifie si l’utilisation correspondante est définie sur ON (1) ou OFF (zéro).

Pour plus d’informations sur l’utilisation d’une structure d’état modificateur avec la routine d’utilisation de translate, consultez la section Remarques.

[in] InsertCodesProcedure

Pointeur vers une routine de rappel de type PHIDP_INSERT_SCANCODES fournie par l’appelant que la routine d’utilisation de translate utilise pour retourner les codes d’analyse mappés à l’appelant de la routine d’utilisation translate.

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

Context

Pointeur vers le contexte de l’appelant de la routine d’utilisation de translate. La routine d’utilisation de translate transmet le pointeur InsertCodesContext à la routine InsertCodesProcedure .

NewScanCodes

Pointeur vers le premier octet d’un code d’analyse que la routine d’utilisation de translate retourne à l’appelant de la routine d’utilisation de traduction.

Longueur

Spécifie la longueur, en octets, du code d’analyse. Un code d’analyse ne peut pas dépasser quatre octets.

[in, optional] InsertCodesContext

Pointeur vers un contexte défini par l’appelant que la routine d’utilisation de la traduction passe à la routine InsertCodesProcedure .

Valeur retournée

HidP_TranslateUsagesToI8042ScanCodes retourne l’une des valeurs status suivantes :

Code de retour Description
HIDP_STATUS_SUCCESS
La routine d’utilisation de traduction a mappé toutes les utilisations valides dans la liste des utilisations modifiées.
HIDP_STATUS_I8042_TRANS_UNKNOWN
Utilisation dans la liste d’utilisation modifiée mappée à un code d’analyse clavier non valide.

Remarques

HidP_TranslateUsagesToI8042ScanCodes mappe séquentiellement les utilisations du bouton clavier dans la liste des utilisations modifiées dans l’ordre dans lequel elles se produisent dans la liste, en commençant par la valeur dans ChangedUsageList. Une fois que la routine d’utilisation de traduction a correctement mappé une utilisation, elle utilise la routine InsertCodesProcedure de l’appelant pour renvoyer le code d’analyse correspondant à l’appelant. La routine d’utilisation translate continue de mapper les utilisations dans la liste jusqu’à ce que l’une des opérations suivantes se produise : une valeur d’utilisation dans la liste est zéro ; il mappe le nombre d’utilisations spécifié par UsageListLength ; une utilisation correspond à un code d’analyse du clavier non valide.

HidP_TranslateUsagesToI8042ScanCodes est principalement conçu pour être utilisé dans une boucle de traitement qui détermine à plusieurs reprises la liste d’utilisation actuelle (utilisations actuellement définies sur ON), les compare à une liste d’utilisation précédente (utilisations précédemment définies sur ON) et mappe la différence entre les listes d’utilisation actuelle et précédente pour créer des codes d’analyse et briser les codes d’analyse. Les opérations suivantes illustrent comment utiliser la routine d’utilisations de traduction.

Avant de commencer une boucle de traitement, le code de traitement alloue et initialise généralement les données suivantes :

  • Une liste d’utilisation précédente, une liste d’utilisation actuelle, une liste d’interruptions d’utilisation et une liste d’utilisation.

    Chaque liste est un tableau d’utilisations initialisé à zéro. Pour s’assurer que le code de traitement mappe toutes les utilisations pouvant changer entre les rapports d’entrée HID consécutifs, le code de traitement doit définir le nombre d’éléments de chaque liste sur le nombre maximal d’utilisations que HidP_GetUsages pouvez retourner pour la page d’utilisation HID_USAGE_PAGE_KEYBOARD. Ce nombre est obtenu à l’aide de HidP_MaxUsageListLength.

  • Structure _HIDP_KEYBOARD_MODIFIER_STATE initialisée à zéro à utiliser par la routine d’utilisations de traduction.

    Dans la boucle de traitement, le code doit conserver cette structure pour une utilisation par la routine des utilisations de traduction. Le code de traitement peut lire l’état des clés de modification, mais il ne doit pas modifier la structure. La routine d’utilisation de translate utilise cette structure pour conserver des informations internes sur l’état des clés de modification.

Après avoir initialisé les structures requises, chaque itération de la boucle de traitement inclut généralement la séquence d’opérations suivante :
  1. Appelez HidP_GetUsages pour obtenir la liste d’utilisation actuelle des utilisations définies sur ON. Définissez le paramètre d’entrée UsagePage de la routine obtenir des utilisations sur HID_USAGE_PAGE_KEYBOARD.
  2. Appelez HidP_UsageListDifference pour comparer la liste d’utilisations actuelle à une liste d’utilisations précédente. La routine de différence de liste d’utilisation retourne une liste d’interruptions d’utilisation et une liste d’utilisation.
  3. Appelez la routine d’utilisation translate, affectez à ChangedUsageList la liste d’interruption de l’utilisation, KeyAction à HidP_KeyboardBreak et ModifierState à la structure que le code de traitement gère pour la routine d’utilisations de traduction. La routine d’utilisations de traduction utilise la routine de rappel InsertCodesProcedurepour renvoyer les codes d’analyse d’arrêt à la boucle de traitement.
  4. Appelez la routine d’utilisation translate, affectez à ChangedUsageList la liste d’utilisation, KeyAction à HidP_KeyboardMake et ModifierState à la structure que le code de traitement gère pour la routine d’utilisations de traduction. La routine d’utilisations de traduction utilise la routine de rappel InsertCodesProcedurepour retourner les codes d’analyse make à la boucle de traitement.
  5. Mettez à jour la liste d’utilisation précédente vers la liste d’utilisation actuelle.
Pour plus d’informations sur le mappage entre les utilisations HID et les codes d’analyse du clavier PS/2, consultez le site web prise en charge des touches et codes d’analyse .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Windows 2000 et versions ultérieures de Windows.
Plateforme cible Universal
En-tête hidpi.h (inclure Hidpi.h)
Bibliothèque Hidparse.lib
IRQL <= DISPATCH_LEVEL

Voir aussi

HidP_GetUsages

HidP_MaxUsageListLength

HidP_UsageListDifference