Scannez le tableau des codes de touches du clavier. Sur la question de l'évaluation des signaux numériques Pemin. claviers. Comment scanner les codes QR sur Android

Majorité claviers moderneséquipées de touches multimédia, et les souris disposent déjà de trois à sept boutons. Chauffeurs et toutes sortes de programmes utiles Windows seulement. Tout le monde sait que Linux est célèbre pour sa capacité à personnaliser le système pour vous-même, si, bien sûr, vous savez où et quoi configurer. Notre tâche est d'apprendre au pingouin à travailler avec des pains supplémentaires.

Détermination du code de numérisation de la clé

Peu importe ce que vous appuyez sur votre clavier, le serveur X et le noyau, en général, ne se soucient pas de ce qui est écrit ou dessiné dessus. Ils ne s'intéressent qu'au code de numérisation du bouton, et les X lisent d'abord la table des codes clés du noyau, puis le code clé est lié à sa propre table de codes. Si dans Problèmes Windows Il n'y a pas de paramètre pour les touches multimédia dans la console en tant que telle, donc sous Linux, vous devez configurer séparément la réaction à l'appui sur les boutons dans la console et dans X-Window.

Pour connaître le code clé, vous devez utiliser l'utilitaire xev inclus avec le serveur X. Après l'avoir lancé, la fenêtre Event Tester apparaît, appuyez maintenant successivement sur les touches, en mémorisant le code émis :

$xev
...
Événement KeyRelease, série 31, NON synthétique, fenêtre 0x3e00001,
racine 0x67, subw 0x0, heure 279734676, (311 611), racine :(1104 687),
état 0x2000, code clé 236 (keysym 0x1008ff19, XF86Mail), same_screen OUI,

XFilterEvent renvoie : Faux
Événement KeyRelease, série 31, NON synthétique, fenêtre 0x2600001,
racine 0x67, subw 0x0, heure 265877259, (883 334), racine :(886 358),
état 0x0, code clé 161 (keysym 0x0, NoSymbol), same_screen OUI,
XLookupString donne 0 octet :
XFilterEvent renvoie : Faux

Le résultat peut être énorme car chaque mouvement de la souris est suivi lorsqu'il passe sur la fenêtre Event Tester. La clé est décrite par le bloc KeyRelease, en particulier, la valeur du code clé est précisément le code de scan que nous voulons connaître. Dans l'exemple présenté, deux touches sont enfoncées. Le code clé 236 correspond au code clé du serveur X spécifié dans keysym, ainsi qu'à l'action XF86Mail, qui dans KDE lance le client de messagerie par défaut. Pour la clé numéro 161, le code et l'action ne sont pas définis.

Il est possible qu'une touche soit enfoncée, mais que son code de numérisation ne soit pas émis. Cela signifie que le noyau ne peut pas trouver de valeur correspondante. La sortie de dmesg doit contenir la ligne suivante :

Utilisez "setkeycodes 0xec "pour le faire savoir.

Autrement dit, il vous est proposé de définir vous-même le code de numérisation de la clé à l'aide de setkeycodes, et le choix de la valeur du code clé est très simple. Convertissez le chiffre obtenu en nombre décimal (la plupart des calculatrices peuvent le faire) et ajoutez 128. Dans cet exemple, 0xec = 236, c'est-à-dire que nous obtenons le code de numérisation 364. En cas de doute, la liste des codes de numérisation utilisés et inutilisés peut être visualisé en exécutant l'utilitaire getkeycodes dans la console ou dumpkeys. Par exemple, si le résultat est « getkeycodes | grep<код клавиши>"n'a rien donné, donc ce code peut être utilisé en toute sécurité.

L'utilitaire XKeycaps (www.jwz.org/xkeycaps), qui est une interface graphique pour Xmodmap, peut également aider à déterminer le code de numérisation.

Le programme xev, bien entendu, ne fonctionne pas dans la console. Pour connaître le code de scan émis par le noyau, vous devez utiliser l'utilitaire showkey ou getkeycodes :

$showkey
le clavier était en mode UNICODE
appuyez sur n'importe quelle touche (le programme se terminera 10 secondes après la dernière pression)...
0xe0 0x6c 0xe0 0xec

Les deux premiers chiffres correspondent à la touche enfoncée, le second – à l'absence d'appui.

Configuration de la liaison du code de numérisation dans X-Window

Donc, maintenant que nous avons les codes de scan, nous devons indiquer au serveur X ce qu'il doit réellement faire lorsque cette touche est enfoncée, c'est-à-dire lui attribuer un nom symbolique. Une liste de noms de symboles est donnée dans le fichier d'en-tête XF86keysym.h. Par défaut, les fichiers d'en-tête du serveur X ne sont pas installés sur les distributions modernes. Pour le voir dans Ubuntu, vous devez installer le package x11proto-core-dev, après quoi ce fichier sera situé dans le répertoire /usr/include/X11. Vous pouvez également contacter le serveur CVS X.Org. Regardons:

$ cat /usr/include/X11/XF86keysym.h
/*
* Touches trouvées sur certains claviers "Internet".
*/
#définir XF86XK_Standby 0x1008FF10
#définir XF86XK_AudioLowerVolume 0x1008FF11
#définir XF86XK_AudioRaiseVolume 0x1008FF13
#définir XF86XK_AudioPlay 0x1008FF14
#définir XF86XK_AudioStop 0x1008FF15
#définir XF86XK_Mail 0x1008FF19

Si nous comparons la dernière ligne avec la sortie xev, nous voyons que les valeurs correspondent à la clé avec le code clé 236 - keysym 0x1008ff19, XF86Mail (sans le suffixe XK_). Vous pouvez trouver une liste de toutes les valeurs disponibles telles qu'elles doivent être utilisées dans /usr/share/X11/XKeysymDB.

Il existe deux manières de créer votre propre mise en page : créez une description de votre clavier ou utilisez Xmodmap. La dernière méthode est la plus simple, nous en reparlerons donc plus loin. Dans le répertoire personnel de l'utilisateur, créez un fichier.Xmodmap, dans lequel nous saisissons les valeurs souhaitées :

$ mcedit ~/. Xmodmap

code clé 161 XF86Calculatrice
code clé 174 XF86AudioLowerVolume
code clé 176 XF86AudioRaiseVolume
code clé 162 XF86AudioPause

Et ainsi de suite, le principe, je pense, est clair. De plus, le code clé peut être saisi sous forme décimale et hexadécimale. D'après mes observations, les codes de la plupart des clés sont standardisés. Par conséquent, si vous configurez la réponse à une pression sur une touche une fois et transférez le fichier vers un autre ordinateur, il est possible que sur un autre clavier, la réaction à l'appui sur une touche également signée soit similaire. Les utilisateurs du bureau Gnome avec GDM peuvent écrire toutes ces lignes dans le fichier système /etc/X11/Xmodmap.

Dans d'autres cas, nous devons quand même dire au serveur X d'utiliser le fichier généré. Ceci est implémenté différemment selon les distributions, l'idée principale est d'exécuter la commande /usr/bin/xmodmap $HOME/.Xmodmap lorsque l'utilisateur se connecte ou au démarrage de X. Ici, chacun danse comme il veut. Sur les forums, ils suggèrent d'utiliser le fichier $HOME/.xsession (dans certaines distributions, il peut s'appeler .Xsession), .xprofile ou le système /etc/X11/Xsession. Et j'ai bien peur que ce ne soit pas tout options possibles. Voyons comment cela se fait dans KUbuntu :

$ sudo grep -iR xmodmap /etc

Du coup, on retrouve un fichier très intéressant /etc/X11/Xsession.d/80ubuntu-xmodmap avec le contenu suivant :

$ cat /etc/X11/Xsession.d/80ubuntu-xmodmap

/usr/bin/xmodmap /usr/share/apps/kxkb/ubuntu.xmodmap || vrai

USRMODMAP="$HOME/.Xmodmap"

si [ -x /usr/bin/xmodmap ]; alors
si [ -f "$USRMODMAP" ]; alors
/usr/bin/xmodmap "$USRMODMAP" || vrai
Fi
Fi

Autrement dit, le contenu du fichier ubuntu.xmodmap et du user.Xmodmap s'il existe sont chargés. Lorsque vous ouvrez ubuntu.xmodmap dans l'éditeur, vous trouverez une liste de codes clés et de noms symboliques associés. De là, nous pouvons conclure : si un développeur signale que sa distribution prend en charge les claviers multimédias, alors avec un degré de probabilité élevé, vous pourrez trouver un fichier similaire. D'autres distributions disposent d'un système similaire pour lancer des fichiers xmodmap personnalisés.

Maintenant que des noms symboliques ont été attribués aux touches, vous pouvez leur attribuer les actions souhaitées. Certains environnements de fenêtrage comme KDE peuvent gérer des actions basées sur des noms symboliques. Ainsi, lorsque vous appuyez sur le bouton avec XF86AudioPlay (QUESTION), le lecteur par défaut commence à jouer. Pour définir la combinaison souhaitée, allez simplement dans « Centre de contrôle KDE -> Options régionales et d'accessibilité -> Combinaisons de clavier » (dans KUbuntu, regardez dans « Paramètres système -> Clavier et souris »). Il existe un élément de menu similaire dans Gnome (vous pouvez simplement appeler gnome-keyboard-bindings) et XFce. De plus, certains programmes comme Amarok, Konqueror, MPD peuvent également traiter les frappes au clavier. Dans d'autres environnements sans
les outils de configuration graphique nécessiteront très probablement une intervention manuelle dans les fichiers de configuration. Par exemple, pour que dans IceWM, appuyer sur une touche avec le nom symbolique XF86AudioPlay démarre le lecteur XMMS, et lorsqu'on appuie à nouveau il se met en pause, vous devez ajouter la ligne au fichier ~/.icewm qui apparaît après le premier lancement :

$ mcedit ~/.icewm

clé XF86AudioPlay xmms --play-pause

Dans Fluxbox, la ligne pour lancer le lecteur ressemblerait à ceci :

$ mcedit ~/.fluxbox/clés

Aucun XF86AudioPlay:ExecCommand xmms --play-pause

Il y a généralement des exemples dans les configurations, donc je pense que vous pouvez facilement comprendre vous-même le reste des gestionnaires de fenêtres.

Paramétrage de la réaction dans la console

Dans la console, la procédure est légèrement différente. Comme vous vous en souvenez, la sortie de dmesg recommandait d'attribuer des codes clés à l'aide de la commande setkeycodes. Mais il y a des différences ici - il ne peut pas y avoir plus de 128 raccourcis clavier dans la console, vous devez sélectionner des valeurs de 0 à 127 :

$setkeycodes 0xec 118

Vous pouvez afficher les valeurs libres dans le fichier de disposition de clavier actuel. Sur Ubuntu et toutes les distributions basées sur Debian, il s'agit généralement de /etc/console-setup/boottime.kmap.gz. Si après le démarrage il n'y a aucun problème avec les clés, ajoutez cette ligne à l'un des scripts de démarrage, par exemple dans /etc/init.d/rc.local.

Il ne reste plus qu'à définir la correspondance entre la clé et l'action en cours. Il y a encore plus de place pour la créativité ici que dans les X. Dans keymaps(5), la procédure pour faire correspondre un code clé est la suivante :

(plaine | ) numéro de clé du code clé = keysym

# Remettez la console en marche lorsque vous appuyez sur la touche avec le code 105
code clé 105 = Decr_Console
# Fait avancer la console lorsque vous cliquez sur et une clé avec le code 106
code clé alt 106 = Incr_Console

Mais vous pouvez créer vos propres options en spécifiant la commande dans les variables :

code clé 120 = F100
chaîne F100 = "/sbin/shutdown -h maintenant\n"

En d'autres termes, appuyer sur la touche avec le code 120 effectuera l'action spécifiée dans la variable F100 ; dans notre cas, l'ordinateur est configuré pour s'éteindre. Au lieu de F100, vous pouvez bien entendu utiliser n'importe quel autre nom.

Maintenant, une partie tout aussi importante est de savoir où écrire tout cela. La documentation et de nombreux conseils suggèrent d'utiliser le fichier de configuration de console actuel (dans mon cas, boottime.kmap.gz). D'ailleurs, c'est le seul fichier décrivant les mises en page disponibles après l'installation de KUbuntu ; Pour voir d'autres options, vous devez installer le package console-data. Après cela, dans /usr/share/keymaps/i386/, vous pouvez trouver plusieurs sous-répertoires contenant des fichiers. Mais si vous devez passer à une autre présentation (dans Ubuntu et certaines autres distributions, le fichier /etc/default/console-setup ou ~/.console-setup est utilisé à cet effet), tous les paramètres devront être transférés vers une autre. fichier, ce qui est un peu
inconfortable. Si vous décidez de franchir cette étape, utilisez les entrées existantes comme modèle, sans rien écrire en première position, et n'oubliez pas de laisser une ligne vide à la fin.

Un peu sur l'ordinateur portable

Jusqu'à présent, je n'ai pas rencontré d'ordinateur portable dont les codes de numérisation des clés n'ont pas pu être déterminés. Par conséquent, les paramètres ici ne diffèrent pas de ceux décrits ci-dessus. Bien qu'il y ait une technique dont j'aimerais parler. Je trouve le mode hibernation très pratique à utiliser, lorsque, lorsque vous allumez l'ordinateur, vous retrouvez tout à sa place. En règle générale, les distributions modernes le prennent en charge, bien que la configuration soit, en général, simple : il suffit d'installer le package hibernate et de remplacer les paramètres nécessaires dans le fichier de configuration. La seule chose est qu'à chaque fois pour passer à ce mode, vous devez exécuter le script /usr/sbin/hibernate, ce qui n'est pas toujours pratique. Je veux juste fermer le couvercle de l'ordinateur portable et le rallumer
nourriture, découvrez chaque chose à sa place.

C'est très simple à faire en utilisant le démon acpid, qui est une sorte d'interface utilisateur qui vous permet de gérer tous les événements ACPI disponibles via /proc/acpi/event. Dans ce cas, acpid lit un ensemble de fichiers de configuration dans le répertoire /etc/acpi/events/. Si le package avec le démon n'est pas inclus dans la distribution, installez-le à partir du référentiel ; La dernière version peut être obtenue sur le site Web phobos.fs.tum.de/acpi. Après l'installation, vous devez créer deux fichiers dans le répertoire /etc/acpi/events : lid et power. Le premier décrit la réaction à la fermeture du couvercle, le second à l'appui sur le bouton d'alimentation.

$ sudo mcedit /etc/acpi/events/lid

event=bouton/couvercle.*
action=/usr/sbin/hiberner

$ sudo mcedit /etc/acpi/events/power

événement=bouton/alimentation.*
action=/sbin/shutdown -h maintenant

Ce sont des options quelque peu simplifiées ; dans KUbuntu, vous trouverez des scripts plus complexes. Après cela, vous devez redémarrer le démon acpid :

$ sudo /etc/init.d/acpid restart

Désormais, lorsque vous fermez le couvercle de l'ordinateur portable, le système passe en veille prolongée avec l'alimentation coupée et lorsque vous appuyez sur le bouton d'alimentation, il s'éteint. Simple et pratique.

Programmes d'installation

Si vous n'aimez pas bidouiller les fichiers de configuration, je vous propose plusieurs programmes qui vous aideront à configurer le fonctionnement des touches multimédia. Par exemple, l'objectif initial du programme Sven (sven.linux.kiev.ua) est de configurer des touches supplémentaires sur un clavier multimédia, mais à partir de la version 0.4, il peut corriger les erreurs de frappe et modifier la disposition du clavier. De plus, même si vous disposez d'un clavier ordinaire, avec son aide, vous pouvez émuler des touches multimédia en utilisant des raccourcis clavier à la place. Vous pouvez également attribuer des actions à des boutons de souris spécifiques. Elle comprend environ 10 000 mots russes et 9 500 mots anglais. Si le programme ne change pas
lui-même, la disposition peut être modifiée manuellement à l'aide d'une touche spécialement désignée (Pause par défaut). Une touche distincte (Scroll Lock) peut changer la casse des mots (supérieur, inférieur, la première lettre est en majuscule, les autres sont en bas). L'indicateur de changement de disposition du clavier mémorise son état pour chaque fenêtre, donc si vous basculez fréquemment entre les applications, vous n'aurez plus besoin de modifier en outre la disposition. Le programme a de grandes capacités et je vous conseille d'y jeter un œil. Tous les réglages sont effectués à l'aide programme graphique, construit sur les bibliothèques GTK+. Sven a été testé sous Linux, mais en principe il devrait fonctionner sur les systèmes *BSD. Gestionnaire de fenêtres utilisé
ça n'a pas d'importance.

Les capacités de KeyTouch (keytouch.sf.net) sont un peu plus modestes : cet utilitaire est utilisé exclusivement pour la configuration des touches multimédia. Bien qu'avec son aide, vous puissiez attribuer une action différente à n'importe quelle touche qui diffère des paramètres par défaut. Sur le site Web du programme, en plus des textes sources et des packages de certaines distributions, vous pouvez trouver des paramètres prêts à l'emploi pour les claviers multimédias de la plupart des fabricants connus.

Un autre solution intéressante- xbindkeys (hocwp.free.fr/xbindkeys/xbindkeys.html) - vous permet d'attribuer n'importe quelle commande, y compris les commandes shell, à n'importe quel bouton du clavier et de la souris. Tous les paramètres sont effectués dans un fichier de configuration au format simple et compréhensible.

Très probablement déjà sur votre téléphone installé par défaut Scanner de code QR, vous pouvez facilement l'utiliser pour scanner votre premier code QR. C'est très facile à faire. Suivez simplement nos instructions.

1. Ouvrez le lecteur de code QR sur votre téléphone.

2. Tenez votre appareil au-dessus du code QR afin qu'il soit clairement visible sur l'écran de votre smartphone.

Si vous tenez correctement votre smartphone au-dessus du code QR, les événements suivants se produiront :

  • Le téléphone scanne automatiquement le code.
  • Dans certaines applications, il faut cliquer sur une image pour scanner un code, plutôt que sur un bouton comme on le ferait pour prendre une photo sur son smartphone.

3. Appuyez sur le bouton indiqué, si nécessaire.

Super! Votre smartphone lit le code et suit le lien indiqué, ce qui n'est pas toujours instantané. Sur la plupart des appareils, cela peut prendre quelques secondes.

Vous commencerez à voir des codes QR partout. Ils servent à enseigner, informer, expliquer et bien d’autres choses encore. Trouvez-les et scannez-les ! Les codes QR vous feront gagner beaucoup de temps et d'efforts.

Comment scanner les codes QR sur Android

Nous allons maintenant vous expliquer comment utiliser l'application de numérisation de code QR sur Android.

Brièvement:
1. Ouvrir Jouer au magasin .
2. Rechercher Lecteur de code QR .
3. Sélectionnez Lecteur de codes QR(via Scan).
4. Cliquez sur " Installer".
5. Ouvrez le programme Lecture de code QR.
7. Pointez l'appareil photo vers le code QR.
8. Cliquez sur " D'ACCORD".

Étape 1. Ouvrez le Play Store sur Android. Il s'agit d'une icône dans une application ou sur l'écran d'accueil.

Étape 2. Entrez le lecteur de code QR dans le moteur de recherche. Une liste d'applications de lecture du code QR apparaîtra.

  • Cet article explique comment utiliser QR Code Reader, mais vous pouvez choisir l'application que vous aimez. Assurez-vous simplement de lire davantage sur l'application avant de la télécharger.
  • Les étapes doivent être les mêmes pour toutes les applications de lecture de code QR.

Étape 3.Cliquez sur QR Code Reader développé par Scan. Le nom du développeur est répertorié sous chaque application. Vous devrez peut-être faire défiler vers le bas pour trouver l'application créée par Scan.

Étape 4.Cliquez sur Installer. Une fenêtre contextuelle apparaîtra vous demandant d'accorder l'autorisation d'accéder aux informations sur votre Android.

Étape 5.Cliquez sur Accepter. QR Code Reader sera maintenant installé sur votre appareil Android.

    • Une fois l'application téléchargée, le bouton « Installer » se transformera en « Ouvrir » et vous aurez une nouvelle icône dans l'application.

Étape 6.Ouvrez le lecteur de code QR. Il s'agit d'une icône qui ressemble à un code QR dans l'application. Cela ouvrira une application qui ressemble à un écran d'appareil photo standard.

Étape 7Alignez le code QR dans le cadre de la caméra. Un peu comme on prend des photos, sauf qu’on n’a pas besoin d’appuyer sur aucun bouton. Lorsque le lecteur de codes-barres lit le code, une fenêtre contextuelle apparaîtra avec l'URL dans le code.


Étape 8Cliquez sur "OK" pour ouvrir le site Web. Cela lance votre navigateur Web par défaut et accède à l'URL dans le code QR.

Le prochain périphérique PC typique, qui semble simple, mais qui cause parfois des problèmes au chercheur, est le clavier.

En général, l'appareil est simple. Surtout pas les modèles déjà obsolètes connectés au port PS/2. Comme le montrent de nombreuses données expérimentales, la puce de contrôle du clavier scanne les frappes et les transmet sous forme de code série au port. La fréquence d'horloge de cette transmission est un multiple (dans la grande majorité des cas) de 6,3 ou 10 kHz. Bien que l'auteur ait découvert ces dernières années quelques exemplaires dont la fréquence d'horloge était d'environ 20 kHz.

Tous les claviers, lorsque vous appuyez et maintenez n'importe quelle touche, commencent (après une pause) à répéter la transmission du code clé « à l'infini ». En mode normal, cela entraîne généralement un débordement de la mémoire tampon du contrôleur et un dysfonctionnement en quelques secondes. Apparaît signal sonore système "dynamique" - "grincement". L'essence du mode test (le plus généralement accepté) est de bloquer la commande de débordement de tampon, qui permet, lorsqu'une touche est enfoncée, d'assurer une transmission sans fin du caractère sélectionné via le câble « clavier ».

Comme toujours, pour le calcul ultérieur correct du résultat, il est nécessaire de créer une alternance constante d'impulsions dans le paquet de codes. Pour les codes de clavier, il peut y avoir deux combinaisons de ce type :

10101010 (55) touche « + ; = "

01010101 (AA) dans les tableaux standards - non applicable

Le tableau général des scan codes est donné dans le tableau 14.1

Tableau 14.1- Codes de numérisation du clavier

Clé

Scanner le code

Clé

Scanner le code

Clé

Scanner le code

Clé

Scanner le code

Ainsi, lors de la mise en œuvre du mode test et, par exemple, en plaçant un poids sur la touche « + », une séquence infinie de paquets d'impulsions sera présente dans le câble du clavier. Dans ce cas, la période de répétition des impulsions dans le paquet (c'est-à-dire la fréquence d'horloge) sera égale à 6,10 ou 20 kHz, et la fréquence de répétition des paquets sera bien inférieure. Le format des données est illustré à la figure 14.1.

Pour échanger des données dans le câble du clavier, il existe deux lignes : KBData et KBSync. Lors de la transmission de codes de numérisation, le clavier définit le bit de données suivant sur la ligne KBData et confirme la transmission en transférant le signal de « 1 » à « 0 » sur la ligne KBSync.

Le contrôleur peut signaler qu'il n'est pas prêt à transmettre/recevoir des données avec un niveau faible sur la ligne KBSync. Le reste du temps, lorsqu’il n’y a pas de données à transmettre, les deux lignes ont un niveau de signal élevé.



Comme il ressort de ce qui précède, dans le spectre PEMIN du câble du clavier, il faut s'attendre à des composantes de fréquence avec une fréquence d'horloge de 1/76,04·10 -6 = 13,15 kHz. De plus, en raison de la présence de deux signaux déphasés avec des périodes différentes (mais multiples !), les composantes de fréquence paires et impaires différeront en amplitude.

Comme on pouvait s'y attendre, le PEMIN d'une ligne de données synchronisée n'est, en principe, pas informatif. Mais distinguer un PEMIN d’un autre n’est pas du tout facile. Il n'y a qu'un seul câble, les signaux sont synchrones...

Pratiquement Le seul moyen– sélectionnez un scan code avec le nombre minimum de « 1 » logiques dans le package. Ce sont les touches « F3 » et F9 » (03 et 01 en code hexadécimal). Le code "00" n'est pas utilisé.

L'oscillogramme du code de numérisation «F3» est présenté ci-dessous.


Strictement « en termes d'énergie », si vous mesurez toutes les composantes de fréquence de PEMIN avec le code « = » et, par exemple, le code « F9 », alors la différence dans les lectures du récepteur sur CHACUNE des composantes de fréquence est la véritable information. une partie de l’énergie PEMIN. De plus, il s’agit d’un maximum maximum. Le travail est assez complexe et fastidieux s'il n'est pas possible de le confier à une « machine automatique ». Les composants mêmes de PEMIN pour un tel basses fréquences ne sont pas facilement identifiables. Donc aussi pour « capter » les différences…



Dans la pratique SI, dans l'écrasante majorité des cas, ils mesurent simplement les niveaux PEMIN (sans rien soustraire) et calculent le paramètre de sécurité. C'est possible, « sous réserve », mais le spécialiste est obligé de connaître la véritable situation.

A la fin de l'examen - le « brochage » des connecteurs du clavier AT et PS/2.


Les « images » sur le récepteur semblent loin d’être aussi « classiques », mais elles restent tout de même assez reconnaissables. Voici des exemples



Le spectre montre clairement une augmentation de l'amplitude des composantes avec une fréquence décroissante.

Il existe également des caractéristiques de mesures « clave » dans cette région de fréquence (à partir de dizaines de kHz et au-delà). Le fait est que le clavier, à son emplacement habituel, est situé non loin de unité système. Et en haut du SB se trouve bloc d'impulsion L'alimentation électrique est la source de PEMIN la plus puissante pour les composants « E » et « H ». Sous la « lumière » d’un tel projecteur théâtral, voir la faible « lumière » du clavier est un art particulier ! Par conséquent, je propose la technique suivante. Éloignez le clavier le plus possible du SB. Mieux - sur un prolongateur PS/2. Environ 2 à 2,5 mètres.

Placez l'antenne de manière à ce qu'elle soit pointée le moins possible vers le satellite (le signal, avec une bande passante du récepteur supérieure à 10 kHz, est un spectre continu). Et près de l'antenne stationnaire orientée, commencez à tordre le clavier et son câble (et non l'inverse !). Vous aurez alors de bien meilleures chances de détecter les signaux PEMIN provenant du clavier et de voir de vos propres yeux les composants PEMIN sur l’écran de l’analyseur.

Tout ce qui précède s’applique à un clavier doté d’une interface PS/2. Mais ils sont désormais massivement remplacés par des claviers dotés d’une interface USB.

En général, cette interface a été discutée de manière assez détaillée avec les imprimantes. Cependant, il serait utile de donner une « désignation de cible » concernant le clavier.

Rappelons la construction des packages pour l'interface USB, en tenant compte du fait que le clavier est connecté strictement à basse vitesse (c'est-à-dire en fait via l'interface USB 1.0).

La taille maximale de la charge utile DATA pour les appareils à faible vitesse est de 8 octets. Autrement dit, c'est exactement ce qu'exige le code de numérisation du clavier.

Voir le signal (à savoir les données) sur la ligne USB s'est avéré n'être pas une tâche si facile. Néanmoins, c'est ce qui a été révélé précisément dans le câble d'un modèle de « clavier » USB typique GENIUS KB-06XE, en particulier dans la ligne « data + » (fil) (Figure 14.10).


Ces deux oscillogrammes changent l'un l'autre avec une périodicité indéterminée (chaotique), et les « images » des signaux ne dépendent pas de la touche du clavier enfoncée (ou de l'absence de pression). Il n'a pas été possible d'identifier d'autres changements dans la partie « variable » du paquet (trame).

La fréquence de ces paquets est strictement stabilisée (Fig. 14.11), et la durée de chacun est (visible sur les oscillogrammes) d'environ 34 ± 1 μs.


Les paquets se succèdent toutes les 4 ms. Cependant, il convient de noter que la fin de chaque paquet « tremble » tout le temps, et le « jitter » classique est perceptible. Par conséquent, l’image spectrale est quelque peu floue et ne devient claire qu’avec une moyenne suffisamment longue.


De plus, il convient de tenir compte du fait qu'en raison des différentes périodes de répétition des impulsions et de leurs différentes durées, le spectre a le caractère d'un mélange de spectre continu et de raies. Néanmoins, le caractère de lobe du spectre, naturel pour une séquence infinie de paquets et multiple dans ses « lobes » de durée moyenne des paquets, est conservé très clairement. Seuls les « zéros » de la fonction sont lissés par une gigue et une période de répétition non variable des impulsions individuelles. Cependant, l’image elle-même est assez typique. Avec une résolution de fréquence plus fine, le spectre commence à se résoudre en « lignes » déterminées par le taux de répétition des paquets (250 Hz) (Fig. 14.13). Ainsi, avec la visualisation la plus simple des oscillogrammes et non synchronisée avec la véritable transmission du code de balayage, identifier et visualiser les sections de la trame (paquet), responsables du transfert de données, ont échoué. Cependant, on peut affirmer que le PEMIN du câble du clavier sera toujours celui-ci et aucun autre. Il est clair à quelles fréquences le rechercher, il est clair qu'il sera de nature continue (en tout cas, avec une résolution en fréquence du récepteur supérieure à 0,3 kHz). Et il est clair quelle valeur substituer comme valeur d'horloge dans les calculs (la période minimale d'impulsions dans un paquet dans l'expérience était de 1,322 μs). Mesurer cela, à n'importe quel SI, avec un oscilloscope doté d'une bande passante d'au moins 200 MHz est une tâche triviale. Le mode test, en fait, est n'importe lequel, vous pouvez appuyer sur n'importe quelle touche ou vous pouvez n'appuyer sur rien. Les paquets sont de toute façon transmis via l’interface. Et, en première approximation, nous les considérons comme informatifs (jusqu’à preuve du contraire).

Les oscillogrammes et spectres donnés ont été obtenus à l'aide d'un oscilloscope AKIP-4108/2 connecté au même ordinateur sur lequel les mesures ont été effectuées (il convient de noter qu'il s'agit d'une répétition très fonctionnelle du développement de la société PICO Technology par la nôtre. Non pire que les chinois :)).

Le spectre va clairement bien au-delà de 1 MHz (l'oscilloscope ne le permettait plus, et cela ne servait à rien de brancher un analyseur). Le reste est déterminé par le câble, comme une antenne aléatoire, et par le degré de son blindage.

Pour les autres modes de l'interface USB, vous avez besoin d'un oscilloscope avec une bande passante de plusieurs GHz.

Comment calculer exactement le spectre continu et, en même temps, rester dans le cadre du NMD actuel est une conversation à part et non pour une discussion ouverte, hélas... Cependant, dans les publications ultérieures, nous devrons y revenir, là il n'y a nulle part où aller. Je vais essayer de "rester dans les limites"...

Ce qui m'a poussé à travailler sur un appareil de ce genre, c'est le fait que la plupart des appareils Gamemort faciles à répliquer ne permettaient pas l'implémentation d'un nombre suffisant de boutons de commande. Un port de jeu sur PC a été initialement conçu pour un maximum de quatre boutons. Toutes sortes d’extensions n’ont pas non plus la flexibilité souhaitée. Par exemple, l'extension CH Flightstick Pro, populaire parmi les bricoleurs, vous permet d'implémenter jusqu'à 14 boutons, mais vous ne pouvez pas utiliser deux boutons en même temps - à propos de voler sur de tels appareils dans des jeux dans lesquels vous devez constamment « tourner votre tête" - chez les mêmes oiseaux, vous pouvez oublier. Certaines extensions utilisent une interface purement numérique - les données sur les boutons enfoncés et la déviation des boutons sont transmises le long des lignes de port de jeu numériques, qui étaient initialement destinées à transmettre des données sur les quatre boutons "standard". Je considère même de telles extensions comme quelque peu redondantes. Et la conversion des données analogiques en données numériques complique la conception du joystick. De plus, tous les jeux ne veulent pas comprendre quel type de monstre y est « attaché ». Et le clavier – le voici, dans toute sa splendeur de 102 touches ! De plus, les abonnés de RU.GAME.FLIGHT ont mis de l'huile sur le feu, demandant de temps en temps « comment puis-je apprivoiser le clavier et le parcourir avec joie ? et repartir sans rien.

En bref, le travail de l'appareil est de « s'asseoir » sur le bus entre le clavier et le PC et de simuler les frappes sur le clavier en fonction des boutons enfoncés sur l'appareil.

Alors, je me suis assis pour le développer. Avant cela, j'avais de l'expérience avec divers microprocesseurs et microcontrôleurs. En général - les doigts d'une oreille à l'autre. Et je croyais naïvement que maintenant je prendrais les quais, je ferais du RTFM et dans une semaine je serai sur un cheval blanc. Le problème était que je ne trouvais pas de documentation sur le protocole de transfert de données entre le clavier et le contrôleur, ni sur Internet ni dans les conférences Fido pertinentes. J'ai dû prendre un oscilloscope et passer plusieurs semaines à démonter les bricolages et à essayer de les répéter. Par conséquent, la plupart des informations présentées ci-dessous sont le résultat de mes conclusions et ne sont pas documentées. Si je me trompe sur quelque chose, je serai heureux d'entendre vos commentaires à rashpilà ukr point filet.

Principes de base du transfert de données

Tout ce qui suit s'applique aux claviers PS/2 et AT, qui diffèrent uniquement par la conception du connecteur (peut être connecté via un adaptateur).

L’échange de données bidirectionnel s’effectue entre le clavier et le contrôleur situé sur la carte mère de l’ordinateur (ci-après simplement dénommé « le contrôleur »). Le contrôleur transmet diverses commandes (par exemple, changement de l'état des LED ou de la vitesse de répétition automatique). Le clavier transmet les codes de scan des touches enfoncées (scan code - symbole clés, ne doivent pas être confondus avec les codes ASCII).

Scanner les codes

Clé Scanner le code Clé Scanner le code Clé Scanner le code Clé Scanner le code
1 16 2 1E 3 26 4 25
5 2E 6 36 7 3D 8 3E
9 46 0 45 - 4E + 55
Retour arrière 66 Languette 0D Q 15 W 1D
E 24 R. 2D T 2C Oui 35
U 3C je 43 Ô 44 P. 4j
[ 54 ] 5B Entrer 5A Ctrl(L) 14
UN 1C S 1B D 23 F 2B
g 34 H 33 J. 3B K 42
L 4B ; 4C " 52 ` 0E
Maj(L) 12 \ 61 Z 1A X 22
C 21 V 2A B 32 N 31
M. 3A , 41 . 49 / 4A
Maj(R) 59 Alt(L) 11 Espace 29 Verrouillage des majuscules 58
Échap 76 F1 05 F2 06 F3 04
F4 0C F5 03 F6 0B F7 83
F8 0A F9 01 F10 09 F11 78
F12 07 Verrouillage du défilement 7E * 7C Verrouillage numérique 77
7 6C 8 75 9 7D - 7B
4 6B 5 73 6 74 + 5A
1 69 2 72 3 7A 0 70
. 71 Alr(R) E0-11 Ctrl(R) E0-14 Capture d'écran E0-12-E0-7C
Insérer E0-70 Supprimer E0-71 Gauche E0-6B Maison E0-6C
Fin E0-69 En haut E0-75 Vers le bas E0-72 Page précédente E0-7D
Bas de page E0-7A Droite E0-74 Entrer E0-5A / E0-4A

Remarque : le clavier AT dispose en fait de trois jeux de scancodes différents. J'ai donné uniquement les valeurs du jeu n°2 - celui par défaut.

Lorsque vous appuyez sur une touche, le clavier transmet le scan code de cette touche au contrôleur. Une fois libéré, d'abord le préfixe 0F0h, puis le code de numérisation de la clé libérée.

Les combinaisons de touches avec Shift, Alt et Ctrl sont transmises sous la forme d'une séquence de deux codes de numérisation. Du point de vue du contrôleur, ces clés ne sont pas différentes des autres. De la même manière, les modes Num Lock et Caps Lock ne diffèrent pas au niveau matériel - ils diffèrent au niveau logiciel par le programme qui gère les interruptions du clavier.

Je voudrais discuter brièvement de la mise en œuvre du mode de répétition automatique. En règle générale, les fonctions de répétition automatique sont attribuées au clavier lui-même - après un certain temps, si la touche n'est pas relâchée, le clavier envoie à un autre exactement le même code de numérisation. Si vous appuyez sur une autre touche à ce moment-là, un autre code de balayage « volera » vers le contrôleur et il sera considéré qu'une seule touche a été enfoncée. Dans les jeux, ce problème est résolu simplement - la touche est considérée comme enfoncée jusqu'à ce que le code de numérisation correspondant avec le préfixe 0F0h arrive. Par conséquent, je n’ai en principe pas implémenté les fonctions de répétition automatique.

En plus des codes de numérisation ci-dessus, le clavier peut renvoyer certaines commandes de service. Mais ces commandes, ainsi que les commandes émises par le contrôleur, n'ont dans ce cas aucune valeur pratique. Je ne m’y attarderai donc pas.

Description du protocole d'échange

L'échange de données entre le clavier et le contrôleur s'effectue de manière asynchrone à l'aide d'un protocole série. L'essence de la transmission asynchrone est que les données sont transmises uniquement lorsqu'il y a quelque chose à transmettre - une touche du clavier est enfoncée/relâchée et le code de numérisation correspondant doit être émis ou le contrôleur doit émettre une commande au clavier.

Il existe deux lignes pour l'échange de données : KBData et KBSync. Lors de la transmission de codes de numérisation, le clavier définit le bit de données suivant sur la ligne KBData et confirme la transmission en transférant le signal de « 1 » à « 0 » sur la ligne KBSync. Lors de la réception des données du contrôleur, le clavier lit le bit de données de la ligne KBData et confirme la réception en transférant le signal sur la ligne KBSync de « 1 » à « 0 ». Le contrôleur peut signaler qu'il n'est pas prêt à transmettre/recevoir des données avec un niveau faible sur la ligne KBSync. Le reste du temps, lorsqu’il n’y a pas de données à transmettre, les deux lignes ont un niveau de signal élevé. Le taux de répétition des impulsions de la ligne KBSync est d'environ 10-25 KHz.

Les données sont transmises dans l'ordre suivant : un bit de démarrage - "0", huit bits de données, un bit de parité (la somme de tous les bits +1), un bit d'arrêt - "1". Après avoir reçu chaque octet de données, le contrôleur règle la ligne KBSync au niveau bas, signalant ainsi qu'il est occupé à traiter les données reçues et qu'il n'est pas prêt à recevoir la suivante. Cela peut être considéré comme une confirmation d’acceptation. Le clavier confirme chaque octet de la commande reçue en émettant le code 0FAh. Si une erreur survient lors de la transmission, le contrôleur peut exiger que la transmission du dernier octet soit répétée en émettant la commande 0FEh. Le clavier se comporte différemment : il ignore simplement les erreurs. Je ne vois rien de fatal à cela - si votre système plante fréquemment, alors il n'a pas sa place sur votre bureau.

Très probablement, mes explications étaient trop confuses, je vais donc essayer de les illustrer avec plusieurs diagrammes temporels.

Vue générale du transfert de données depuis le clavier (S1 - bit de démarrage ; S2 - bit d'arrêt ; D0-D7 - données ; P - bit de parité ; W - traitement des données reçues)

Un exemple de transmission d'octets 74h - la touche « 6 » du pavé numérique. Dans cet exemple, lorsqu'un transfert est initié par le clavier, le contrôleur signale qu'il n'est pas prêt à recevoir des données et le clavier attend que la ligne KBSync se libère

Implémentation matérielle

Je vais maintenant passer directement à la description de l'implémentation matérielle de l'appareil.

L'appareil est connecté à la coupure des signaux KBSync et KBData et transmet les signaux du/vers le clavier à travers lui-même, interroge l'état des quatre boutons et émet les codes de numérisation correspondants, simulant ainsi le fonctionnement du clavier.

L'appareil est basé sur un microcontrôleur monopuce AT89C2051. Le microcontrôleur Atmel AT89C2051 appartient à la famille MCS-51 ( analogique domestique-MK-51). La principale différence entre l'AT89C2051 et le i8051 est une consommation d'énergie inférieure, le nombre de lignes d'E/S réduit à 15 et l'impossibilité d'utiliser de la mémoire externe. Plus des informations détaillées Les AT89C2051 et i8051 sont disponibles sur www.atmel.com et www.intel.com. Au lieu d'AT89C2051, vous pouvez utiliser AT89C51, i8051 (KR1816BE51) ou i8031 (KR1816BE31) avec ROM externe. Mais les deux dernières options, en raison de leur consommation électrique accrue, peuvent faire sauter le fusible du contrôleur du clavier.

Sur les microcontrôleurs Atmel, après la désignation principale, la fréquence maximale du générateur d'horloge est indiquée en mégahertz. Je vous conseille d'installer un microcontrôleur conçu pour une fréquence de 24 MHz et un quartz avec une fréquence plus élevée - 16-20 MHz.

Diagramme schématique. (R1-R4 - 47K ; R5 - 10K ; C1, C2 - 18pF ; C3 - 1uF ; D1 - AT89C2051 ; BQ1 - quartz 12-24 MHz)

La ligne P1.4 est utilisée comme sortie d'activation de l'interrogation du bouton. Il s'agit d'une base pour de futures extensions - les lignes P1.4-P1.7 seront utilisées pour émettre l'adresse de la ligne pour interroger les boutons enfoncés (jusqu'à 16 lignes de 4 boutons chacune). « 0 » sur la ligne P1.0-P1.3 signifie que le bouton correspondant est enfoncé.

Les éléments C3 et R5 mettent en œuvre un circuit qui génère un signal de réinitialisation lors de la mise sous tension.

Les lignes KBData du clavier et du contrôleur sont fournies aux entrées P3.2 (INT0) et P3.3 (INT1). Ainsi, une tentative de lancement d'un transfert de données à partir du clavier ou du contrôleur provoque une interruption correspondante. Les routines de gestion de ces interruptions diffusent simplement des signaux correspondant au transfert d'un octet via le microcontrôleur. Lorsque le microcontrôleur n'est pas occupé à transmettre des données, les lignes P1.0 à P1.4 sont interrogées, les données reçues sont traitées et les codes d'analyse correspondants sont envoyés au contrôleur. Cette version donne la priorité aux données transmises par l'appareil lui-même. Les données du clavier peuvent donc parfois être perdues.

Pour conclure cette section, je donnerai le brochage des connecteurs des claviers AT et PS/2.

Le signal -KBReset est un signal facultatif. Certains contrôleurs peuvent l'utiliser pour réinitialiser le clavier.

Texte du micrologiciel

Je fournis le texte source du firmware du microcontrôleur AT89C2051 dans l'espoir qu'un lecteur curieux pourra me corriger ou adapter le programme pour fonctionner avec un autre type de microcontrôleur.

Org 0 sjmp démarrer org 3 jmp from_keyboard ; INT0 org 13h jmp to_keyboard ; INT1 démarre le mouvement a,#5 ; définition du type d'interruption mov tcon,a ; INT0 et INT1 au recto - mov a,#0 ; transition de "1" à "0" mov ip,a mov a,#85h mov ie,a mov a,#0ffh ; le dernier mov 6,a est stocké à l'adresse 06h ; code traité clr p1.4 ; activer la boucle d'interrogation mov a,p1 ; l'état des boutons anl a,#15 est lu ; - les quatre bits de poids faible du port P1 ; D0 - vers le haut ; D1 - à droite ; D2 - vers le bas ; D3 - déplacement gauche dptr,#hat_table ; lire les données sur quatre boutons movc a,@a+dptr ; étendu à huit directions; D0 - vers le haut ; D1 - à droite ; D2 - vers le bas ; D3 - à gauche ; D4 - vers le haut ; D5 - vers le bas ; D6 - gauche en bas ; D7 - mouvement vers la gauche r2,a ; sauvegarde des données mov r0,a xrl a,6 ; si les nouvelles données ne diffèrent pas de la boucle jz ; reçu lors du cycle précédent - répétez le sondage mov r1,#8 ; boucle pour huit bits loop3 jnb acc.7,loop2 ; "1" - il y a eu un changement push acc mov a,r1 mov dptr,#key_table-1 ; extraire le scan code correspondant movc a,@a+dptr push acc mov a,r0 ; registre R0 - signe d'appui/relâchement de rlc a ; clé émulée mov r0,a ; "1" - la "clé" a été libérée pop acc mov acc.7,c ; si D7=1 - le scan code sera précédé de 0f0h acall send_key ; émettre un code de scan pop acc sjmp loop2a loop2 push acc mov a,r0 rlc a mov r0,a pop acc loop2a rl a djnz 1,loop3 mov 6,r2 sjmp loop send_key mov ie,#80h ; interruptions désactivées lors d'un appel send2comp ; envoi du code de scan mov, c'est-à-dire #85h ; interruptions activées ret send2comp jnb acc.7,send ; si nécessaire, 0f0h push acc mov a,#0f0h acall send pop acc clr acc.7 mov b,#200 l9 nop djnz b,l9 send push 1 push 0 clr p3.3 ; P3.3 - KBData mov b,#6 ; émettre le bit de démarrage l10 nop djnz b,l10 clr p3.5 mov b,#15 l2 nop djnz b,l2 setb p3.5 mov b,#6 l3 nop djnz b,l3 mov r0,#8 ; sortie de huit bits de données et comptage de parité mov r1,#1 byte_loop xrl 1h,a rrc a mov p3.3,c mov b,#6 l6 nop djnz b,l6 clr p3.5 mov b,#15 l4 nop djnz b, l4 setb p3.5 mov b,#6 l5 nop djnz b,l5 djnz r0,byte_loop mov a,r1 mov c,acc.0 mov p3.3,c ; bit de parité de sortie mov b,#6 l8 nop djnz b,l8 clr p3.5 mov b,#15 l12 nop djnz b,l12 setb p3.5 mov b,#6 l13 nop djnz b,l13 setb p3.3 ; bit d'arrêt de sortie mov b,#6 l7 nop djnz b,l7 clr p3.5 mov b,#15 l11 nop djnz b,l11 setb p3.5 mov b,#200 l14 nop djnz b,l14 setb p3.5 pop 0 pop 1 ret from_keyboard ; transfert d'un octet vers le contrôleur mov ie,#80h push psw push acc push b mov b,#2 in6 jnb p3. 4,in8 djnz b,in6 sjmp in7 in8 mov b,#10 in1 mov a,p3 rl a orl a,#11010111b mov p3,a jnb p3.4,in1 in2 mov a,p3 rl a orl a,#11010111b mov p3,a jb p3.4,in2 djnz b,in1 in3 mov a,p3 rl a orl a,#11010111b mov p3,a jnb p3.4,in3 mov p3,#0ffh in4 jb p3.5,in4 in5 jnb p3 .3,in7 clr p3.4 jnb p3.5,in5 in7 mov p3,#0ffh pop b pop acc pop psw mov tcon,#5 mov ie,#85h reti to_keyboard ; transférer un octet au clavier mov ie, #80h push psw push acc push b mov b,#5 out61 jb p3.5,out7 djnz b,out61 setb p3.4 setb p3.2 out62 jnb p3.5,out62 out6 mov c ,p3.4 mov p3.5,c mov c,p3.3 mov p3.2,c jb p3.4,out6 out8 mov b,#10 out1 mov c,p3.4 mov p3.5,c mov c , p3.3 mov p3.2,c jnb p3.4,out1 out2 mov c,p3.4 mov p3.5,c mov c,p3.3 mov p3.2,c jb p3.4,out2 djnz b, out1 out3 mov c,p3.4 mov p3.5,c mov c,p3.2 mov p3.3,c jnb p3.2,out3 out7 mov p3,#0ffh pop b pop acc pop psw mov tcon,#5 mov c'est à dire,#85h reti hat_table ; table pour étendre les données lues sur le port P1 ; l'index dans le tableau est un code binaire à quatre bits ; data - l'état des huit clés émulées ; "0" - touche enfoncée db 0ffh ; gauche+droite+haut+bas=combinaison interdite db 0ffh ; gauche+droite+bas=combinaison interdite db 0ffh ; gauche+haut+bas=combinaison interdite db 0bfh ; gauche+bas=gauche-bas db 0ffh ; gauche+droite+haut=combinaison interdite db 0ffh ; gauche+droite=combinaison interdite db 07fh ; gauche+haut=gauche en haut db 0f7h ; base de données gauche 0ffh ; droite+haut+bas=combinaison interdite db 0dfh ; bas+droite=bas-droit db 0ffh ; up+down=combinaison interdite db 0fbh ; vers le bas db 0efh ; droite+haut=droite db 0fdh ; droite db 0feh ; jusqu'à la base de données 0ffh ; aucun bouton enfoncé key_table ; table de codes de numérisation db 75h ; pavé numérique 8 db 74h ; pavé numérique 6 db 72h ; pavé numérique 2 db 6bh ; pavé numérique 4 db 7dh ; pavé numérique 9 db 7ah ; pavé numérique 3 db 69h ; pavé numérique 1 db 6ch ; pavé numérique 7

Dans l'archive tools.zip, vous trouverez deux programmes : a51.exe - un assembleur, hex2bin - un convertisseur de fichiers hexadécimaux, obtenus à la sortie de l'assembleur, en un format binaire adapté au flashage de la ROM du microcontrôleur avec un programmeur .

Assemblage et dépannage

Vous pouvez assembler l'appareil selon le schéma ci-dessus sur une maquette, une planche gravée maison ou fabriquée industriellement. Une prise doit être placée sous le microcontrôleur. Il est préférable de laisser de l'espace sur la carte pour 2-3 packages DIP à 16 broches - ils seront ajoutés dans les versions ultérieures.

Ensuite, après avoir apporté les modifications souhaitées, le texte source du microprogramme est assemblé à l'aide du programme a51.exe. Pour flasher le firmware avec le programmeur, le fichier hexadécimal résultant est converti en image binaire par le programme hex2bin.exe.

Après avoir complètement assemblé l'appareil, nous le connectons au clavier et à l'ordinateur. Trois... Deux... Un... C'est parti !.. Un appareil correctement assemblé à partir de bons composants connus devrait fonctionner immédiatement. Dans le cas contraire, vérifiez la bonne installation et la présence d'alimentation sur le microcontrôleur. À l'aide d'un oscilloscope, vérifiez si le générateur d'horloge a démarré et si une impulsion de haut niveau arrive à l'entrée RST à la mise sous tension. Lorsque vous appuyez sur les touches du clavier, les impulsions sur les lignes P3.3 et P3.5 doivent répéter, avec un certain retard, les impulsions sur les lignes P3.2 et P3.4, respectivement. Lorsque vous appuyez/relâchez les boutons de l'appareil, des impulsions doivent également apparaître sur les lignes P3.3 et P3.5. Si cela ne vous aide pas, écrivez-moi ( rashpilà un port point ru) rapport de bug, indiquant le modèle et le type (AT, PS/2) de votre clavier, carte mère/multicarte, microcontrôleur utilisé et fréquence d'utilisation résonateur à quartz. J'ai essayé de tester l'appareil avec le nombre maximum dont je dispose cartes mères et claviers - aucun problème n'a été identifié. Dans mon cas, du quartz 14,2 MHz a été utilisé.

Bogues connus

La version actuelle du firmware contient les défauts suivants :

  • Les codes de numérisation à deux octets ne sont pas suivis. Cela conduit au fait que parfois, lors de l'utilisation simultanée de la cabane et du clavier, les touches du clavier « se figent » lorsqu'elles sont enfoncées ou sont mal perçues ;
  • Parfois, les données sont transférées de manière incorrecte du contrôleur vers le clavier. Cela peut s'exprimer, par exemple, par le fait que les LED ne changent pas d'état lorsque les touches Num Lock, Caps Lock, Scroll Lock sont enfoncées ;
  • Cliquetis des contacts des boutons de la cabane. Jusqu'à présent, cela ne m'a pas été fatal en matière de jeu.

Plans futurs

Voici une courte liste de ce que j'aimerais implémenter dans les futures versions :

  • Corrections de bugs mineurs - traitement du signal plus correct ; suivi des codes de numérisation à deux octets ;
  • Connexion d'une matrice 16x4 - prise en charge jusqu'à 64 boutons ou deux cases et jusqu'à 56 boutons ;
  • Prend en charge jusqu'à 16 configurations de codes de numérisation différentes stockées dans la ROM du microcontrôleur ;
  • Connexion d'une puce NVRAM avec possibilité de sauvegarder et de reprogrammer « à la volée » jusqu'à 32 configurations de scan codes.

Conclusion

J'ai essayé de présenter toutes les données nécessaires pour comprendre le principe de fonctionnement de mon appareil. Cette description ne prétend pas être techniquement exacte à 100 %. Si je me trompe sur quelque chose, dites-moi votre version des événements. Si vous pouvez apporter des améliorations et des ajouts à mon circuit et/ou firmware, si vous avez des idées pour le développement ultérieur du circuit, n'hésitez pas à me le faire savoir. De plus, j'attends des informations d'artisans qui ont su reproduire ou adapter ce dispositif pour d'autres types de microcontrôleurs.

Vladimir "Râpe" Klimus (rashpilà ukr point filet)

  1. En haut de la fenêtre Google Play, il y a chaîne de recherche. C'est exactement ce que nous utiliserons. Nous activons et écrivons le nom de notre application. Il n’est pas nécessaire d’y entrer jusqu’au bout. Dès que l'objet indiqué dans la capture d'écran apparaît dans les résultats de recherche, appuyez simplement dessus.
  1. Nous serons redirigés vers la page d'accueil du programme. Il y a un gros bouton vert qui dit « INSTALLER ». Cliquez dessus.
  1. Nous attendons la fin du téléchargement de l'application. Comme il pèse un peu moins de 5 Mo, le processus ne prendra pas beaucoup de temps.
  1. Prêt. Une fois l'installation automatique terminée, nous pouvons lancer le programme directement à partir d'ici.
  1. Aussi sur écran d'accueil(si activé dans les paramètres) un raccourci de lancement apparaîtra.

À ce stade, l'installation du programme est terminée et nous pouvons passer à un aperçu de son utilisation.

Dans la capture d'écran ci-dessous, vous voyez interface logicielle. Ici, il est divisé en 3 onglets principaux. Il existe également une icône de paramètres sous la forme d'un engrenage. Sur l'onglet principal « SCAN », il y a 4 outils principaux :

  • Scannez le code-barres. Il s'agit d'un scanner QR qui fonctionne via une caméra ;
  • Saisie manuelle. Fonction de saisie manuelle des données de code ;
  • Décoder à partir du fichier. Décodage à partir d'un fichier. De là, vous pouvez ouvrir le code QR précédemment téléchargé et le lire ;
  • Décoder à partir de l'URL. Scannez par lien.

En bas, plusieurs boutons n'offrent pas de fonctionnalités utiles. Vous ne devriez pas y prêter attention.

Regardons les paramètres du programme. Il y en a beaucoup ici. Il y aura des captures d'écran de différentes zones de configuration sur vos écrans, mais nous exprimerons simplement certains des points les plus intéressants.

Par exemple, sur le premier écran, vous pouvez activer ou désactiver le son du programme. La même chose peut être faite avec la réponse vibratoire. Vous pouvez définir le mode de fonctionnement lorsque le programme démarre immédiatement à partir du scanner, en contournant le menu principal. Une autre fonctionnalité importante est la copie automatique des données dans le presse-papiers.

Dès que nous souhaitons commencer la numérisation et lancer le scanner lui-même, le programme demandera l'accès aux ressources système nécessaires. Naturellement, il faut résoudre ce problème. Cliquez sur le bouton marqué dans la capture d'écran.

Ensuite, nous positionnons le cadre du scanner de manière à ce que la bande horizontale tombe directement sur le QR. Essayez de ne pas vous serrer la main et en même temps surveillez votre concentration. Sans une netteté normale, la numérisation ne réussira pas.

Pour permettre au QR BARCODE SCANNER de fonctionner dans des conditions de faible luminosité, il y a un rétroéclairage.

Une fois le code reconnu, vous verrez les informations affichées dans la capture d'écran ci-dessous.

En plus de scanner les QR, vous pouvez également les créer ici. Pour ce faire, rendez-vous dans le troisième onglet. Nous l'avons marqué dans la capture d'écran. La liste affiche tous les types de données pouvant être cryptées. Les éléments suivants sont pris en charge :

  • contact de l'annuaire téléphonique ;
  • numéro de téléphone;
  • URL ;
  • E-mail;
  • application;
  • emplacement;
  • n'importe quel texte ;
  • signet;
  • événement du calendrier.

Tout ressemble à ceci :

Une fois le type de données sélectionné et spécifié, il ne nous reste plus qu'à cliquer sur le bouton « Encoder ». Dans ce cas, nous avons chiffré le lien.

Essayons également de chiffrer du texte arbitraire. Pour ce faire, sélectionnez l'élément souhaité.

Entrez la phrase dans le champ désigné et appuyez sur le bouton « Encoder ».

Le résultat est superbe. Changeons également sa couleur. Cliquez sur le bouton prévu à cet effet.

Sélectionnez la teinte souhaitée dans la palette.

Et on admire le QR reçu.

Passons au programme suivant, qui possède également des fonctionnalités impressionnantes.

Scanner de code QR droïde

Une autre application que l'on retrouve sur Google Play. Vous pouvez également le télécharger à partir d'un lien direct sur le site de Google. Pour l'instant, nous examinerons le programme lui-même.

Voici à quoi ressemble le raccourci de lancement de QR Droid Code Scanner – cliquez dessus.

Cette application, contrairement à la précédente, est réalisée en russe et, dès qu'elle démarre, il faudra cliquer sur le bouton qui dit : « COMMENCER ».

Le scanner est immédiatement visible, mais regardons d'abord ses paramètres. Appuyez sur le bouton situé dans le coin supérieur droit.

Dans le menu principal, 6 vignettes de boutons sont visibles qui redirigent l'utilisateur vers la section souhaitée. Les voici:

Ainsi, pour utiliser le scanner, vous devez l'activer dans le menu principal et, en pointant sur le code QR, appuyer sur le bouton « Lire ».

Ici, vous sélectionnez l'écran de démarrage, définissez l'adresse pour Copie de réserve et la langue de l'interface logicielle est configurée.

Ensuite, nous pouvons installer le mécanisme de numérisation. L'un des algorithmes propriétaires est utilisé : Zapper ou ZXing. Ci-dessous, vous pouvez activer ou désactiver le réticule, configurer action automatique après la numérisation et activer l'affichage des info-bulles ou la copie du lien vers le presse-papiers.

Cette section configure accompagnement sonore, les vibrations s'allument et s'éteignent. Le processus d'enregistrement des actions dans le journal et l'interaction avec montre intelligente Vêtements Android.

Nous pourrons alors exporter ou importer copie de sauvegarde ou fixer une date.

Autorisez l'envoi de données anonymes (il est préférable de le désactiver), activez la vérification du lien de sécurité reçu lors de l'analyse ou configurez l'analyse par lots. Des fonctionnalités telles que le zoom ou la mise en surbrillance sont disponibles ci-dessous.

Mais nos paramètres ne s’arrêtent pas là. En plus des fonctions ci-dessus, nous avons les suivantes :

  • réglage de l'orientation de l'écran ;
  • travailler avec la caméra frontale ;
  • analyse de liens ;
  • affichage des magasins.
  • fonction de glissement étendue ;
  • interdiction de certains caractères spéciaux ;
  • activation de l'aperçu WEB ;
  • rechercher des images enregistrées.

Le dernier écran de paramètres contient des fonctionnalités intéressantes telles que la définition du nombre maximum de positions, la configuration de CSV personnalisés, l'agitation de la smartwatch et l'enregistrement des positions en double.

En plus des paramètres, dans le menu QR Droid Code Scanner, il y a un élément appelé « Plus ». Considérons sa fonctionnalité.

Voici les possibilités suivantes :

Regardons la dernière application, mais non moins fonctionnelle, de notre liste.

Scanner de codes QR et de codes-barres NeoReader

Ce programme, comme d'autres, vous pouvez télécharger et installer via Jeu de Google ou via un lien direct. Lorsque cela est fait, vous pouvez passer directement à son utilisation.

Lors du premier lancement, nous devrons satisfaire la demande d'accès. Cliquez sur « AUTORISER ».

Ensuite, une fenêtre de paramètres apparaîtra. Ici, vous pouvez choisir une langue, indiquer votre pays, votre sexe et votre âge. Les deux cases ci-dessous vous permettent d'activer ou de désactiver l'accès du programme aux géodonnées.

Vous pouvez réellement commencer à numériser. Pointez votre appareil photo vers le code QR et NeoReader QR & Barcode Scanner reconnaîtra automatiquement son contenu.

Nous pensons que ces trois programmes sont tout à fait suffisants pour n'importe qui. Choisissez celui qui vous convient le mieux et utilisez-le à votre discrétion. Nous parlerons de certaines fonctionnalités des appareils chinois.

Fonctionnalité standard

Certains smartphones et tablettes (selon les marques) disposent en standard d'une fonctionnalité de lecture de code QR, et tout peut être fait sans application. Nous ne les énumérerons pas tous, nous n’aborderons que le modèle de Xiaomi.

Résumons-le

En conséquence, nous avons appris à scanner un code QR sur Android différentes façons. Nous espérons que l'article vous a été utile. Si vous avez encore des questions, posez-les dans les commentaires. Nous allons essayer d'aider tout le monde.

Même si cela ne se produit pas, l'un des utilisateurs du site vous indiquera certainement comment sortir de la situation et vous donnera des conseils pratiques. Il ne vous reste plus qu'à lui donner vie.

Instruction vidéo




Haut