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 de traduction d’utilisation 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é 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 une direction de saut (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 de création (touche 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 (qui correspond aux clés qui étaient auparavant en haut, mais qui sont maintenant en panne).

[in, out] ModifierState

Pointeur vers une structure _HIDP_KEYBOARD_MODIFIER_STATE que l’appelant conserve pour une utilisation par la routine d’utilisation de translate. 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 Notes.

[in] InsertCodesProcedure

Pointeur vers une routine de rappel de type PHIDP_INSERT_SCANCODES fournie par l’appelant que la routine de traduction d’utilisation utilise pour retourner les codes d’analyse mappés à l’appelant de la routine d’utilisation de 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 de traduction d’utilisation. 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 translate.

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 traduction d’utilisation passe à la routine InsertCodesProcedure .

Valeur retournée

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

Code de retour Description
HIDP_STATUS_SUCCESS
La routine de conversion 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.

Notes

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 de ChangedUsageList. Une fois que la routine de traduction de l’utilisation mappe correctement une utilisation, elle utilise la routine InsertCodesProcedure de l’appelant pour retourner 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 pour effectuer des codes d’analyse et des codes d’analyse d’arrêt. Les opérations suivantes illustrent comment utiliser la routine de traduction des utilisations.

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 garantir 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 translate.

    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 des utilisations actuelles 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’utilisation précédente. La routine de différence de liste d’utilisation retourne une liste d’utilisation de sauts et une liste d’utilisation.
  3. Appelez la routine d’utilisation translate, en définissant ChangedUsageList sur la liste d’utilisation de saut, KeyAction sur HidP_KeyboardBreak et ModifierState sur la structure gérée par le code de traitement pour la routine d’utilisation de traduction. La routine d’utilisation de translate utilise la routine de rappel InsertCodesProcedurepour retourner les codes d’analyse d’arrêt à la boucle de traitement.
  4. Appelez la routine d’utilisation de translate, en définissant ChangedUsageList sur la liste d’utilisation, KeyAction sur HidP_KeyboardMake et ModifierState sur la structure gérée par le code de traitement pour la routine d’utilisation de traduction. La routine d’utilisation de translate utilise la routine de rappel InsertCodesProcedurepour retourner 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 le site web de prise en charge des touches et de codes d’analyse .

Spécifications

   
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