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 |
---|---|
|
La routine de traduction de l’utilisation a correctement mappé toutes les utilisations valides dans la liste d’utilisation modifiée. |
|
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.
- 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.
- 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.
- 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.
- 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.
- Mettez à jour la liste d’utilisation précédente vers la liste d’utilisation actuelle.
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 |