Hello, les choses avançant, je me suis dit que je communiquerais bien un peu sur mon p'tit bidule.
A quoi ressemblé-ce ?
Spoiler
Les petites features qui font bien du plaisir...
Spoiler
Softkeyboard :
- Multitap sur les lettres produit les accents correspondants
- Certaines touches de ponctuation utilisent aussi ce principe
- Format compact en horizontal
- Il est escamotable (touche en bas à gauche)
- Fonctionnement similaire au clavier par défaut pour le reste (popup de lettres et symboles, ...)
Clavier externe :
- Permet le réarrangement des touches du clavier (azerty/qwerty/qwertz ou même ezrjhoh si ça vous chante) entièrement configurable (avec un sale fichier de config bien geek)
- Modification des "Glyphs" des touches à volonté (4 glyphs : frappe normale, shift, alt et sym)
Fonctionnement du remapping du clavier
Spoiler
La théorie pour bien comprendre la pratique :
SpoilerPour bien commencer il faut comprendre que les touches d'un clavier physique émettent des codes (nombres) qu'on appellera scancodes
Le noyau android traduit ces scancodes en leur équivalent logique : les keycodes.
Prenons l'exemple de la touche "&/1" sur un clavier AZERTY.
Lorsqu'on presse cette touche, le système reçoit un scancode qui signifie 'deuxième touche de la première rangée'.
Suivent deux étapes :
- scancode to keycode
Cette touche passe à travers le filtre de la disposition externe du clavier Archos qui l'associe au keycode 'KEYCODE_1' (en gros la touche logique 1).
- keycode to glyph
Si on est sur une zone de texte, la touche repasse à travers un autre filtre Archos qui transforme le keycode 'KEYCODE_1' en '&' ou '1' en fonction de l'état du shift. (si ça n'est pas une zone de texte modifiable, cette étape n'a pas lieu et le destinateur reçoit simplement le keycode).
Fichiers pour le remapping des touches
SpoilerOn choisit d'abord la configuration du clavier externe la plus proche de ce qu'on souhaite, puis on crée un répertoire contenant deux fichiers de configuration qui contiendront les changements par rapport au mapping.
- créer le répertoire /mnt/storage/keyremap (ou directement keyremap à la racine de l'archos en USB sous windows)
- créer le fichier texte /mnt/storage/keyremap/s2k.cfg (ou keyremap\s2k.cfg sous windows)
- créer le fichier texte /mnt/storage/keyremap/k2g.cfg (ou keyremap\k2g.cfg sous windows)
Procédure pour le remapping d'une touche :
Spoiler- Echange de deux touches (sans modification des glyphs qu'elles produisent)
Spoilerexemple : on veut échanger A et Q (clavier AZERTY)
on écrit dans le fichier s2k.cfg les deux lignes suivantes :
30 => 45
16 => 29
Où 30 et 16 sont les scancodes (voir la théorie plus haut) des touches physiques A et Q et
45 et 29 sont les keycodes pour les touches 'Q' et 'A'
On sauve, on redémarre le clavier et ça fonctionne. Les deux touches ont été échangées.
- Résurrection d'une touche morte
Spoiler
exemple : on a une touche volume up sur notre clavier externe : on souhaite qu'android la prenne en compte
On a déterminé que la dite touche avait le scancode 114 (voir Comment connaître le scancode de telle ou telle touche ? ci-dessous)
On s'est rendu compte qu'android possédait une touche logique KEYCODE_VOLUME_DOWN ayant pour keycode 25 dans le tableau des touches logiques android.
On ajoute donc la ligne suivante dans le fichier s2k.cfg
114 => 25
Et c'est fini.
- Changement des lettres associées aux touches
1) produire 'ç' en appuyant sur alt+C
Spoiler
exemple: on souhaite changer le comportement de la touche C pour qu'elle produise 'c' en normal 'C' avec shift 'ç' avec alt et '©' avec sym
Cette fois-ci ça se passe dans le fichier k2g.cfg.
Chaque ligne de ce fichier comporte 5 éléments séparés par des espaces, dans l'ordre :
[keycode] [normal] [shift] [alt] [sym]
Le reste de la ligne est ignoré.
Sachant que le keycode (attention pas le scancode!) de la touche C est KEYCODE_C = 31 (en consultant le tableau des touches logiques android ou en utilisant la méthode Comment connaître le scancode de telle ou telle touche ? plus bas, il suffit d'écrire la ligne suivante dans le fichier k2g.cfg.
31 c C ç ©
Mais attention de bien le sauver en UTF8!
2) Affecter le vrai comportement à la touche 'circonflexe/tréma'
Spoiler
Ça se passe dans dans k2g.cfg, voir le 1) pour le format.
On a repéré que le keycode de cette touche est 71 (pour le mapping archos azerty).
On veut lui affecter le caractère dead-circonflexe en normal, dead-trema en shift, et pourquoi pas '♥' avec alt
On écrit la ligne suivante dans le fichier k2g.cfg
71 0302 0308 ♥ 0000
Nouvelle astuce : lorsqu'il ne s'agit pas d'un caractère unique (comme ♥) une séquence de 4 chiffres hexadécimaux sert à coder le caractère unicode correspondant.
On l'a utilisé ici pour définir les caractères unicode
0302 : combining circomflex accent
0308 : combining diaeresis
qui sont utilisés par android pour représenter les touches 'mortes' correspondantes
Voir la page des accents unicode : http://www.unicode.org/charts/PDF/U0300.pdf pour d'autres exemples possibles.
Comment connaître le scancode de telle ou telle touche ?
SpoilerAppui long sur la touche "clavier" en bas à gauche du clavier à l'écran (le mien!) fait apparaître un menu : sélectionner "Enable key notification".
Dès lors à chaque appui sur les touches du clavier externe, on a une petite notification qui le précise. Par exemple, pour la touche 'A' :
Physical(Scancode): 30
Logical(Keycode): 29 'A' key
Ca signifie que le scancode de la touche 'A' est 30 et qu'elle est associée au keycode 29 qui signifie 'A' (sans le remapping archos, on aurait le keycode 'Q').
On redésactive la notification par le même menu.
Comment connaître les keycodes possible sous android ?
SpoilerLa liste exhaustive des keycodes peut être trouvée ici
On peut également aussi les trouver avec la même méthode que pour les scancodes ci-dessus.
Développements prévus ...
Spoiler
Une liste d'idées à réaliser
- Support de la touche caps lock
- Une véritable interface pour configurer le remapping des touches
- ... tant de choses (voir les items retenus dans la langue de Shakespeare).
Se procurer ce keyboard
Désolé, il est trop alpha pour que je me risque à vous filer une apk
Les plus curieux et téméraires iront jeter un coup d'oeil aux sources.
Cependant ATTENTION, un clavier n'est pas une appli comme les autres :
- Vous l'utilisez pour taper vos mots de passes
- Il est parfois votre seule interface avec le système : que se passe t'il s'il devient fou ? Normalement ça se règle par un reboot mais vous pouvez potentiellement vous retrouver avec un système inutilisable...
l'APK du clavier...
SpoilerVoici le clavier dans sa version très alpha...
Attention, c'est un tout petit peu dangereux d'installer ça! Réfléchissez et ne me pourrissez pas si ça plante
(notez que la version release n'est pas construite tout à fait pareil que la version debug, il peut y avoir de nouveaux soucis et des erreurs de jeunesse)
Un clavier ne s'installe pas pareil qu'une autre appli : il faut en plus :
- l'activer dans Parametres/langue et clavier
- l'activer en touchant longtemps une zone de texte puis "mode de saisie" pour enfin le sélectionner.
Enfin : pas de grand intérêt pour les petits devices en mode paysage : les touches seront trop petites.
Si vous avez bien lu :
Spoiler




Répondre avec citation

