Outils pour utilisateurs

Outils du site


ergodox

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
Prochaine révisionLes deux révisions suivantes
ergodox [2019/04/10 19:54] – [Configurer le layout] simonergodox [2020/10/19 12:50] – [Introduction] simon
Ligne 1: Ligne 1:
 ====== Ergodox ====== ====== Ergodox ======
-{{ :img_20190207_232329.jpg?400 |}} +{{tag>clavier ergodox}}
-(D'autres photos : [[https://simonlefort.be/images/?dir=keyboard|Galerie]])+
  
-===== Flasher le firmware ===== +===== Introduction =====
-J'ai tout d'abord essayé avec le firmware "tmk" mais je n'ai jamais réussi à avoir quelque chose de fonctionnel. Le firmware est apparemment envoyé sur le clavier mais pas une touche ne marche. +
  
-Pour mémoire: +Ça fait longtemps que j'ai le projet de me fabriquer et d'apprendre à utiliser un clavier mécanique. Après avoir regardé longuement, bavé sur des modèles comme le [[https://marcyoung.us/post/pterodactyl/|Pterodactyl]]ou d'autres claviers particuliers comme le [[https://www.velocifiretech.com/product/dumang-dk6-ergo-v2/|DUMANG DK6]] ([[https://hackers.town/@zpojqwfejwfhiunz/103573273574733970|pouet mastodon]]), j'ai choisi de m'orienter vers un [[https://www.ergodox.io/|Ergodox]].
-<hidden> +
-<code bash> +
-simon@deb:~/Programmes$ git clone https://github.com/cub-uanic/tmk_keyboard.git +
-</code> +
-<hidden> +
-<code bash> +
-Clonage dans 'tmk_keyboard'... +
-remote: Enumerating objects: 1done. +
-remote: Counting objects: 100% (1/1), done. +
-remote: Total 17079 (delta 0), reused 0 (delta 0), pack-reused 17078 +
-Réception d'objets100% (17079/17079), 22.31 MiB | 3.12 MiB/s, fait. +
-Résolution des deltas: 100% (10038/10038), fait. +
-</code> +
-</hidden> +
-<code bash> +
-simon@deb:~/Programmes$ cd tmk_keyboard/keyboard/ergodox/ +
-simon@deb:~/Programmes/tmk_keyboard/keyboard/ergodox$ make -f Makefile.lufa clean +
-</code> +
-<hidden> +
-<code bash> +
-simon@deb:~/Programmes/tmk_keyboard/keyboard/ergodox$ make -f Makefile.lufa+
  
--------- begin -------- +Après avoir rêvé de tout reprendre de A à Z, de fabriquer le boitier en fibre de carbone et redessiner la carte électronique, je me suis avoué vaincu par le temps. J'ai commandé un kit chez [[https://falba.tech/customize-your-keyboard/customize-your-ergodox/?v=d3dcf429c679|falba.tech]].
-avr-gcc (GCC) 5.4.0 +
-Copyright (C) 2015 Free Software Foundation, Inc. +
-This is free software; see the source for copying conditions.  There is NO +
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.+
  
-(...)+{{ :img_20190207_232329.jpg?400 |}} 
 +(D'autres photos : [[https://images.simonlefort.be/?dir=Keyboard|Galerie]])
  
 +===== Programmer le clavier =====
  
-Creating load file for Flash: ergodox_lufa.hex +==== Installation de QMK ====
-avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature ergodox_lufa.elf ergodox_lufa.hex+
  
-Creating load file for EEPROMergodox_lufa.eep +Après avoir testé le [[https://github.com/tmk/tmk_keyboard|firmware TMK (github)]] sans succès, je suis passé à [[https://qmk.fm/|QMK (site)]]. Pour l'installation, j'ai suivi la [[https://docs.qmk.fm/#/|documentation de QMK]]Installation avec pip3 :  
-avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \ +<code bash> 
---change-section-lma .eeprom=0 --no-change-warnings -O ihex ergodox_lufa.elf ergodox_lufa.eep || exit 0+$ python3 -m pip install --user qmk 
 +</code>
  
-Creating Extended Listingergodox_lufa.lss +J'ai copié [[https://github.com/qmk/qmk_firmware/blob/master/util/udev/50-qmk.rules|ce fichier]] pour les règles [[informatique:udev]] :  
-avr-objdump ---z ergodox_lufa.elf ergodox_lufa.lss+<code bash> 
 +$ sudo vim /etc/udev/rules.d/50-qmk.rules 
 +$ sudo udevadm control --reload-rules 
 +$ sudo udevadm trigger 
 +</code>
  
-Creating Symbol Table: ergodox_lufa.sym +J'ai fait la configuration comme indiqué 
-avr-nm -n ergodox_lufa.elf > ergodox_lufa.sym +
- +
-Size after: +
-   text    data     bss     dec     hex filename +
-  23404      58     314   23776    5ce0 ergodox_lufa.elf +
-</code> +
-</hidden> +
-Vérification du MCU (voir [[https://pjrc.com/teensy/loader_cli.html|pjrc.com]]) :+
 <code bash> <code bash>
-simon@deb:~/Programmes/tmk_keyboard/keyboard/ergodoxcat Makefile.lufa | grep MCU +qmk setup
-# MCU name, you MUST set this to match the board you are using +
-MCU = atmega32u4 +
-#MCU = at90usb1286+
 </code> </code>
 +Il installe toutes les dépendances, vérifie les règles udev, demande où il peut s'installer par défaut, etc.. (Il reste quelques erreurs relatives à udev mais elles concernent d'autres types de clavier et ne semblent pas poser de problèmes pour la suite.)
  
-{{ ::ergodox-teensy-flash01.png?400 |}} +==== Créer une "keymap" ====
-{{ ::ergodox-teensy-flash02.png?400 |}} +
-{{ ::ergodox-teensy-flash03.png?400 |}} +
-</hidden> +
- +
-Ensuite, j'ai essayé avec le firmware [[https://qmk.fm/|qmk]] ([[https://github.com/qmk/qmk_firmware.git|github]]), qui est lui-même basé sur tmk, avec plus de succès.+
  
 +J'ai créé une nouvelle keymap dans le dossier de l'ergodox_ez (qui correspond le plus à ce que j'ai) :
 <code bash> <code bash>
-simon@deb:~/gitgit clone https://github.com/qmk/qmk_firmware.git+qmk new-keymap -kb ergodox_ez 
 +Keymap Name: my-ergodox 
 +Ψ my-ergodox keymap directory created in: /home/simon/qmk_firmware/keyboards/ergodox_ez/keymaps/my-ergodox 
 +Ψ Compile a firmware with your new keymap by typing: 
  
-simon@deb:~/git$ cd qmk_firmware/+ qmk compile -kb ergodox_ez -km my-ergodox 
 +</code>
  
-simon@deb:~/git/qmk_firmware$ ls +On peut modifier cette keymap :  
-autocomplete.sh     common.mk     LICENSE                  shell.nix +<code bash> 
-book.json           Dockerfile    license_GPLv2.md         show_options.mk +vim ~/qmk_firmware/keyboards/ergodox_ez/keymaps/my-ergodox/keymap.c
-bootloader.mk       docs          license_GPLv3.md         testlist.mk +
-build_full_test.mk  Doxyfile      license_Modified_BSD.md  tests +
-build_keyboard.mk   doxygen-todo  Makefile                 tmk_core +
-build_layout.mk     drivers       message.mk               users +
-build_test.mk       keyboards     quantum                  util +
-CODE_OF_CONDUCT.md  layouts       readme.md                Vagrantfile +
-common_features.mk  lib           secrets.tar.enc +
- +
-simon@deb:~/git/qmk_firmwarels -al keyboards/ +
-total 980 +
-(...) +
-drwxr-xr-x   3 simon simon 4096 avr 10 19:49 ergodone +
-drwxr-xr-x   4 simon simon 4096 avr 10 19:49 ergodox_ez +
-drwxr-xr-x   3 simon simon 4096 avr 10 19:49 ergodox_infinity +
-(...) +
- +
-simon@deb:~/git/qmk_firmware$ ls -al keyboards/ergodox_ez/ +
-total 84 +
-drwxr-xr-x   4 simon simon  4096 avr 10 19:49 . +
-drwxr-xr-x 243 simon simon  4096 avr 10 19:49 .. +
--rw-r--r--   1 simon simon   673 avr 10 19:49 190hotfix.sh +
--rw-r--r--   1 simon simon  4340 avr 10 19:49 config.h +
--rw-r--r--   1 simon simon 11644 avr 10 19:49 ergodox_ez.c +
--rw-r--r--   1 simon simon 11160 avr 10 19:49 ergodox_ez.h +
--rw-r--r--   1 simon simon  8830 avr 10 19:49 info.json +
-drwxr-xr-x  24 simon simon  4096 avr 10 19:49 keymaps +
--rw-r--r--   1 simon simon  9196 avr 10 19:49 matrix.c +
--rw-r--r--   1 simon simon  1298 avr 10 19:49 readme.md +
--rw-r--r--   1 simon simon  3481 avr 10 19:49 rules.mk +
-drwxr-xr-x   2 simon simon  4096 avr 10 19:49 util +
- +
-simon@deb:~/git/qmk_firmware$ ls -al keyboards/ergodox_ez/keymaps/ +
-total 96 +
-(...) +
-drwxr-xr-x  2 simon simon 4096 avr 10 19:49 bdk +
-drwxr-xr-x  2 simon simon 4096 avr 10 19:49 bepo_tm_style +
-drwxr-xr-x  2 simon simon 4096 avr 10 19:49 blakedietz +
-(...) +
- +
-simon@deb:~/git/qmk_firmware$ make git-submodule +
- +
-simon@deb:~/git/qmk_firmware$ make ergodox_ez:bepo_tm_style:all  +
-QMK Firmware 0.6.328 +
-Making ergodox_ez with keymap bepo_tm_style and target all +
- +
-avr-gcc (GCC) 5.4.0 +
-Copyright (C) 2015 Free Software Foundation, Inc. +
-This is free software; see the source for copying conditions.  There is NO +
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +
- +
-Size before: +
-   text    data     bss     dec     hex filename +
-      0   30658       0   30658    77c2 .build/ergodox_ez_bepo_tm_style.hex +
- +
-Compiling: tmk_core/common/command.c                                                                [OK] +
-Linking: .build/ergodox_ez_bepo_tm_style.elf                                                        [OK] +
-Creating load file for flashing: .build/ergodox_ez_bepo_tm_style.hex                                [OK] +
-Copying ergodox_ez_bepo_tm_style.hex to qmk_firmware folder                                         [OK] +
-Checking file size of ergodox_ez_bepo_tm_style.hex                                                  [OK] +
- * The firmware size is fine - 30658/32256 (1598 bytes free)+
 </code> </code>
  
-Le firmware ( ergodox_ez_bepo_tm_style.hex ) est dans le dossier courant. On peut l'envoyer avec cette commande +Ensuite, on peut la compiler :
 <code bash> <code bash>
-simon@deb:~/git/qmk_firmwareteensy_loader_cli --mcu=atmega32u4 -v -w ergodox_ez_bepo_tm_style.hex  +qmk compile -kb ergodox_ez -km my-ergodox
-Teensy Loader, Command Line, Version 2.1 +
-Read "ergodox_ez_bepo_tm_style.hex": 30658 bytes, 95.0% usage +
-Waiting for Teensy device... +
- (hint: press the reset button) +
-Found HalfKay Bootloader +
-Read "ergodox_ez_bepo_tm_style.hex": 30658 bytes, 95.0% usage +
-Programming................................................................................................................................................................................................................................................ +
-Booting+
 </code> </code>
  
-Maintenant qu'on a compris la procédure pour envoyer un layout choisi sur le clavier, on doit faire le layout qui nous convient et recommencer la procédure.+==== Envoyer la configuration sur le clavier ====
  
-===== Configurer le layout ===== +Enfin, on peut l'envoyer sur le clavier avec [[informatique:teensy-loader-cli]] :
-On commence par faire une copie du layout bepo pour l'ergodox_ez :+
 <code bash> <code bash>
-simon@deb:~/git/qmk_firmwarecp -r keyboards/ergodox_ez/keymaps/bepo_tm_style/ keyboards/ergodox_ez/keymaps/bepo_simon +teensy_loader_cli --mcu=atmega32u4 -v -w ~/qmk_firmware/.build/ergodox_ez_my-ergodox.hex
- +
-simon@deb:~/git/qmk_firmware$ ls -al keyboards/ergodox_ez/keymaps/bepo_simon/ +
-total 32 +
-drwxr-xr-x  2 simon simon  4096 avr 10 20:10 . +
-drwxr-xr-x 25 simon simon  4096 avr 10 20:10 .. +
--rwxr-xr-x  1 simon simon   694 avr 10 20:10 config.h +
--rwxr-xr-x  1 simon simon 12235 avr 10 20:10 keymap.c +
--rwxr-xr-x  1 simon simon   770 avr 10 20:10 readme.md +
--rwxr-xr-x  1 simon simon   646 avr 10 20:10 rules.mk+
 </code> </code>
  
-Keymap WIP ( 10/04/2019 ) : +**__État des lieux le 18/10/2020 :__** Toutes les touches fonctionnes mais je n'ai pas encore modifié la keymap créée par défaut... Il faut que j'attaque ça avant de m'habituer au clavier.
-<hidden> +
-<code> +
-// An Ergodox EZ keymap meant to be used with a bépo layout (FR ergonomic +
-// layout, dvorak style)The overall design is slightly inspired by the +
-// TypeMatrix keyboardSwitching between a TypeMatrix and an Ergodox with this +
-// layout should be relatively easy. +
-// +
-// See the README.md file for an image of this keymap.+
  
-#include QMK_KEYBOARD_H +**__État des lieux le 19/10/2020 :__** J'avance, j'ai un layout à peu près convenable pour le calque de base.
-#include "keymap_bepo.h"+
  
-// The layers that we are defining for this keyboards. 
-#define BASE 0 
-#define FN 1 
-#define MOUSE 2 
-#define NUMS 3 
-#define SWAP 4 
-#define SYSLEDS 5 
- 
-// The Tap Dance identifiers, used in the TD keycode and tap_dance_actions array. 
-#define TAP_MACRO 0 
- 
-// A 'transparent' key code (that falls back to the layers below it). 
-#define ___ KC_TRANSPARENT 
- 
-// A 'blocking' key code. Does nothing but prevent falling back to another layer. 
-#define XXX KC_NO 
- 
-// Some combined keys (one normal keycode when tapped and one modifier or layer 
-// toggle when held). 
-#define ESC_FN    LT(FN, KC_ESC)        // ESC key and FN layer toggle. 
-#define M_RSFT    MT(MOD_RSFT, BP_M)    // 'M' key and right shift modifier. 
-#define W_RCTL    MT(MOD_RCTL, BP_W)    // 'W' key and right control modifier. 
-#define SPC_RALT  MT(MOD_RALT, KC_SPC)  // SPACE key and right alt modifier. 
-#define PERC_FN    LT(FN, BP_PERC)      // '%' key and FN layer toggle. 
- 
-// The most portable copy/paste keys (windows (mostly), linux, and some terminal emulators). 
-#define MK_CUT    LSFT(KC_DEL)  // shift + delete 
-#define MK_COPY   LCTL(KC_INS)  // ctrl + insert 
-#define MK_PASTE  LSFT(KC_INS)  // shift + insert 
- 
-// Custom keycodes 
-enum { 
-  // SAFE_RANGE must be used to tag the first element of the enum. 
-  // DYNAMIC_MACRO_RANGE must always be the last element of the enum if other 
-  // values are added (as its value is used to create a couple of other keycodes 
-  // after it). 
-  DYNAMIC_MACRO_RANGE = SAFE_RANGE, 
-}; 
- 
-// This file must be included after DYNAMIC_MACRO_RANGE is defined... 
-#include "dynamic_macro.h" 
- 
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 
-/* Keymap 0: Basic layer 
- * 
- * ,--------------------------------------------------.          ,--------------------------------------------------. 
- * |        |   "  |   «  |   »  |    |    |    |          |    |    |   /  |    |    |    |        | 
- * |--------+------+------+------+------+-------------|          |------+------+------+------+------+------+--------| 
- * |  TAB      |   é  |    |    |   è  |    |          |    |    |    |    |    |    |        | 
- * |--------+------+------+------+------+------|      |          |      |------+------+------+------+------+--------| 
- * |  SHIFT |    |    |    |    |   ;  |------|          |------|    |    |    |    |   ç  |        | 
- * |--------+------+------+------+------+------|    |          |    |------+------+------+------+------+--------| 
- * |  CTRL  |   ê  |   à  |    |    |   :  |      |          |      |    |    |    |    |    |        | 
- * `--------+------+------+------+------+-------------'          `-------------+------+------+------+------+--------' 
-   |ESC/FN| HOME | PGDN | PGUP |  END |                                      | LEFT | DOWN |  UP  | RIGHT|ESC/FN| 
-   `----------------------------------'                                      `----------------------------------' 
-                                        ,-------------.      ,-------------. 
-                                        |    |      |      |  ?        | 
-                                 ,------|------|------|      |------+------+------. 
-                                      |      |      |      |      |      |      | 
-                                      |      |------|      |------|      |      | 
-                                      |      |      |      |      |      |      | 
-                                 `--------------------'      `--------------------' 
- */ 
-  [BASE] = LAYOUT_ergodox( 
-    /* left hand */ 
-    ___,      BP_DQOT, BP_LGIL,    BP_RGIL, BP_LPRN, BP_RPRN, BP_AT, 
-    KC_TAB,   BP_B,    BP_ECUT,    BP_P,    BP_O,    BP_EGRV, BP_C, 
-    KC_LSFT,  BP_A,    BP_U,       BP_I,    BP_E,    BP_COMM, 
-    KC_LCTRL, BP_ECRC, BP_A_GRAVE, BP_Y,    BP_X,    BP_DOT,  BP_K, 
-    ESC_FN,   KC_HOME, KC_PGDN,    KC_PGUP, KC_END, 
-                                                               KC_EXLM, ___, 
-                                                                        ___, 
-                                                          ___, ___,     ___, 
-    /* right hand */ 
-        BP_PLUS, BP_MINS, BP_SLSH,  BP_ASTR, BP_EQL, KC_PERCENT, ___, 
-        BP_V,    BP_D,    BP_L,     BP_J,    BP_Z,   BP_W,       ___, 
-                 BP_S,    BP_R,     BP_N,    BP_M,   BP_CCED,    ___, 
-        BP_T,    BP_Q,    BP_G,     BP_H,    BP_F,   BP_DOLLAR,  ___, 
-                          KC_LEFT,  KC_DOWN, KC_UP,  KC_RIGHT,   ESC_FN, 
-    ___, S(KC_SLASH), 
-    ___, 
-    ___, ___,         ___), 
- 
-/* Keymap 1: Symbol Layer 
- * 
- * ,--------------------------------------------------.          ,--------------------------------------------------. 
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |          |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |        | 
- * |--------+------+------+------+------+------+------|          |------+------+------+------+------+------+--------| 
- * |        |      |      |      |      |      |      |          |      |   Up | HOME |  UP  | END  | PGUP |        | 
- * |--------+------+------+------+------+------|      |          |      |------+------+------+------+------+--------| 
- * |        |      |      |      |      | LSFT |------|          |------| Down | LEFT | DOWN | RIGHT| PGDW |        | 
- * |--------+------+------+------+------+------|      |          |      |------+------+------+------+------+--------| 
- * |        |      | CUT  | COPY | PASTE| LCTRL|      |          |      |      |      |      |      |      |        | 
- * `--------+------+------+------+------+-------------'          `-------------+------+------+------+------+--------' 
-        |      |      |      |      |                                      |      |      |      |      |      | 
-   `----------------------------------'                                      `----------------------------------' 
-                                        ,-------------.      ,-------------. 
-                                        |      | VOLU |      | HOME | END  | 
-                                 ,------|------|------|      |------+------+------. 
-                                      |      | VOLD |      | PGUP |      |      | 
-                                      |      |------|      |------|      |      | 
-                                      |      | MUTE |      | PGDW |      |      | 
-                                 `--------------------'      `--------------------' 
- */ 
-  [FN] = LAYOUT_ergodox( 
-    /* left hand */ 
-    ___,   KC_F1,  KC_F2,   KC_F3,    KC_F4,    KC_F5,    KC_F6, 
-    ___,     ___,    ___,     ___,      ___,      ___,      ___, 
-    ___,     ___,    ___,     ___,      ___,  KC_LSFT, 
-    ___,     ___, MK_CUT, MK_COPY, MK_PASTE, KC_LCTRL,      ___, 
-    ___,     ___,    ___,     ___,      ___, 
-                                                     ___, KC_VOLU, 
-                                                          KC_VOLD, 
-                                             ___,    ___, KC_MUTE, 
-    /* right hand */ 
-      KC_F7, KC_F8,   KC_F9,  KC_F10,   KC_F11,  KC_F12,    ___, 
-        ___,   ___, KC_HOME,   KC_UP,   KC_END, KC_PGUP,    ___, 
-               ___, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN,    ___, 
-        ___,   ___,     ___,     ___,      ___,     ___,    ___, 
-                        ___,     ___,      ___,     ___,    ___, 
-    KC_HOME, KC_END, 
-    KC_PGUP, 
-    KC_PGDN, ___,    ___), 
-    // Note that any change to the FN layer above must be added to 
-    // the MOUSE layer below (except for the arrow keys). 
- 
-/* Keymap 2: Media and mouse keys 
- * 
- * ,--------------------------------------------------.          ,--------------------------------------------------. 
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |          |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |        | 
- * |--------+------+------+------+------+-------------|          |------+------+------+------+------+------+--------| 
- * |        |      |      | MsUp |      |      |      |          |      |      |      |      |      |      |        | 
- * |--------+------+------+------+------+------|      |          |      |------+------+------+------+------+--------| 
- * |        |      |MsLeft|MsDown|MsRght|      |------|          |------|      |      |      |      |      |        | 
- * |--------+------+------+------+------+------|      |          |      |------+------+------+------+------+--------| 
- * |        |      |      |      |      |      |      |          |      |      |      |      |      |      |        | 
- * `--------+------+------+------+------+-------------'          `-------------+------+------+------+------+--------' 
-        |      |      |      |      |                                      |      |      |      |      |      | 
-   `----------------------------------'                                      `----------------------------------' 
-                                        ,-------------.      ,-------------. 
-                                        |      |      |      |      |      | 
-                                 ,------|------|------|      |------+------+------. 
-                                      |      |      |      |      |      |      | 
-                                      |      |------|      |------|      |      | 
-                                      |      |      |      |      |      |      | 
-                                 `--------------------'      `--------------------' 
- */ 
-  [MOUSE] = LAYOUT_ergodox( 
-    /* left hand */ 
-    ___,   KC_F1,  KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6, 
-    ___,     ___,    ___, KC_MS_U,     ___,     ___,     ___, 
-    ___,     ___,KC_MS_L, KC_MS_D, KC_MS_R,     ___, 
-    ___,     ___,    ___,     ___,     ___,     ___,     ___, 
-    ___,     ___,    ___,     ___,     ___, 
-                                                  ___, ___, 
-                                                       ___, 
-                                             ___, ___, ___, 
-    /* right hand */ 
-       KC_F7,  KC_F8,  KC_F9,  KC_F10,  KC_F11,  KC_F12,   ___, 
-         ___,  ___,      ___,     ___,     ___,     ___,   ___, 
-               ___,      ___,     ___,     ___,     ___,   ___, 
-         ___,  ___,      ___,     ___,     ___,     ___,   ___, 
-                         ___,     ___,     ___,     ___,   ___, 
-    ___, ___, 
-    ___, 
-    ___, ___, ___), 
- 
-/* Keymap 3: Numeric keypad and system keys. 
- * 
- * ,--------------------------------------------------.          ,--------------------------------------------------. 
- * |PrScreen|INSERT| PAUSE|      |      |      |      |          |      |      |      |      |      |      | NUM LK | 
- * |--------+------+------+------+------+-------------|          |------+------+------+------+------+------+--------| 
- * |        |      |      |      |      |      |      |          |      |   =??   |    |    |  ??  |   ??   | 
- * |--------+------+------+------+------+------|      |          |      |------+------+------+------+------+--------| 
- * |        |      |      |      |      |      |------|          |------|   %??   |    |    |  ??  |        | 
- * |--------+------+------+------+------+------|      |          |  ??  |------+------+------+------+------+--------| 
- * |        |      |  CUT | COPY | PASTE|      |      |          |      |    |    |    |    |  ??  |        | 
- * `--------+------+------+------+------+-------------'          `-------------+------+------+------+------+--------' 
-        |      |      |      |      |                                      |      |      |      |  ??  |      | 
-   `----------------------------------'                                      `----------------------------------' 
-                                        ,-------------.      ,-------------. 
-                                        |      |      |      |      |      | 
-                                 ,------|------|------|      |------+------+------. 
-                                      |      |      |      |      |      |      | 
-                                      |      |------|      |------|      |      | 
-                                      |      |      |      |      |      |      | 
-                                 `--------------------'      `--------------------' 
- */ 
-  [NUMS] = LAYOUT_ergodox( 
-    /* left hand */ 
-    KC_PSCR, KC_INS, KC_PAUS,    ___,     ___,      ___, ___, 
-    ___,     ___,    ___,        ___,     ___,      ___, ___, 
-    ___,     ___,    ___,        ___,     ___,      ___, 
-    ___,     ___,    MK_CUT,     MK_COPY, MK_PASTE, ___, ___, 
-    ___,     ___,    ___,        ___,     ___, 
-                                              ___, ___, 
-                                                   ___, 
-                                         ___, ___, ___, 
-    /* right hand */ 
-         ___,     ___,     ___,   ___,   ___,     ___,     KC_NLCK, 
-         ___,     KC_PEQL, KC_P7, KC_P8, KC_P9,   KC_PMNS, KC_SLCK, 
-                  KC_PCMM, KC_P4, KC_P5, KC_P6,   KC_PPLS, ___, 
-         KC_PENT, KC_P0,   KC_P1, KC_P2, KC_P3,   KC_PAST, ___, 
-                           ___,   ___,   ___,     KC_PSLS, ___, 
-    ___, ___, 
-    ___, 
-    ___, ___, ___), 
- 
-  // Layer 4: hand swap, all keys are mirrored to the other side of the keyboard 
-  // except for the layer toggle itself (so there is no right arrow when this 
-  // layer is activated). 
-  [SWAP] = LAYOUT_ergodox( 
-    /* left hand */ 
-    ___, ___, ___, ___, ___, ___, ___, 
-    ___, ___, ___, ___, ___, ___, ___, 
-    ___, ___, ___, ___, ___, ___, 
-    ___, ___, ___, ___, ___, ___, ___, 
-    ___, ___, ___, ___, ___, 
-                             TT(SWAP), ___, 
-                                       ___, 
-                             ___, ___, ___, 
-    /* right hand */ 
-         ___, ___, ___, ___, ___, ___, ___, 
-         ___, ___, ___, ___, ___, ___, ___, 
-              ___, ___, ___, ___, ___, ___, 
-         ___, ___, ___, ___, ___, ___, ___, 
-                   ___, ___, ___, ___, ___, 
-    ___, TT(SWAP), 
-    ___, 
-    ___, ___,      ___), 
- 
-  // Layer 5: The LEDs are showing the "standard" caps/num/scroll lock indicator 
-  // instead of their default which shows the currently active layers (FN, NUMS, 
-  // and MOUSE in that order). 
-  [SYSLEDS] = LAYOUT_ergodox( 
-    /* left hand */ 
-    ___, ___, ___, ___, ___, ___, ___, 
-    ___, ___, ___, ___, ___, ___, ___, 
-    ___, ___, ___, ___, ___, ___, 
-    ___, ___, ___, ___, ___, ___, ___, 
-    ___, ___, ___, ___, ___, 
-                                  ___, ___, 
-                                       ___, 
-                             ___, ___, ___, 
-    /* right hand */ 
-         ___, ___, ___, ___, ___,         ___, ___, 
-         ___, ___, ___, ___, ___,         ___, ___, 
-              ___, ___, ___, ___,         ___, ___, 
-         ___, ___, ___, ___, ___,         ___, ___, 
-                   ___, ___, TT(SYSLEDS), ___, ___, 
-    ___, ___, 
-    ___, 
-    ___, ___, ___), 
-}; 
- 
-// Whether the macro 1 is currently being recorded. 
-static bool is_macro1_recording = false; 
- 
-// The current set of active layers (as a bitmask). 
-// There is a global 'layer_state' variable but it is set after the call 
-// to layer_state_set_user(). 
-static uint32_t current_layer_state = 0; 
-uint32_t layer_state_set_user(uint32_t state); 
- 
-// Method called at the end of the tap dance on the TAP_MACRO key. That key is 
-// used to start recording a macro (double tap or more), to stop recording (any 
-// number of tap), or to play the recorded macro (1 tap). 
-void macro_tapdance_fn(qk_tap_dance_state_t *state, void *user_data) { 
-  uint16_t keycode; 
-  keyrecord_t record; 
-  dprintf("macro_tap_dance_fn %d\n", state->count); 
-  if (is_macro1_recording) { 
-    keycode = DYN_REC_STOP; 
-    is_macro1_recording = false; 
-    layer_state_set_user(current_layer_state); 
-  } else if (state->count == 1) { 
-    keycode = DYN_MACRO_PLAY1; 
-  } else { 
-    keycode = DYN_REC_START1; 
-    is_macro1_recording = true; 
-    layer_state_set_user(current_layer_state); 
-  } 
- 
-  record.event.pressed = true; 
-  process_record_dynamic_macro(keycode, &record); 
-  record.event.pressed = false; 
-  process_record_dynamic_macro(keycode, &record); 
-} 
- 
-// The definition of the tap dance actions: 
-qk_tap_dance_action_t tap_dance_actions[] = { 
-  // This Tap dance plays the macro 1 on TAP and records it on double tap. 
-  [TAP_MACRO] = ACTION_TAP_DANCE_FN(macro_tapdance_fn), 
-}; 
- 
-// Runs for each key down or up event. 
-bool process_record_user(uint16_t keycode, keyrecord_t *record) { 
-  if (keycode != TD(TAP_MACRO)) { 
-    // That key is processed by the macro_tapdance_fn. Not ignoring it here is 
-    // mostly a no-op except that it is recorded in the macros (and uses space). 
-    // We can't just return false when the key is a tap dance, because 
-    // process_record_user, is called before the tap dance processing (and 
-    // returning false would eat the tap dance). 
-    if (!process_record_dynamic_macro(keycode, record)) { 
-      return false; 
-    } 
-  } 
- 
-  return true; // Let QMK send the enter press/release events 
-} 
- 
-// Runs just one time when the keyboard initializes. 
-void matrix_init_user(void) { 
-  ergodox_right_led_1_off(); 
-  ergodox_right_led_2_off(); 
-  ergodox_right_led_3_off(); 
-}; 
- 
-// Runs constantly in the background, in a loop. 
-void matrix_scan_user(void) { 
- 
-}; 
- 
-// The state of the LEDs requested by the system, as a bitmask. 
-static uint8_t sys_led_state = 0; 
- 
-// Use these masks to read the system LEDs state. 
-static const uint8_t sys_led_mask_num_lock = 1 << USB_LED_NUM_LOCK; 
-static const uint8_t sys_led_mask_caps_lock = 1 << USB_LED_CAPS_LOCK; 
-static const uint8_t sys_led_mask_scroll_lock = 1 << USB_LED_SCROLL_LOCK; 
- 
-// Value to use to switch LEDs on. The default value of 255 is far too bright. 
-static const uint8_t max_led_value = 20; 
- 
-// Whether the given layer (one of the constant defined at the top) is active. 
-#define LAYER_ON(layer) (current_layer_state & (1<<layer)) 
- 
-void led_1_on(void) { 
-  ergodox_right_led_1_on(); 
-  ergodox_right_led_1_set(max_led_value); 
-} 
- 
-void led_2_on(void) { 
-  ergodox_right_led_2_on(); 
-  ergodox_right_led_2_set(max_led_value); 
-} 
- 
-void led_3_on(void) { 
-  ergodox_right_led_3_on(); 
-  ergodox_right_led_3_set(max_led_value); 
-} 
- 
-void led_1_off(void) { 
-  ergodox_right_led_1_off(); 
-} 
- 
-void led_2_off(void) { 
-  ergodox_right_led_2_off(); 
-} 
- 
-void led_3_off(void) { 
-  ergodox_right_led_3_off(); 
-} 
- 
-// Called when the computer wants to change the state of the keyboard LEDs. 
-void led_set_user(uint8_t usb_led) { 
-  sys_led_state = usb_led; 
-  if (LAYER_ON(SYSLEDS)) { 
-    if (sys_led_state & sys_led_mask_caps_lock) { 
-      led_1_on(); 
-    } else { 
-      led_1_off(); 
-    } 
-    if (sys_led_state & sys_led_mask_num_lock) { 
-      led_2_on(); 
-    } else { 
-      led_2_off(); 
-    } 
-    if (sys_led_state & sys_led_mask_scroll_lock) { 
-      led_3_on(); 
-    } else { 
-      led_3_off(); 
-    } 
-  } 
-} 
- 
-uint32_t layer_state_set_user(uint32_t state) { 
-  current_layer_state = state; 
-  swap_hands = LAYER_ON(SWAP); 
- 
-  if (is_macro1_recording) { 
-    led_1_on(); 
-    led_2_on(); 
-    led_3_on(); 
-    return state; 
-  } 
- 
-  if (LAYER_ON(SYSLEDS)) { 
-    led_set_user(sys_led_state); 
-    return state; 
-  } 
- 
-  if (LAYER_ON(FN)) { 
-    led_1_on(); 
-  } else { 
-    led_1_off(); 
-  } 
- 
-  if (LAYER_ON(NUMS)) { 
-    led_2_on(); 
-  } else { 
-    led_2_off(); 
-  } 
- 
-  if (LAYER_ON(MOUSE)) { 
-    led_3_on(); 
-  } else { 
-    led_3_off(); 
-  } 
- 
-  return state; 
-}; 
-</code> 
-</hidden> 
ergodox.txt · Dernière modification : 2021/02/08 21:31 de simon