Partager via


fonction HidP_TranslateUsagesToI8042ScanCodes (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’utilisation 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 d’utilisation modifiée.

[in] KeyAction

Identifie la direction clé de la liste d’utilisation des modifications spécifiée.

typedef enum _HIDP_KEYBOARD_DIRECTION {
    HidP_Keyboard_Break,
    HidP_Keyboard_Make
} HIDP_KEYBOARD_DIRECTION;

HidP_Keyboard_Break

Spécifie un saut direction (clé vers le haut). La liste d’utilisation modifiée contient les utilisations définies sur OFF qui ont été précédemment définies sur ON (qui correspond aux clés qui étaient précédemment en panne, mais qui sont maintenant en cours).

HidPKeyboard_Make

Spécifie une direction (clé vers le bas). La liste d’utilisation modifiée contient les utilisations définies sur ON qui ont été précédemment définies sur OFF (ce qui correspond aux clés qui étaient précédemment haut, 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 d’utilisation de traduction. La structure d’état du modificateur identifie l’état des touches de modificateur de 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 la façon dont une structure d’état de modificateur est utilisée avec la routine d’utilisation de translate, consultez la section Remarques.

[in] InsertCodesProcedure

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

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

Contexte

Pointeur vers le contexte de l’appelant de la routine d’utilisation de traduction. 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 de traduction d’utilisation 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 de conversion passe à la routine d’utilisation InsertCodesProcedure routine.

Valeur de retour

HidP_TranslateUsagesToI8042ScanCodes retourne l’une des valeurs d’état suivantes :

Retourner le code Description
HIDP_STATUS_SUCCESS
La routine de traduction de l’utilisation a correctement mappé toutes les utilisations valides dans la liste d’utilisation modifiée.
HIDP_STATUS_I8042_TRANS_UNKNOWN
Utilisation dans la liste d’utilisation modifiée mappée à un code d’analyse de clavier non valide.

Remarques

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

HidP_TranslateUsagesToI8042ScanCodes est conçu principalement 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 actuelles et précédentes afin d’effectuer des codes d’analyse et d’interrompre 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’utilisation de sauts et une liste d’utilisation.

    Chaque liste est un tableau d’utilisations initialisé zéro. Pour vous assurer que le code de traitement mappe toutes les utilisations qui peuvent 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 peut retourner pour la page d’utilisation HID_USAGE_PAGE_KEYBOARD. Ce nombre est obtenu à l’aide de HidP_MaxUsageListLength.

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

    Dans la boucle de traitement, le code doit conserver cette structure à utiliser par la routine d’utilisation de traduction. Le code de traitement peut lire l’état des touches de modification, mais le code ne doit pas modifier la structure. La routine d’utilisation de translate utilise cette structure pour conserver des informations internes sur l’état des touches 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 d’utilisation get 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’utilisation d’interruption et une liste d’utilisation.
  3. Appelez la routine d’utilisation de traduction, le paramètre ChangedUsageList à la liste d’utilisation de rupture, KeyAction à HidP_KeyboardBreak et ModifierState à la structure que le code de traitement conserve pour la routine d’utilisation de traduction. La routine d’utilisation de translate 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, en définissant ChangedUsageList à la liste d’utilisation, KeyAction à HidP_KeyboardMake et ModifierState à la structure que le code de traitement conserve pour les utilisations de traduction. La routine d’utilisation de translate utilise la routine de rappel InsertCodesProcedurepour renvoyer les codes d’analyse à 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 codes d’analyse du clavier HID et PS/2, consultez la prise en charge des touches et les codes d’analyse site web.

Exigences

Exigence Valeur
client minimum pris en charge Disponible dans Windows 2000 et versions ultérieures de Windows.
plateforme cible Universel
d’en-tête hidpi.h (include Hidpi.h)
bibliothèque Hidparse.lib
IRQL <= DISPATCH_LEVEL

Voir aussi

HidP_GetUsages

HidP_MaxUsageListLength

HidP_UsageListDifference