|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Benjamin Responsable des études Inscription : novembre 2012 Messages : 26 ![]() |
Bonjour à tous,
je suis nouveau sur ce forum et vraiment débutant en Assembleur. J'ai une question, j'ai repris un programme pour faire fonctionner un clavier, je voudrais savoir comment je peux lui faire envoyer un caractère hexa (si c'est possible...) Par exemple, je fait Fn+8 il m'affiche @ Tout est géré, il ne me manque plus qu'a lui faire afficher le caractère ! (je suis vraiment nul en ASM ... ) En vous remerciant par avance !! |
|
|
00
|
|
|
#2 |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
Bonjour,
L'assembleur n'est pas un seul langage unique normalisé mais est propre à chaque famille de micro-processeurs. Voir les règles du forum Assembleur : http://www.developpez.net/forums/d73...ulter-decrire/ A priori, tu travailles sur PC. Mais même là, la touche Fn n'est pas standardisée Il faut se pencher sur le mode de fonctionnement propre à chaque constructeur. Tu peux cependant te rabattre sur toutes les autres. Pour le reste, si tu as repris un programme existant, poste-le ici (encadré par les balises [code] et [/code]), et on tâchera de t'aider. |
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Benjamin Responsable des études Inscription : novembre 2012 Messages : 26 ![]() |
Merci de ta réponse !
je bosse sur PC en effet sur Windows XP, le micro-processeur est un Cypress CY7C63413 (c'était bien la question?) Le debugger est Cypress Debugger Ensuite nous sommes spécialisé dans la fabrication de claviers industriels La gestion de la touche Fn, de la combinaison avec une autre touche est OK. tout cela fonctionne, par exemple je sais faire Fn+8 me donne un A. j'utilise ma table de de scancode. voici un morceau du soft, j'espère que ce sera suffisant : Code :
Et au lieu d'envoyer une touche de ma table je veux sois envoyer une combinaison, soit directement un code Hexa... En espérant que c'est clair ! Merci par avance... |
||
|
|
00
|
|
|
#4 |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
D'accord ! On fait bien de poser la question, parce que ça fait quand même beaucoup de détails qu'on ne connaissait pas. Je vais essayer de résumer la situation. Dis-moi si l'un de ces points est incorrect :
Tout ceci est-il correct ? Tout d'abord, récupère la datasheet du produit que tu utilises, si tu ne l'as pas encore fait. La table des instructions reconnues par ton micro-contrôleur est en page 11 : http://www.alldatasheet.com/datashee...C63413-PC.html Qu'entends-tu par « envoyer un code hexa » ? Est-ce que tu veux émettre un caractère spécial (tel que l'arobase) ou est-ce que tu veux réellement faire afficher à l'écran le code en hexadécimal, auquel cas il faudrait envoyer deux caractères consécutifs formant le code en question, comme si on l'avait tapé à la main ? |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Benjamin Responsable des études Inscription : novembre 2012 Messages : 26 ![]() |
Oh mais c'est parfait c'est exactement ca !
Excepté que les claviers sont spécifiques, mais peuvent très bien être utilisé comme un clavier bureautique (autrement ce sont des claviers durcis pour l'industrie mais fonctionne avec le même principe qu'un clavier standard, sauf bien sur la technologie mais hors sujet ici ^^) Voila la base du problème c'est que quand je fais "Fn+8" (exemple) ca doit transmettre un "@". Or, comme vous le voyez dans le morceau du programme, si je met le scancode du "@" (AT101KB_00) je n'aurais pas "@" mais "à" qui va être transcrit. J'étais parti donc sur la solution que je pensais la plus simple : à la place de l'étiquette, mettre un code hexa (ou ascii) pour sortir direcement le caractère @. Parce que sinon a la place de l'étiquette il faudrait que je lui dise d'envoyer AltGr enfoncé puis AT101KB_00 et enfin relever AltGr et ça, bien entendu, je ne sais pas faire... (autant que la facon de faire pour ignorer l'état du CapsLock...) J'espère que c'est assez clair ! Merci pour tout en tout cas |
|
|
00
|
|
|
#6 |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
C'est plus compliqué que ça parce que ton étiquette n'est une « equate », c'est-à-dire un symbole associé à une valeur donnée, en l'occurence le scan code. Remplacer cette étiquette par une valeur exprimée en hexadécimal ne t'apportera rien car :
L'arobase, dans cet agencement, est sur la touche « 2 » : http://frontype.com/keyboarding/540p...oAltGr.svg.png Il faudrait également vérifier la valeur de AT101KB_A et examiner la procédure ksc_putkey pour voir si A est censé contenir un scan code individuel ou un pointeur vers une série de scan codes. D'une façon ou d'une autre, il te faudra donc envoyer la séquence « Shift + 2 ». Ça veut dire qu'il faudra envoyer le code d'appui sur « Shift », suivi du code d'appui sur « 2 » et enfin du code de relachement de « Shift », sinon tous tes caractères suivants seront considérés comme majuscules par l'hôte. Cette séquence est en fait elle-même composée d'un préfixe (0xF0) suivi du code de la touche relachée. Ce n'est pas dur en soi : il suffit d'appeler quatre fois de suite ksc_putkey avec les bons codes, mais il faut d'abord explorer le programme pour voir si quelque chose de similaire n'a pas déjà été mis en place. |
|
|
00
|
|
|
#7 | ||||
|
Invité de passage
![]() Benjamin Responsable des études Inscription : novembre 2012 Messages : 26 ![]() |
Je te remercie (encore!) pour ta réponse claire.
mes etiquette sont bien des "equate" present dans un fichier nommé AT101.inc (exemple dans ce fichier : AT101KB_A equ 05 ) le 05 est un exemple, je n'ai pas la valeur précise en tête. Qu'entends tu par : le code d'appui de Shift ? c'est a dire AT101KB_LEFTSHIFT ?? ou sa valeur? et Pour le relachement je dois 0xf0 devant l'étiquette? Je suppose que ca peut servir aussi, j'ai ces "equate" présents dans le programme : Code :
Code :
|
||||
|
|
00
|
|
|
#8 | |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
Citation:
Peut-on voir les valeurs exactes de AT101KB_LEFTSHIFT et AT101KB_A pour voir si elles correspondent bien à ce que l'on est en droit d'attendre ? Également, y a-t-il en soi une touche Shift ou un modificateur autre que Fn sur ton clavier, et es-tu déjà en mesure d'envoyer avec le logiciel existant un code qui nécessiterait un appui sur Shift ou assimilé sur le clavier d'un PC ? |
|
|
|
00
|
|
|
#9 | ||
|
Invité de passage
![]() Benjamin Responsable des études Inscription : novembre 2012 Messages : 26 ![]() |
En fait, pour résumé, ces claviers ont un comportement identiques à un clavier bureautique. Si je fait "Shift+a", j'obtiens "A" ou encore "AltGr+à" j'obtiens "@"
Maintenant il y a autre chose (mais ce n'est qu'un détail), le layout (AZERTY, QWERTY etc...) importe peu : en effet le programme est identique quelquesoit la version du clavier. Par conséquent pour être vraiment complet, quand je programme un clavier avec une organisation de touche en francais, dans le matricage (matrix.asm) je le prends en compte : AT101KB_Q va etre mis pour "A". C'est donc l'ordinateur qui va déterminer la sortie : AT101KB_Q sera un "Q" si on change la langue sur le PC mais sera un "A" si le PC est en francais. Je ne sais pas si je m'explique bien. Voici sinon une partie des valeurs des scancodes : Code :
On est donc bien d'accord que si on parle de AT101KB_LEFTSHIFT et AT101KB_A ce n'est que pour l'exemple? Que ca sera le même principe avec AltGr par exemple? Pour répondre à ta question mon soft est bien capable d'envoyer un code avec Shift appuyé. |
||
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Benjamin Responsable des études Inscription : novembre 2012 Messages : 26 ![]() |
Un grand merci en tout cas Obsidian, j'en suis pas loin grace a ton aide !
J'ai juste une autre question mais il vaut mieux que je mette Resolu et que j'ouvre un autre poste? |
|
|
00
|
|
|
#11 | |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
Citation:
C'est important parce qu'il n'y a pas de touche « @ » comme il y en a pour les lettres de l'alphabet : il faut faire une combinaison de touches pour saisir ce caractère et cette combinaison n'est pas la même selon les agencements : c'est « Shift + 2 » sur un clavier américain, mais c'est « AltGr + 0 » sur un clavier français. Et même là, « AltGr » est une touche relativement moderne qui n'existait pas sur les claviers à 84 touches (ok, ça commence à dater) et qui était souvent occupée par une seconde touche « Alt » sur les premiers claviers étendus. À l'époque, il fallait utiliser « Ctrl + Alt + Touche » pour obtenir le troisième caractère. De là, trois possibilités :
Enfin, sois averti que le clavier d'un PC cache encore une subtilité : à lui, ne correspond pas un seul mais trois jeux de scan codes. Le plus courant aujourd'hui et celui qui est sélectionné par défaut est le numéro 2. La table que tu nous présentes correspond au premier jeu (historique). C'est toujours légal, mais il est possible que ça engendre des bugs difficiles à identifier sur certains systèmes, surtout s'ils sont industriels (donc généralement embarqués, volontairement minimalisés, souvent anciens et rarement mis à jour du fait de leur prix). |
|
|
|
00
|
|
|
#12 | |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
Citation:
Pose-la ici, je la déplacerai si nécessaire. :-) |
|
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() Benjamin Responsable des études Inscription : novembre 2012 Messages : 26 ![]() |
merci
Oui c'est un peu en rapport (meme soft) En fait, je vais devoir inhiber le Capslock lors des combinaisons créer avec la touche Fn. Par exemple si je fais Fn+F2 je dois sortir ">" j'ai donc mis Shift+< afin de passer en maj pour sortir le bon caractère, cependant en AZERTY si je fais cette combinaison et que le Capslock est activé, je vais me retrouver avec le caractère "<" (contrairement au QWERTY qui ne "s'occupe" pas du Capslock. Ex si j'appuis sur la touche "2" au dessus du "W" on sort un 2 que l'on soit en maj ou non.) J'ai donc besoin d'ignorer le Capslock. ou du moins de le désactiver le temps de l'appui non? Merci a toi pour ton aide si précieuse Je vais tester de suite ce que j'ai fais deja. |
|
|
00
|
|
|
#14 | |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
Citation:
Il faut absolument garder à l'esprit que, quoi qu'il se passe, un clavier n'envoie toujours que des scan codes et jamais des caractères. Ça signifie que si tu dois envoyer malgré tout « @ », tu serais obligé de garder en mémoire l'état de Caps Lock en espérant que l'hôte n'ait pas manqué une trame. Ou alors t'appuyer sur l'état de la LED mais même ça, ce n'est pas fiable à 100 %. Surtout qu'il y a plusieurs moyens de gérer Caps Lock : les anglo-saxons utilisent cette touche comme une bascule qui passe d'un état à l'autre chaque fois que l'on appuie dessus, alors que les européens verrouillent les majuscules avec Caps, et repassent en minuscules avec Shift (ce qui est le comportement des machines à écrire mécaniques). Pour le reste, relis bien mon commentaire numéro 11. |
|
|
|
00
|
|
|
#15 | ||||
|
Invité de passage
![]() Benjamin Responsable des études Inscription : novembre 2012 Messages : 26 ![]() |
Merci ! (je m'en lasse pas^^)
Autant pour moi, je n'avais pas vu ton commentaire 11. C'est donc la possiblité n°2 ! Mais saches que la base du soft ne change jamais ! que j'ai un clavier etendu 103touches, ou un clavier compact 80 touches, je modifie (pour un clavier simple, c'est à dire sans touche Fn) uniquement la table de matrice (matrix.asm) De plus, pour notre clavier standard 105touches, qu'il soit en AZERTY, QWERTY ou autre ne change rien du tout ! il fonctionne de la meme manière (c'est a dire qu'en AZERTY j'enverrais un A alors qu'en QWERTY j'enverrais un Q; tout ca avec le meme soft) Ensuite, je pars du principe que le clavier que je suis en train de developper, sera en AZERTY uniquement c'est un layout spécifique pour le client, si un jour il veut en QWERTY je changerais mon soft, pas de soucis. Donc, sur la base Francaise, lors de mon appui Fn+2, je lui envois AltGr+0 : Code :
Maintenant, j'envois "%" lorsque j'appuies sur Fn+5 : Code :
On en vient a ma question, comment faire pour gérer l'état du Capslock? Si je le rajoute dans l'envoi, et qu'il n'est pas actif, il va s'activer ! *marre* |
||||
|
|
00
|
|
|
#16 | ||||||
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
Citation:
C'est important parce que ça aurait pu être n'importe quoi d'autre, typiquement un produit de ce genre mais néanmoins conçu pour émettre les scan codes d'un clavier de PC, pour que l'on puisse directement piloter des appareils sans logiciel particulier. C'est aussi le cas des douchettes à codes-barres qui sont faites pour s'intercaler en série sur le port PS/2 et qui, lors d'un scan, renvoient directement le numéro correspondant comme si on l'avait tapé au clavier. Ce qui est d'ailleurs très appréciable puisque ça permet à l'opérateur de réellement le faire lorsque la lecture est impossible. Avec ces appareils, il n'y a pas de touche du tout ! :-) Et pourtant, ils envoient quand même bien des scan codes. Citation:
Ce qui serait beaucoup plus propre en revanche, c'est d'associer son propre scan code à ta touche Fn et de fournir un pilote pour l'ordinateur hôte. Ça résoudrait tous tes problèmes, y compris de compatibilité descendante, et ça permettrait à ton clavier de fonctionner malgré tout comme un clavier ordinaire si le pilote n'est pas installé. C'est faisable, il y a de la place, mais la norme ne prévoit pas, à ma connaissance, de scan code « réservé » pour un usage utilisateur. Ce n'est pas forcément très grave. Citation:
Citation:
Et encore, même là, ce n'est pas forcément ce qu'il faut faire à tout prix : sur clavier français, le Caps Lock n'est pas forcément synonyme de Shift : AltGr avec Caps Lock actif n'est pas l'équivalent de de « AltGr + Shift ». Et de toutes façons, cela se paramètre au niveau logiciel. Sous Windows, c'est relativement statique mais il y a quand même des options d'accessibilité qui modifient tout cela. Sous Linux, la correspondance scan code ↔ caractère peut être modifiée à volonté par l'utilisateur et les systèmes comme iBus et le système de saisie de Gnome permettent de passer plein d'options pour « régionaliser » le comportement du clavier. C'est ce qui se passe lorsqu'on se fait imposer par sa hiérarchie des concepts apparemment simples et qui trahissent en fait de grosses faiblesses dans la conception même, surtout lorsqu'on ne peut y déroger. Et enfin, la grande question : pourquoi as-tu besoin de faire cela ? Tu comprends bien que si tu envoies « @ » en faisant « Fn + 8 », l'utilisateur pourra tout autant saisir le même caractère en tapant « AltGr + 0 » et ni le PC, ni ton clavier ne seront capables de faire la différence entre les deux (à moins que ton clavier soit dépourvu de touche AltGr). |
||||||
|
|
00
|
|
|
#17 | ||||
|
Invité de passage
![]() Benjamin Responsable des études Inscription : novembre 2012 Messages : 26 ![]() |
salut et encore merci pour ton temps.
Je ne suis pas sur que tu ai tout compris : Regarde : Code :
J'en reviens donc a ta suggestion, si je fais ca, c'est que je devais faire un clavier le plus compact possible (AZERTY 71 touches avec pavé numérique !) c'est pourquoi j'ai du placer une touche Fn pour les caractères spéciaux ! Concernant le relachement, il est deja geré par le firmware, mais en fait quand on fait AltGr+0 il me sors : Appui AltGr, Appui 0, Relachement 0 et relachement AltGr. Maintenant avec le bout de soft que je t'ai montrer plus haut, lorsque je fait Fn+2 il simule : Appui AltGr, Appui 0 (normal jusque la), Relachement AltGr et relachement 0 (il inverse les deux relachements, je sais pas si ca peut poser un probleme? Pour le Capslock, j'ai fait ca : (qui ne marche pas, mais tu pense que je pourrais m'en approcher?) Code :
|
||||
|
|
00
|
|
|
#18 | |||||
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
Hello,
Citation:
À en voir ta matrice, tu développes un clavier matriciel à quinze colonnes et à cinq lignes, soit un maximum de 75 touches (et en l'occurrence 71). Et donc, effectivement, pas du tout une disposition de PC. Citation:
Par contre, es-tu sûr que c'est bien dans cet ordre que tes séquences sont envoyées et pas « Appui sur AltGr ; Relachement de AltGr ; Appui sur 0 ; Relachement de 0 ; » ? Je demande cela parce qu'on ne sait pas comment fonctionne ta routine clavier. Il se peut qu'elle conserve une trace de toutes les touches « enfoncées » pour les relacher ensuite à une autre position de ton programme. Mais j'ai le sentiment que les codes que tu nous montres à ton commentaire numéro 7 servent en fait à ça et devraient être passés d'une manière ou d'une autre à la routine au moment de l'émission d'une touche. Pour le reste, tu simules un layout de PC qui ne correspond pas à ton clavier réel. Il faut donc que tu en choisisse un arbitrairement sur le PC et que tu t'y tiennes de ton côté. Apparemment, tu as choisi l'AZERTY français ordinaire. En principe, dans les configurations les plus courantes, « AltGr » n'est pas sensible au Caps Lock. Un « AltGr + 0 » devrait donc se traduire en « @ » dans tous les cas. Mais comme dit plus haut, ce n'est qu'une politique du système d'exploitation, qui peut facilement changer. Pour « > », avec « Shift + < », ma distribution de Linux ne tient pas compte non plus du Caps Lock ! En fait, elle ne l'applique qu'aux lettres, susceptibles d'être écrites en majuscules. Donc ça change selon les layouts et les systèmes d'exploitation. Citation:
Je suppose que le PC hôte fonctionne sous Windows. Même si le produit est probablement déjà en production sous une forme quelconque et que beaucoup de travail a déjà été fait par tes prédécesseurs, je t'encourage plutôt à développer un descripteur de clavier à l'intention du système d'exploitation. Ce sera plus facile et tu pourras alors gérer toutes tes touches de la façon qui t'intéresse sans avoir à recourir à ce genre d'artifice. |
|||||
|
|
00
|
|
|
#19 | ||||||||
|
Invité de passage
![]() Benjamin Responsable des études Inscription : novembre 2012 Messages : 26 ![]() |
Je ne suis pas assez bon developpeur pour recommencer tout à zéro !
Et comme on dit : on ne change pas une équipe qui gagne ^^ (ce soft est utilisé depuis plus de dix ans me semble-t-il ^^) Concernant AltGr, en effet il ne tient pas compte du CapsLock, cependant le Shift oui. Et je fais les caractères spéciaux, par exemple ":". Quand le capslock est actif je me retrouve donc avec "/" Je suis désolé mais je vais te mettre tout ce que j'ai trouvé sur les commandes des LEDs : dans portdef.inc (définition des ports quoi Code :
Code :
Code :
Code :
Voila je crois que j'ai rien oublié, et que c'est pas trop brouillon ! Au vue de ces infos, tu sais comment je peux tester cette foutue LED ? |
||||||||
|
|
00
|
|
|
#20 | ||
|
Invité de passage
![]() Benjamin Responsable des études Inscription : novembre 2012 Messages : 26 ![]() |
J'ai trouvé !!!
enfin en tout cas ca marche ^^ Code :
Si je fais Fn+F3, ca me fait ":" cependant, si je reste appuyé sur ces deux touches et que je lache Fn avant F3 et qu'ensuite je lache F3, il garde en memoire l'appui, et ne s'arrête pas de me mettre ":" La dessus je vois pas trop comment je dois faire Merci |
||
|
|
10
|
Copyright © 2000-2013 - www.developpez.com