4 – Comment faire des macros

Ergodox : un seul problème

Beaucoup de personnes, moi y compris, ont acheté l’Ergodox pour pallier à deux choses gênantes des claviers actuels (je parle pour ceux qui tapent beaucoup, comme moi) :

  • Être beaucoup mieux positionné avec les mains pour pouvoir écrire ;
  • Pouvoir entièrement configurer son clavier afin de pouvoir accéder plus rapidement aux touches d’habitude difficiles d’accès.

Vous allez sûrement faire les étapes que j’ai fait à savoir :

  • Utiliser le configurateur sur le site Massdrop ici ;
  • Faire une vraie correspondance entre les touches américaines QWERTY et notre bon clavier français AZERTY et j’ai fait un article dessus il y a quelques jours ;
  • S’apercevoir que finalement il manque des choses, notamment la possibilité de faire un pipe (j’ai dit « un » pipe, pas une pipe !) ou d’autres choses, qui ne nécessitent pas l’appui avec la touche SHIFT mais l’appui avec la touche ALTGR (oui oui avec le GR c’est à dire uniquement la touche ALT de droite du clavier).

Donc vous allez sûrement essayer d’aller chercher les dernières sources concernant le programme qui génère le fameux fichier de configuration de l’ergodox, le fichier HEX.
Ici : https://github.com/benblazak/ergodox-firmware.

Eh bien la compilation ne fonctionne pas. Pour être plus précis elle fonctionne, mais le fichier généré ne fait rien du tout : mon Ergodox ne fonctionne pas du tout.

Alors je me suis pris en main et j’ai commencé à étudier le code qui a été fait.

Maintenant venons-en à…

Ergodox : la solution

  1. Utilisez le configurateur sur le site Massdrop ici ;
  2. Configurez votre clavier comme vous le voulez, en utilisant les bonnes « traductions » des touches dont je donne l’aide dans l’article précédent sur l’Ergodox ;
  3. Récupérez les sources, pas juste le fichier binaire, cochez juste comme ceci :
    Ergodox Configurator download with source checked
  4. Dans le fichier lib\key-functions\public\special.c, ajoutez aux directives « include » celle-ci :

    #include <util/delay.h>

  5. Dans même fichier lib\key-functions\public\special.c, ajoutez cette fonction :


    /*
     * [name]
     *   ALTGR + press|release
     *
     * [description]
     *   Generate a 'altgr' press or release before the
     *   normal keypress or keyrelease
     */
    void kbfun_altgr_press_release(void) {
        /* Remember old state before modifying it */
        bool backup_pressed = _kbfun_is_pressed(KEY_RightAlt);
        /* Force the state to "pressed" */
        _kbfun_press_release(true, KEY_RightAlt);
        kbfun_press_release();
        /* Send the key */
        usb_keyboard_send();
        _delay_ms(MAKEFILE_DEBOUNCE_TIME);
        /* Restore previous state */
        _kbfun_press_release(backup_pressed, KEY_RightAlt);
    }

  6. Maintenant, vous avez donc crée une fonction qui permet de « forcer » l’appui sur ALTGR et d’envoyer la touche concernée.
    Déclarez cette fonction dans lib/key-functions/public.h :

    Juste avant la déclaration de kbfun_shift_press_release, mettez-y la vôtre :

        // special
        void kbfun_altgr_press_release           (void);
        void kbfun_shift_press_release           (void);
        void kbfun_2_keys_capslock_press_release (void);

  7. Touche finale : le fichier dans lequel il y a la configuration de votre clavier :

    keyboard/ergodox/layout/default--layout.c

    A l’endroit des définitions, ajoutez-y la vôtre :

    // DEFINITIONS
    ...
    blabla
    ...
    #define  salprre  &kbfun_altgr_press_release
    #define  sshprre  &kbfun_shift_press_release
    ...
    blabla
    ...

  8. Ca y est, vous avez votre fonction prête à être appelée.
    Il vous suffira juste de chercher sur quelle touche l’appliquer.
    Je vais vous donner un exemple simple, et après à vous de l’adapter : l’exemple est avec le symbole € : nous allons remplacer, juste pour l’exemple, la touche « e » par simuler qu’on appuie sur la touche ALTGR et e (comme on le fait sur un clavier classique, pour avoir le symbole ).

    Ouvrez le fichier keyboard/ergodox/layout/default--layout.c dans lequel vous venez juste de déclarer (étape juste avant) votre fonction ALTGR sous la forme raccourcie salprre.

    Voici le principe qu’a fait le développeur : pour une couche, il crée deux tableaux : un tableau dans lequel il y a les « codes » clavier à envoyer, tableau qui a la taille du clavier, donc, et un autre tableau, qui a la taille du clavier, dans lequel il y a les fonctions à appeler pour chaque touche. Oui je sais c’est très laid, c’est discutable etc mais c’est fait ainsi. Comme il y a plusieurs couches, il y a donc, si vous avez suivi :

    • un tableau composé lui même des tableaux des touches pour chaque couche
    • un tableau composé lui même des tableaux des fonctions à appeler lorsqu’on presse la touche, et ces fonctions reçoivent en paramètre la touche qui a été cherchée dans le tableau précédent

    Dans ce fichier, allez chercher là où il y a la déclaration de la touche e. Pour moi c’est facile, c’est sur la couche 0 car j’ai configuré mon clavier presque comme un clavier « normal » AZERTY donc ici :

    Ergodox configurator source layer 0 key e

  9. A partir d’ici, mémorisez bien la ligne et la colonne. Ici c’est donc ligne 2, colonne 4. Ensuite descendez dans le code et cherchez la déclaration des fonctions. Placez vous à la même couche, même ligne et même colonne comme ceci :

    Ergodox configurator source layer 0 functions

    Et il vous suffit juste de remplacer le nom de l’appel de la fonction actuel (kprrel) par l’appel de votre fonction soit salprre

    Ergodox configurator source layer 0 function properly replaced by my own function

  10. Et voilà il ne vous reste plus qu’à compiler :

    Ergodox configurator compilation of the source

  11. Vous avez terminé ! Transférez le fichier HEX sur votre Ergodox, et voilà : avec mon exemple, vous ne pouvez plus qu’écrire des € à la place des « e » normaux. Elle est pas belle la vie ?
  12. Il vous faudra répéter les opérations à partir de l’étape 7 à chaque fois que vous récupérerez un nouveau layout via le configurator du site Ergodox.

unity master server

network view = instance et sur chaque objet

un personnage c’est un composant

2 comments

Poster un commentaire

Vous devriez utiliser le HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.